Analizando la implementación FIFO del SX1276

0

He revisado la hoja de datos HopeRF95W un par de veces; Algunas partes menos y otras partes.

El Extracción de datos de carga útil de FIFO en la página 36 es realmente muy claro y conciso.

Una vez que FifoPtrAddr se configura para que finalice el segmento escrito en el búfer (utilizando FifoRxCurrentAddr ), verificamos el número de bytes (NB) recibidos, recorramos ese número y leemos el RegFifo; que es un registro de 8 bits, que NB de bytes veces.

Este github implementación sigue esto también:

uint8_t currentAddr = ReadRegister(REG_FIFO_RX_CURRENT_ADDR);
uint8_t receivedCount = ReadRegister(REG_RX_NB_BYTES);
*p_length = receivedCount;

WriteRegister(REG_FIFO_ADDR_PTR, currentAddr);

for(int i = 0; i < receivedCount; i++) {
    payload[i] = ReadRegister(REG_FIFO);
}

Todo claro y fácil de entender. Solo tengo curiosidad por saber cómo el SX1276 knows carga los próximos 8 bits del FIFO en el RegFifo simplemente haciendo un bucle a través de él.

¿Es una de esas cosas donde una lectura desencadena algún evento / mecanismo interno en el chip?

Mi falta de comprensión aquí es probablemente solo falta de experiencia, ya que mi entrenamiento y experiencia están en python.

También tengo curiosidad por saber si este procedimiento de extracción de carga útil es la implementación FIFO típica , ¿o son siempre dependientes del chip?

    
pregunta Sam Hammamy

1 respuesta

0

En los niveles más bajos de la implementación FIFO, hay una dirección (valor de puntero) y una habilitación de escritura y lectura. Supongo que, sin verlo, la función ReadRegister () sabe cuántos se escribieron e incrementa el puntero de dirección cada vez que se lee.

En cuanto a las implementaciones FIFO típicas, en la forma más simple no es más que "escribir algunos datos incrementando el puntero de escritura cada vez; y, luego, leer los datos hasta un máximo de puntero de lectura = puntero de escritura" (puntero = dirección ). Podría implementarse como un búfer circular, podría ser "restablecer los punteros a 0" antes de que se escriban los siguientes datos, pero, al final, como usuario, debe comportarse como "igual" y ser independiente del dispositivo. La hoja de datos / guía del usuario debe informarle sobre cualquier detalle relacionado con su uso.

También se utilizan en el diseño de HW (es decir, SW no tiene acceso a él) para otras cosas, como amortiguadores elásticos ... por ejemplo. acepte una ráfaga de datos que llegue más rápido de lo que puede ser procesado y / o transmitido. Estos están dimensionados para el protocolo de comunicación y tienen limitaciones, como el tamaño máximo de ráfaga, el tiempo IDLE mínimo entre ráfagas, etc. En este caso, como persona de SW, ascendente en el lado de transmisión, es posible que necesite escribir su SW en consecuencia.

    
respondido por el CapnJJ

Lea otras preguntas en las etiquetas