Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Esclave SPI

Ce module inclut l'abstraction de plate-forme pour la communication esclave SPI.

Résumé

Typedefs

otPlatSpiSlaveTransactionCompleteCallback )(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) typedef
bool(*
Indique qu'une transaction SPI s'est terminée avec la longueur indiquée.
otPlatSpiSlaveTransactionProcessCallback )(void *aContext) typedef
void(*
Appelé après qu'un rappel de transaction complète est appelé et renvoie TRUE pour effectuer tout traitement supplémentaire requis.

Les fonctions

otPlatSpiSlaveDisable (void)
void
Arrêtez et désactivez l'interface esclave SPI.
otPlatSpiSlaveEnable ( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
Initialisez l'interface esclave SPI.
otPlatSpiSlavePrepareTransaction (uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
Préparez les données pour la prochaine transaction SPI.

Typedefs

otPlatSpiSlaveTransactionCompleteCallback

bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)

Indique qu'une transaction SPI s'est terminée avec la longueur indiquée.

Les données écrites sur l'esclave ont été écrites sur le pointeur indiqué par l'argument aInputBuf à l'appel précédent à otPlatSpiSlavePrepareTransaction() .

Une fois cette fonction appelée, otPlatSpiSlavePrepareTransaction() n'est pas valide et doit être appelée à nouveau pour que la prochaine transaction soit valide.

Notez que cette fonction est toujours appelée à la fin d'une transaction, même si otPlatSpiSlavePrepareTransaction() n'a pas encore été appelée. Dans de tels cas, aOutputBufLen et aInputBufLen seront à zéro.

Ce rappel peut être appelé à partir du contexte ISR. La valeur de retour de cette fonction indique si un traitement supplémentaire est nécessaire. Si TRUE est retourné, l'implémentation du pilote spi-slave de la plate-forme doit appeler le rappel du processus de transaction ( aProcessCallback défini dans otPlatSpiSlaveEnable() ) qui, contrairement à ce rappel, doit être appelé à partir du même contexte de système d'exploitation que toute autre API / rappel OpenThread est appelée.

Détails
Paramètres
[in] aContext
Pointeur de contexte passé dans otPlatSpiSlaveEnable() .
[in] aOutputBuf
Valeur de aOutputBuf du dernier appel à otPlatSpiSlavePrepareTransaction() .
[in] aOutputBufLen
Valeur de aOutputBufLen du dernier appel à otPlatSpiSlavePrepareTransaction() .
[in] aInputBuf
Valeur de aInputBuf du dernier appel à otPlatSpiSlavePrepareTransaction() .
[in] aInputBufLen
Valeur de aInputBufLen du dernier appel à otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Longueur de la transaction terminée, en octets.
Retour
TRUE si après le retour de cet appel, la plate-forme doit invoquer le processus de rappel aProcessCallback , FALSE s'il n'y a rien à traiter et qu'il n'est pas nécessaire d'appeler le rappel de processus.

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Appelé après qu'un rappel de transaction complète est appelé et renvoie TRUE pour effectuer tout traitement supplémentaire requis.

Contrairement à otPlatSpiSlaveTransactionCompleteCallback qui peut être appelé à partir de n'importe quel contexte de système d'exploitation (par exemple, ISR), ce rappel DOIT être appelé à partir du même contexte de système d'exploitation que n'importe quelle autre API / callback OpenThread.

Détails
Paramètres
[in] aContext
Pointeur de contexte passé dans otPlatSpiSlaveEnable() .

Les fonctions

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

Arrêtez et désactivez l'interface esclave SPI.

otPlatSpiSlaveEnable

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

Initialisez l'interface esclave SPI.

Notez que l'esclave SPI n'est pas complètement prêt tant qu'une transaction n'est pas préparée à l'aide de otPlatSPISlavePrepareTransaction() .

Si otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all octets 0xFF` et rejettera tous les octets reçus.

Détails
Paramètres
[in] aCompleteCallback
Pointeur vers le rappel de fin de transaction.
[in] aProcessCallback
Pointeur pour traiter le rappel.
[in] aContext
Pointeur de contexte à passer aux rappels.
Valeurs de retour
OT_ERROR_NONE
Activation réussie de l'interface esclave SPI.
OT_ERROR_ALREADY
L'interface SPI Slave est déjà activée.
OT_ERROR_FAILED
Échec de l'activation de l'interface esclave SPI.

otPlatSpiSlavePrepareTransaction

 otError otPlatSpiSlavePrepareTransaction(
  uint8_t *aOutputBuf,
  uint16_t aOutputBufLen,
  uint8_t *aInputBuf,
  uint16_t aInputBufLen,
  bool aRequestTransactionFlag
)

Préparez les données pour la prochaine transaction SPI.

Les pointeurs de données DOIVENT rester valides jusqu'à ce que le rappel de fin de transaction soit appelé par le pilote esclave SPI, ou jusqu'à ce qu'après le prochain appel à otPlatSpiSlavePrepareTransaction() .

Cette fonction peut être appelée plus d'une fois avant que le maître SPI ne lance la transaction. Chaque appel réussi à cette fonction entraînera la suppression des valeurs précédentes des appels précédents.

Ne pas appeler cette fonction après une transaction terminée est le même que si cette fonction était précédemment appelée avec les deux longueurs de tampon définies sur zéro et aRequestTransactionFlag défini sur false .

Une fois que aOutputBufLen octets de aOutputBuf a été cadencé, la broche MISO doit être mise à l'état haut jusqu'à ce que le maître termine la transaction SPI. C'est l'équivalent fonctionnel de aOutputBuf la fin de aOutputBuf avec 0xFF octets jusqu'à la longueur de la transaction.

Une fois aInputBufLen octets aInputBufLen de aInputBuf ont été cadencés à partir de MOSI, toutes les valeurs suivantes de la broche MOSI sont ignorées jusqu'à ce que le maître SPI termine la transaction.

Notez que même si aInputBufLen ou aOutputBufLen (ou les deux) sont épuisés avant que le maître SPI ne termine une transaction, la taille en cours de la transaction doit toujours être suivie pour être transmise au rappel de transaction complète. Par exemple, si aInputBufLen est égal à 10 et aOutputBufLen égal à 20 et que le maître SPI aOutputBufLen 30 octets, la valeur 30 est transmise au rappel de transaction complète.

Si un pointeur NULL est passé en tant que aOutputBuf ou aInputBuf cela signifie que ce pointeur de tampon ne doit pas changer par rapport à sa valeur précédente / actuelle. Dans ce cas, l'argument de longueur correspondant doit être ignoré. Par exemple, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) modifie le pointeur de tampon d'entrée et sa longueur mais conserve le pointeur de tampon de sortie comme précédemment.

Tout appel à cette fonction pendant qu'une transaction est en cours entraînera l' OT_ERROR_BUSY tous les arguments et la valeur de retour OT_ERROR_BUSY .

Détails
Paramètres
[in] aOutputBuf
Données à écrire sur la broche MISO
[in] aOutputBufLen
Taille du tampon de sortie, en octets
[in] aInputBuf
Données à lire à partir de la broche MOSI
[in] aInputBufLen
Taille du tampon d'entrée, en octets
[in] aRequestTransactionFlag
Défini sur true si l'interruption de l'hôte doit être définie
Valeurs de retour
OT_ERROR_NONE
La transaction a été préparée avec succès.
OT_ERROR_BUSY
Une transaction est actuellement en cours.
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable () n'a pas été appelé.