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 est terminée avec la durée donnée.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
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
[in] aContext
Pointeur de contexte transmis à otPlatSpiSlaveEnable().
[in] aOutputBuf
Valeur de aOutputBuf entre le dernier appel à otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Valeur de aOutputBufLen entre le dernier appel à otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
Valeur de aInputBuf depuis le dernier appel à otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Valeur de aInputBufLen depuis le dernier appel à otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Longueur de la transaction terminée, en octets.
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
[in] aContext
Pointeur de contexte transmis à otPlatSpiSlaveEnable().

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 all0xFF` octets et supprimez tous les octets reçus.

Détails
Paramètres
[in] aCompleteCallback
Pointeur vers le rappel de transaction terminée.
[in] aProcessCallback
Pointeur permettant de traiter le rappel.
[in] aContext
Pointeur de contexte à transmettre aux rappels.
Valeurs de retour
OT_ERROR_NONE
L'interface SPI esclave a bien été activée.
OT_ERROR_ALREADY
L'interface SPI esclave est déjà activée.
OT_ERROR_FAILED
Échec de l'activation de l'interface SPI Slave.

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
[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 bien été préparée.
OT_ERROR_BUSY
Une transaction est en cours.
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable() n'a pas été appelé.

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.