SPI esclavo

Este módulo incluye la abstracción de plataforma para la comunicación de esclavos SPI.

Resumen

Typedefs

otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) typedef
bool(*
Indica que se completó una transacción SPI con la duración determinada.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
Se invoca después de que se llama a una devolución de llamada de transacción completa y se muestra TRUE para realizar cualquier otro procesamiento necesario.

remotas

otPlatSpiSlaveDisable(void)
void
Apaga e inhabilita la interfaz secundaria SPI.
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
Inicializa la interfaz secundaria 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 se completó una transacción SPI con la duración determinada.

Los datos escritos en el secundario 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 procesamiento adicional. 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 establecido en otPlatSpiSlaveEnable()) que, a diferencia de esta devolución de llamada, se debe llamar desde el mismo contexto de SO al que se llama cualquier otra API o devolución de llamada de OpenThread.

Detalles
Parámetros
[in] aContext
Se pasó el puntero de contexto a otPlatSpiSlaveEnable().
[in] aOutputBuf
Valor de aOutputBuf de la última llamada a otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Valor de aOutputBufLen de la última llamada a otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
Valor de aInputBuf de la última llamada a otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Valor de aInputBufLen desde la última llamada a otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Longitud de la transacción completada, en bytes.
Qué muestra
TRUE si después de esta llamada muestra la plataforma debe invocar la devolución de llamada de proceso aProcessCallback, FALSE si no hay nada que procesar ni necesidad de 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 de transacción completa y se muestra TRUE para realizar cualquier otro procesamiento necesario.

A diferencia de otPlatSpiSlaveTransactionCompleteCallback, que se puede llamar desde cualquier contexto de SO (p.ej., ISR), se DEBE llamar a esta devolución de llamada desde el mismo contexto de SO que cualquier otra devolución de llamada o API de OpenThread.

Detalles
Parámetros
[in] aContext
Se pasó el puntero de contexto a otPlatSpiSlaveEnable().

remotas

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

Apaga e inhabilita la interfaz secundaria SPI.

otPlatSpiSlaveEnable

otError otPlatSpiSlaveEnable(
  otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback,
  otPlatSpiSlaveTransactionProcessCallback aProcessCallback,
  void *aContext
)

Inicializa la interfaz secundaria SPI.

Ten en cuenta que el secundario SPI no está listo por completo hasta que se prepara una transacción con otPlatSPISlavePrepareTransaction().

Si es otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF` bytes y se descartan todos los bytes recibidos.

Detalles
Parámetros
[in] aCompleteCallback
Puntero que dirige a la devolución de llamada de transacción completada.
[in] aProcessCallback
Puntero para procesar la devolución de llamada.
[in] aContext
Puntero de contexto que se pasará a las devoluciones de llamada.
Valores que se muestran
OT_ERROR_NONE
Se habilitó correctamente la interfaz SPI secundaria.
OT_ERROR_ALREADY
La interfaz secundaria SPI ya está habilitada.
OT_ERROR_FAILED
No se pudo habilitar la interfaz secundaria SPI.

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 ser válidos hasta que el conductor secundario de SPI llame a la devolución de llamada de transacción completa, o bien hasta después de la siguiente llamada a otPlatSpiSlavePrepareTransaction().

Se puede llamar más de una vez antes de que el principal de SPI inicie la transacción. Cada llamada correcta a esta función causará que se descarte los valores anteriores de llamadas anteriores.

No llamar a esta función después de una transacción completada es lo mismo que si se hubiera llamado previamente a esta función con las longitudes del búfer configuradas en cero y aRequestTransactionFlag en false.

Una vez que se hayan agotado el tiempo de espera de aOutputBufLen bytes de aOutputBuf, el PIN de MISO se fijará en alto 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 se registran aInputBufLen bytes de aInputBuf desde MOSI, se ignoran todos los valores posteriores del pin MOSI hasta que la instancia principal de SPI finaliza 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 en curso 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, aOutputBufLen es igual a 20 y la SPI principal registra 30 bytes, el valor 30 se pasa a la devolución de llamada de transacción completa.

Si se pasa un puntero NULL como aOutputBuf o aInputBuf, significa que ese puntero del búfer no debe cambiar de su valor anterior o 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 curso hará que se ignoren todos los argumentos y que el valor que se muestra sea OT_ERROR_BUSY.

Detalles
Parámetros
[in] aOutputBuf
Datos que se escribirán en el pin MISO
[in] aOutputBufLen
Tamaño del búfer de salida, en bytes
[in] aInputBuf
Datos que se leerán del PIN MOSI
[in] aInputBufLen
Tamaño del búfer de entrada (en bytes)
[in] aRequestTransactionFlag
Se establece como verdadera si se debe configurar la interrupción del host.
Valores que se muestran
OT_ERROR_NONE
La transacción se preparó correctamente.
OT_ERROR_BUSY
Hay una transacción en curso.
OT_ERROR_INVALID_STATE
No se llamó a otPlatSpiSlaveEnable().

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 contribuir a nuestra documentación, consulta Recursos.