Pour autant que je sache, la transmission SPI pour un esclave SPI fonctionne comme ci-dessous:
- Le maître sélectionne un esclave à l'aide de la broche SS
- Le maître et l'esclave s'envoient des données simultanément
- Le maître démarre l'horloge et la transmission de données en même temps (il n'y a pas d'horloge avant l'opération d'écriture)
- Le maître arrête la transmission à tout moment (en arrêtant l'opération d'écriture et la génération d'horloge), même si l'esclave a plus de données à envoyer.
Existe-t-il une configuration d'esclave SPI qui permet à l'esclave de transmettre des données sans l'autorisation du maître?
Je pense juste à haute voix. Supposons qu'il n'y ait qu'un seul esclave et qu'une horloge continue soit fournie par le maître, etc.
Même si la déclaration supposée est vraie, le maître et l'esclave ne perdent-ils pas la synchronisation des octets (c'est-à-dire qu'ils reçoivent le flux binaire) car il n'y a pas de bits start-stop pour SPI?
Je pose une telle question parce que j'ai lu la section suivante de ce document .
2.2 Exemple SPI
L'exemple SPI ci-joint illustre l'utilisation de l'USART en mode synchrone. USART1 est configuré comme esclave, tandis que USART2 est maître. Les transactions suivantes ont lieu:
- Transmission des données du maître à l'esclave.
- Transmission des données de l'esclave au maître.
- Transmission de données du maître à l'esclave et de l'esclave au maître simultanément.
Le document donne un exemple SPI mais réalise l'exemple en utilisant des appareils USART. Et je comprends qu'un esclave USART peut démarrer une transmission sans l'autorisation du maître.
Je n'ai pas pu trouver le code source référencé par le document.
la source
Réponses:
Non, avec SPI, toutes les communications sont gérées par le périphérique maître. Vous avez raison de dire que le maître ne peut pas simplement fournir une horloge continue; il n'y aurait aucun moyen de détecter les limites d'octets.
Un appareil esclave aura souvent une broche de sortie distincte pour signaler au maître qu'il a des données disponibles. Cette broche est connectée à une entrée sur un microcontrôleur et est souvent utilisée comme interruption.
Ensuite, l'appareil peut affirmer la broche, ce qui fait tourner le microcontrôleur sur le bus SPI.
Pour des informations plus détaillées, lisez la suite :) Ceci est une version légèrement modifiée d'une explication trouvée ici :
Cela décrit le cas général. Il peut y avoir des complexités supplémentaires. Par exemple, certains circuits intégrés esclaves émettent en fait une sorte d'octet d'état en même temps qu'ils reçoivent une commande du maître. Donc, dans ce cas, le maître ne doit pas supprimer le premier octet reçu.
la source
Non, le maître est celui qui arbitre les chipsets et pilote l'horloge. Un esclave n'écoutera toujours que l'horloge et la puce. Le transfert de données peut être encore en duplex intégral. Il existe certaines implémentations où l'horloge peut être continue, mais cela n'a pas beaucoup d'importance car le chipselect est utilisé pour synchroniser les limites d'octets de toute façon. Mais il y a aussi des systèmes multimaître, donc en gros vous pouvez avoir un mécanisme pour que les appareils décident qui est esclave et maître. Ou incluez simplement un fil "d'interruption" séparé pour l'esclave pour signaler au maître qu'il a un paquet de données pour le maître.
la source