SPI secundario
Este módulo incluye la abstracción de la plataforma para la comunicación de esclavos de SPI.
Resumen
Typedefs |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
typedefbool(*
Indica que una transacción SPI se completó con la longitud determinada. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
Se invoca después de que se llama a una devolución de llamada completa de la transacción y se muestra TRUE para realizar el procesamiento necesario. |
Funciones |
|
---|---|
otPlatSpiSlaveDisable(void)
|
void
Apaga y, luego, inhabilita la interfaz de esclavo de SPI.
|
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
|
Inicializa la interfaz esclava de SPI.
|
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
|
Prepara los datos para la próxima transacción de SPI.
|
Typedefs
otPlatSpiSlaveTransactionCompleteCallback
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
Indica que una transacción SPI se completó con la longitud determinada.
Los datos escritos en el esclavo se escribieron en el puntero indicado por el argumento aInputBuf
en la llamada anterior a otPlatSpiSlavePrepareTransaction()
.
Una vez que se llama a esta función, otPlatSpiSlavePrepareTransaction()
no es válido y se debe volver a llamar para que la siguiente transacción sea válida.
Ten en cuenta que siempre se llama a esta función al final de una transacción, incluso si aún no se llamó a otPlatSpiSlavePrepareTransaction()
. En esos casos, aOutputBufLen
y aInputBufLen
serán cero.
Se puede llamar a esta devolución de llamada desde el contexto de ISR. El valor que se muestra de esta función indica si se requiere más procesamiento. Si se muestra TRUE
, la implementación del controlador spi-slave de la plataforma debe invocar la devolución de llamada del proceso de transacción (aProcessCallback
establecida en otPlatSpiSlaveEnable()
), que, a diferencia de esta devolución de llamada, debe llamarse desde el mismo contexto de SO al que se llama cualquier otra API o devolución de llamada de OpenThread.
Detalles | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||||
Qué muestra |
VERDADERO si después de esta llamada muestra la plataforma, debe invocar la devolución de llamada del proceso
aProcessCallback ; FALSO si no hay nada que procesar y no es necesario invocar la devolución de llamada del proceso. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Se invoca después de que se llama a una devolución de llamada completa de la transacción y se muestra TRUE
para realizar el procesamiento necesario.
A diferencia de otPlatSpiSlaveTransactionCompleteCallback
, que se puede llamar desde cualquier contexto de SO (p.ej., ISR), esta devolución de llamada DEBE llamarse desde el mismo contexto de SO que cualquier otra API o devolución de llamada de OpenThread.
Detalles | |||
---|---|---|---|
Parámetros |
|
Funciones
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
Apaga y, luego, inhabilita la interfaz de esclavo de SPI.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
Inicializa la interfaz esclava de SPI.
Ten en cuenta que el esclavo de SPI no está completamente listo hasta que se prepare una transacción con otPlatSPISlavePrepareTransaction()
.
Si es otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
0xFF, descarta todos los bytes recibidos.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
||||||
Valores que se muestran |
|
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
Prepara los datos para la próxima transacción de SPI.
Los punteros de datos DEBEN seguir siendo válidos hasta que el controlador secundario de SPI llame a la devolución de llamada completa de la transacción o hasta después de la siguiente llamada a otPlatSpiSlavePrepareTransaction()
.
Se puede llamar más de una vez antes de que la instancia principal de SPI inicie la transacción. Cada llamada correcta a esta función hará que se descarten los valores anteriores de llamadas anteriores.
No llamar a esta función después de una transacción completada es lo mismo que si esta función se hubiera llamado previamente con las longitudes de búfer establecidas en cero y aRequestTransactionFlag
establecido en false
.
Una vez que se agoten los aOutputBufLen
bytes de aOutputBuf
, se fijará el pin MISO hasta que la instancia principal finalice la transacción de SPI. Este es el equivalente funcional de rellenar el final de aOutputBuf
con 0xFF
bytes hasta la longitud de la transacción.
Una vez que aInputBufLen
bytes de aInputBuf ingresen desde el MOSI, se ignorarán todos los valores posteriores del pin MOSI hasta que la instancia principal de SPI finalice la transacción.
Ten en cuenta que, incluso si se agotan aInputBufLen
o aOutputBufLen
(o ambos) antes de que la instancia principal de SPI finalice una transacción, se debe hacer un seguimiento del tamaño actual de la transacción para que se pase a la devolución de llamada completa de la transacción. Por ejemplo, si aInputBufLen
es igual a 10 y aOutputBufLen
equivale a 20, y la SPI principal bloquea 30 bytes, el valor 30 se pasa a la devolución de llamada completa de la transacción.
Si un puntero NULL
se pasa como aOutputBuf
o aInputBuf
, significa que ese puntero de búfer no debe cambiar de su valor anterior ni actual. En este caso, se debe ignorar el argumento de longitud correspondiente. Por ejemplo, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
cambia el puntero del búfer de entrada y su longitud, pero mantiene el puntero del búfer de salida como antes.
Cualquier llamada a esta función durante una transacción hará que todos los argumentos se ignoren y el valor que se muestre sea OT_ERROR_BUSY
.
Detalles | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||
Valores que se muestran |
|
Recursos
Los temas de referencia de la API de OpenThread se originan a partir del código fuente, disponible en GitHub. Para obtener más información o colaborar con nuestra documentación, consulta la sección Recursos.