Esclave SPI

Ce module inclut l'abstraction de plate-forme pour la communication avec les SPI esclaves.

Résumé

Définitions

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

Functions

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 de la prochaine transaction SPI.

Définitions

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 durée donnée.

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

Une fois cette fonction appelée, otPlatSpiSlavePrepareTransaction() n'est pas valide et doit être appelé à 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é. Dans ce cas, aOutputBufLen et aInputBufLen sont nuls.

Ce rappel peut être appelé à partir du contexte d'ISR. La valeur renvoyée par cette fonction indique si d'autres traitements sont requis. Si TRUE est renvoyé, la mise en œuvre du pilote esclave de plate-forme doit appeler le rappel du processus de transaction (aProcessCallback défini dans otPlatSpiSlaveEnable()), qui, contrairement à ce rappel, doit être appelé depuis le même contexte d'OS que tout autre API ou rappel OpenThread.

Détails
Paramètres
[in] aContext
Point de repère contextuel transmis à : otPlatSpiSlaveEnable().
[in] aOutputBuf
Valeur de aOutputBuf entre le dernier appel et otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Valeur de aOutputBufLen entre le dernier appel et otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
Valeur d'aInputBuf du dernier appel à otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Valeur d'une InputBufLen depuis le dernier appel à otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Durée de la transaction en octets.
Renvoie
Prend la valeur TRUE si après cet appel renvoie la plate-forme, il doit appeler le rappel de processus aProcessCallback, ou 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)

Ce rappel est appelé après un rappel de transaction complète et renvoie TRUE pour effectuer un traitement supplémentaire.

Contrairement à otPlatSpiSlaveTransactionCompleteCallback, qui peut être appelé depuis n'importe quel contexte d'OS (par exemple, ISR), ce rappel DOIT être appelé à partir du même contexte d'OS que tout autre API/rappel OpenThread.

Détails
Paramètres
[in] aContext
Point de repère contextuel transmis à : otPlatSpiSlaveEnable().

Functions

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 otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF` octets, supprimez tous les octets reçus.

Détails
Paramètres
[in] aCompleteCallback
Pointez vers le rappel de transaction terminée.
[in] aProcessCallback
Pointeur pour traiter le rappel.
[in] aContext
Point de repère contextuel à transmettre aux rappels.
Valeurs renvoyées
OT_ERROR_NONE
L'interface de l'esclave SPI a bien été activée.
OT_ERROR_ALREADY
L'interface de l'esclave SPI est déjà activée.
OT_ERROR_FAILED
Échec de l'activation de l'interface de l'esclave SPI.

otPlatSpiSlavePrepareTransaction

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

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

Les pointeurs de données DOIVENT rester valides jusqu'à ce que le rappel de transaction complète soit appelé par le pilote esclave SPI ou jusqu'au prochain appel à otPlatSpiSlavePrepareTransaction().

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

N'appelez pas cette fonction après une transaction terminée comme si elle était précédemment appelée avec les deux longueurs de tampon définies sur zéro et aRequestTransactionFlag définie sur false.

Une fois que aOutputBufLen octets de aOutputBuf ont été synchronisés, le repère MISO doit être défini sur une valeur élevée jusqu'à ce que le maître termine la transaction SPI. Il s'agit de l'équivalent fonctionnel de la fin de aOutputBuf avec 0xFF octets jusqu'à la durée de la transaction.

Une fois que aInputBufLen octets d'une InputBuf ont été transmis depuis MOSI, toutes les valeurs suivantes du code MOSI sont ignorées jusqu'à la fin de la transaction par le maître SPI.

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 continue de la transaction doit toujours être maintenue pour être transmise au rappel de la transaction terminée. Par exemple, si aInputBufLen est égal à 10 et que aOutputBufLen est égal à 20, et que le maître SPI affiche un délai de 30 octets, la valeur 30 est transmise au rappel de la transaction terminée.

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, vous devez ignorer l'argument de longueur correspondant. Par exemple, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) modifie le pointeur du tampon d'entrée et sa longueur, mais conserve le pointeur de la mémoire tampon de sortie comme précédemment.

Tout appel à cette fonction lorsqu'une transaction est en cours entraîne l'exclusion de tous les arguments et la valeur OT_ERROR_BUSY.

Détails
Paramètres
[in] aOutputBuf
Données à écrire dans le code MISO
[in] aOutputBufLen
Taille du tampon de sortie, en octets
[in] aInputBuf
Données à lire avec le code 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 renvoyées
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é.

Resources

Les rubriques de référence de l'API OpenThread proviennent du code source, disponible sur GitHub. Pour en savoir plus ou contribuer à notre documentation, consultez la page Ressources.