La ligne IRQ est activée par le par le Bluefruit LE Shield (ou Friend) SPI dès que (et aussi longtemps que) un paquet SDEP complet
est disponible dans la mémoire tampon (buffer) du nRF51822. Vous devriez lire le paquet lorsque l'IRQ (interruption) est activée,
garder la ligne CS activée durant la transaction entière (comme détaillé ci-dessous).
La ligne IRQ reste activée aussi longtemps qu'un ou plusieurs paquets sont disponibles. Par conséquent, la ligne pourrait rester
active après la lecture d'un paquet, cela signifie qu'il reste encore des paquets à lire dans la mémoire tampon FIFO du module SPI
esclave.
FIFO est l'acronyme de First In First Out qui signifie "Premier Rentré Premier Sorti".
Paquets SDEP et identification des erreurs SPI
Une fois la ligne CS activée et le délai de 100µS écoulé, un simple octet devrait être lu sur le bus et ce dernier indiquera le type de
payload (paquet) disponible sur le nRF51822 (Voir "Message Type Indicator" ci-dessous pour plus d'information sur les types de
message SDEP). Gardez la ligne CS active après la lecture de ce premier octet au cas ou vous auriez besoin de poursuivre la
lecture de données complémentaire (le restant du payload s'il fait plus d'un octet).
Si nous nous trouvons face à un "Message Type Indicator" SDEP standard (0x10, 0x20, 0x40 or 0x80) alors nous pouvons
poursuivrez normalement la lecture
Il existe deux autre "Message Type Indicator" dont il faut tenir compte. Ces derniers indique un problème du côté esclave de la
communication SPI (le nRF51822):
0xFE : Le périphérique esclave n'est pas prêt (attendre un peu et réessayer)
0xFF : Indicateur de dépassement de lecture (read overflow indicator) sur le périphérique esclave (il y a eu une tentative de
lire plus de donnée que de donnée vraiment disponible sur l'esclave)
Cela signifie qu'il y a 6 réponses possible dansle premier octet lu (donc la valeur du "message type indicator" renvoyée par le
périphérique esclave).
Ce premier octet après l'envoi d'une commande SDEP peut avoir les valeurs suivantes:
0x10, 0x20, 0x40, 0x80 qui indiquent un type de message valide
0xFE, 0xFF qui indiquent une condition d'erreur
Exemple de Transaction
L'image suivante présente un exemple de réponse SDEP qui est réparti sur deux paquets (étant donné que la taille de la réponse
est > 20 octets). Notez comme la ligne IRQ reste active entre les deux paquets puisque plus d'un paquet était disponible dans la
mémoire tampon FIFO sur le Bluefruit LE (côté esclave du bus SPI):
Crédit: AdaFruit Industries www.adafruit.com
SDEP - protocole d'échange de donnée simplifié
SDEP est l'acronyme de "Simple Data Exchange Protocol" qui signifie "Protocole simple d'échange de donnée".
SDEP peut être utilisé pour envoyer et recevoir des messages binaires entre deux périphériques connectés ensembles par
l'intermédiaire d'un bus série (USB HID, USB Bulk, SPI, I2C, Wireless, etc.), échangeant des données en utilisant l'un des 4 types
de messages disponibles (message de Commande, Réponse, Alerte et Erreur).
Le protocole est conçu pour pour être flexible et extensible, avec le seule exigence d'avoir des messages individuel de maximum
20 octets, et que le premier octet de chaque message est un octet/byte (U8) qui indique le type de message. Le type de message
définit également le format du restant du paquet (payload).
Endianness
Endianness
https://fr.wikipedia.org/wiki/Endianness#Big_endian
communications lorsqu'ils transportent une informations d'une taille supérieure à 1 octet. C'est le cas des entiers qui se codent sur
http://www.adafruit.com
(wikipedia) est l'ordre dans lequel sont organiser les octets en mémoire et dans les