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)
|
typedefbool(*
Indique qu'une transaction SPI est terminée avec la durée donnée. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
Appelé une fois qu'un rappel de fin de transaction a été appelé et qu'il renvoie TRUE pour effectuer tout traitement supplémentaire requis. |
distantes |
|
---|---|
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 est terminée avec la durée donnée.
Les données écrites sur l'esclave ont été écrites dans le pointeur indiqué par l'argument aInputBuf
de l'appel précédent de otPlatSpiSlavePrepareTransaction()
.
Une fois cette fonction appelée, otPlatSpiSlavePrepareTransaction()
n'est plus valide et doit être rappelé pour que la transaction suivante 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é. Dans ce cas, aOutputBufLen
et aInputBufLen
sont nuls.
Ce rappel peut être appelé à partir d'un contexte ISR. La valeur renvoyée par cette fonction indique si un traitement supplémentaire est nécessaire. Si TRUE
est renvoyé, l'implémentation du pilote spi-esclave de la plate-forme doit appeler le rappel du processus de transaction (aProcessCallback
défini dans otPlatSpiSlaveEnable()
). Contrairement à ce rappel, il doit être appelé à partir du même contexte d'OS que toute autre API ou rappel OpenThread.
Détails | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Paramètres |
|
||||||||||||
Renvoie |
TRUE si après le renvoi de cet appel, la plate-forme doit appeler le rappel de processus
aProcessCallback , FALSE s'il n'y a rien à traiter et s'il n'est pas nécessaire d'appeler le rappel de processus. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Appelé une fois qu'un rappel de fin de transaction a été appelé et qu'il renvoie TRUE
pour effectuer tout traitement supplémentaire requis.
Contrairement à otPlatSpiSlaveTransactionCompleteCallback
, qui peut être appelé à partir de n'importe quel contexte d'OS (par exemple, ISR), ce rappel DOIT être appelé à partir du même contexte de système d'exploitation que toute autre API ou rappel OpenThread.
Détails | |||
---|---|---|---|
Paramètres |
|
distantes
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 entièrement prêt tant qu'une transaction n'a pas été préparée à l'aide de otPlatSPISlavePrepareTransaction()
.
Si la valeur est otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
0xFF` octets et supprimez tous les octets reçus.
Détails | |||||||
---|---|---|---|---|---|---|---|
Paramètres |
|
||||||
Valeurs de retour |
|
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 complet de la transaction soit appelé par le pilote esclave SPI ou jusqu'au prochain appel à otPlatSpiSlavePrepareTransaction()
.
Il peut être appelé plusieurs fois avant que l'instance maître SPI ne commence la transaction. Chaque appel réussite à cette fonction entraîne la suppression des valeurs précédentes des appels précédents.
Ne pas appeler cette fonction après une transaction terminée revient à ce que cette fonction ait déjà été appelée avec les deux longueurs de tampon définies sur zéro et aRequestTransactionFlag
sur false
.
Une fois que aOutputBufLen
octets de aOutputBuf
ont expiré, le code MISO doit être défini sur un niveau élevé jusqu'à ce que le maître termine la transaction SPI. Il s'agit de l'équivalent fonctionnel du remplissage à la fin de aOutputBuf
avec 0xFF
octets jusqu'à la longueur de la transaction.
Une fois que aInputBufLen
octets d'aInputBuf ont été enregistrés à partir du MOSI, toutes les valeurs suivantes issues 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 l'instance maître SPI ne termine une transaction, la taille en cours de la transaction doit toujours être suivie pour être transmise au rappel de fin de transaction. Par exemple, si aInputBufLen
est égal à 10, aOutputBufLen
est égal à 20 et que l'horloge maître SPI compte 30 octets, la valeur 30 est transmise au rappel de fin de transaction.
Si un pointeur NULL
est transmis en tant que aOutputBuf
ou aInputBuf
, cela signifie qu'il ne doit pas changer de 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 du tampon d'entrée et sa longueur, mais conserve le même pointeur de tampon de sortie qu'avant.
Si vous appelez cette fonction pendant qu'une transaction est en cours, tous les arguments sont ignorés et la valeur renvoyée est OT_ERROR_BUSY
.
Détails | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Paramètres |
|
||||||||||
Valeurs de retour |
|
Ressources
Les sujets de référence de l'API OpenThread proviennent du code source, disponible sur GitHub. Pour en savoir plus ou pour contribuer à notre documentation, consultez la section Ressources.