Question

Je faisais un peu de lecture et ont même obtenu un SPI « maître » travaillant sur mon microcontrôleur. Voici ma question, au fond si le maître veut initialiser une écriture à l'esclave que nous écrivons au SSPBUF, comment pouvons-nous contrôler ce que les esclaves avec répond? La présente fiche technique ne me semble pas clair vraiment à l'ordre des événements dans ce cas.

i.e.. Maître met un produit de carbonisation dans le SSPBUF, cette lance le module de SPI pour envoyer des données à l'esclave, pendant le déplacement, l'esclave renvoie un octet.

Dans le côté esclave, est-il quelque chose qui vous dit que vous avez des données entrantes, et vous pouvez écrire à votre SSPBUF d'abord, puis accepter les données?

ou

Avez-vous d'écrire à la SSPBUF la première « valeur de retour » vous voulez revenir envoyé avant que le maître peut avoir la possibilité d'initier un transfert?

Était-ce utile?

La solution

Vous souhaitez utiliser une interruption sur la ligne GPIO qui gère votre esclave de puce sélectionner. Assurez-vous qu'il ya suffisamment de temps pour l'esclave de traiter cette interruption et charger les données sortantes enregistrent avant que l'horloge commence.

Certains modules SPI excluent l'utilisation de GPIO - vous devez vérifier si votre module SPI a une fonction à puce de poignée sélectionner ou activer le module en fonction de l'activité GPIO

.

Autres conseils

En général ce que je l'ai fait dans le passé avec SPI est que j'envoie 2 octets du maître à l'esclave avec un retard minimal entre les deux. Le maître envoie: « X Y » où « X » est la variable qu'il souhaite lire de l'esclave et « Y » est vraiment juste une variable fictive qui est utilisée pour cadencer la réponse de l'esclave. En même temps, l'esclave reçoit une interruption quand il reçoit « X », lève les yeux vers la valeur à mettre dans sa mémoire tampon de sortie, et lorsqu'il reçoit « Y », la réponse à son paquet est cadencé vers le maître.

Quel que soit votre microcontrôleur est, trois est susceptible d'être un ISR associé à la réception des données SPI, et un registre dans lequel les données qui ont été reçues sont accessibles et copiés dans une variable locale.

D'abord, vous devez confirmer que votre maître et esclave ont une valeur commune des paramètres tels que la taille et le mode données SPI. mode SPI décidera de la polarité au repos de la ligne d'horloge SPI et les données d'échantillonnage bord si elle va être le premier ou le second. la taille des données nous dira s'il est 8 bits ou 16 bits ou peut-être quelque chose de différent en fonction de la puce.

Maintenant, quand maître sélectionne un esclave par puce / esclave select esclave broche devient actif et attend que l'horloge à changer d'état de lui, une fois change horloge d'attente d'esclaves d'état pour la ligne d'horloge supplémentaire pour premier ou deuxième bord en fonction de la sélection du mode SPI. S'il est des échantillons 1er esclaves de bord des données de ligne MOSI et y met du registre à décalage interne, si l'esclave a des données de transmission, il doit également conserver les données en ligne MISO avant que le bord d'horloge sélectionnée. Ce processus sera répété jusqu'à 8 ou 16 fois en fonction de la taille des données. À la fin, le maître et l'esclave peuvent générer des interruptions à leur unité centrale de traitement pour collecter les données (dans le cas du microcontrôleur).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top