SPI esclavo
Este módulo incluye la abstracción de la plataforma para la comunicación esclava 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 ha completado con la longitud especificada. |
otPlatSpiSlaveTransactionProcessCallback )(void *aContext) | typedefvoid(* Se invoca después de que se llama a una devolución de llamada completa de la transacción y devuelve TRUE para realizar cualquier procesamiento adicional requerido. |
Funciones | |
---|---|
otPlatSpiSlaveDisable (void) | void Apague y desactive la interfaz esclava SPI. |
otPlatSpiSlaveEnable (otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback,otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext) | Inicialice la interfaz esclava SPI. |
otPlatSpiSlavePrepareTransaction (uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag) | Prepare los datos para la próxima transacción 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 ha completado con la longitud especificada.
Los datos escritos en el esclavo se han escrito en el puntero indicado por el argumento aInputBuf
a la llamada anterior a otPlatSpiSlavePrepareTransaction()
.
Una vez que se llama a esta función, otPlatSpiSlavePrepareTransaction()
no es válido y se debe llamar de nuevo para que la siguiente transacción sea válida.
Tenga en cuenta que esta función siempre se llama al final de una transacción, incluso si aún no se ha llamado a otPlatSpiSlavePrepareTransaction()
. En tales casos, aOutputBufLen
y aInputBufLen
serán cero.
Esta devolución de llamada se puede llamar desde el contexto ISR. El valor de retorno de esta función indica si se requiere algún procesamiento adicional. Si se devuelve TRUE
, la implementación del controlador spi-slave de la plataforma debe invocar la devolución de llamada del proceso de transacción ( aProcessCallback
establecido en otPlatSpiSlaveEnable()
) que, a diferencia de esta devolución de llamada, debe llamarse desde el mismo contexto del sistema operativo que cualquier otra API / devolución de llamada de OpenThread.
Detalles | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
| ||||||||||||
Devoluciones | TRUE si después de esta llamada la plataforma debe invocar la devolución de llamada del proceso aProcessCallback , FALSE 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 devuelve TRUE
para realizar cualquier procesamiento adicional requerido.
A diferencia de otPlatSpiSlaveTransactionCompleteCallback
que se puede llamar desde cualquier contexto de sistema operativo (por ejemplo, ISR), esta devolución de llamada DEBE llamarse desde el mismo contexto de sistema operativo que cualquier otra API / devolución de llamada de OpenThread.
Detalles | |||
---|---|---|---|
Parámetros |
|
Funciones
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
Apague y desactive la interfaz esclava SPI.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
Inicialice la interfaz esclava SPI.
Tenga en cuenta que el esclavo SPI no está completamente listo hasta que se prepara una transacción utilizando otPlatSPISlavePrepareTransaction()
.
Si otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
bytes 0xFF` y descartará todos los bytes recibidos.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
| ||||||
Valores devueltos |
|
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
Prepare los datos para la próxima transacción SPI.
Los punteros de datos DEBEN permanecer válidos hasta que el controlador esclavo SPI llame a la devolución de llamada completa de la transacción, o hasta después de la siguiente llamada a otPlatSpiSlavePrepareTransaction()
.
Esta función se puede llamar más de una vez antes de que el maestro SPI inicie la transacción. Cada llamada exitosa 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 ambas longitudes de búfer establecidas en cero y aRequestTransactionFlag
establecida en false
.
Una vez que los bytes aOutputBufLen
de aOutputBuf
se han sincronizado, el pin MISO se establecerá en alto hasta que el maestro finalice la transacción SPI. Este es el equivalente funcional de aOutputBuf
el final de aOutputBuf
con 0xFF
bytes a lo largo de la transacción.
Una vez que se han aInputBufLen
bytes de aInputBufLen de aInputBuf desde MOSI, todos los valores posteriores del pin MOSI se ignoran hasta que el maestro SPI finaliza la transacción.
Tenga en cuenta que incluso si aInputBufLen
o aOutputBufLen
(o ambos) se agotan antes de que el maestro SPI finalice una transacción, aún se debe realizar un seguimiento del tamaño en curso de la transacción para pasar a la devolución de llamada completa de la transacción. Por ejemplo, si aInputBufLen
es igual a 10 y aOutputBufLen
igual a 20 y el maestro SPI aOutputBufLen
30 bytes, el valor 30 se pasa a la devolución de llamada completa de la transacción.
Si se pasa un puntero NULL
como aOutputBuf
o aInputBuf
, significa que ese puntero de búfer no debe cambiar de su valor anterior / 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 igual que antes.
Cualquier llamada a esta función mientras una transacción está en progreso hará que se ignoren todos los argumentos y el valor de retorno sea OT_ERROR_BUSY
.
Detalles | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
| ||||||||||
Valores devueltos |
|