Etape 3: Comment lire un diagramme de temps
Maintenant que je vous ai expliqué flash, SPI, et une implémentation spécifique d’un SPI flash device, les choses suivante, que vous devez comprendre sont des diagrammes de timing communication *. Oscillogrammes expliquent l’ordonnancement des données à travers les broches pour donner des instructions à l’appareil. Chaque périphérique SPI répond à son propre jeu d’instructions (par exemple, un périphérique flash va avoir une lecture ou effacer l’instruction) et l’oscillogramme est le lien entre le comportement conceptuels de l’instruction et le protocole matériel réel d’exécuter cette instruction.
Dans le diagramme pour cette section j’ai copié l’oscillogramme effacement de puce de la feuille de données parce qu’il est plus facile à comprendre.
L’axe inférieur est venu, les axes verticaux représentent quatre épingles de SPI et les données de séquence doivent apparaître sur eux au fil du temps pour exécuter une instruction. Remarque: « Haute impédance » signifie que vous pouvez ignorer ce signal (il est conduit à pas 0 ou 1, mais extrêmement de haute résistance, donc c’est effectivement un circuit ouvert). Cas où deux lignes apparaissent (comme DI) simple représente qu’une sorte de transitions se produisent mais sont inconnue ; une seule ligne signifie qu'une valeur élevée ou basse spécifique est présente.
Penchons-nous sur le diagramme de gauche à droite et de haut en bas.
Afin de parler à n’importe quel appareil SPI, c' est puce-select doit être portées haut et ensuite conduit bas (Rappelez-vous/cs signifie basse active). Lorsque/cs est porté bas, note que l’horloge dans le diagramme est très explicitement attirée pour afficher les huit phases. Cela signifie que vous devez impulsion l’horloge huit fois, une fois par bit. Dans le temps que l’horloge est effet stroboscopique, données en passe de haut de bas en haut. Je pense que le diagramme de DI est erroné, car si vous tracez une ligne verticale vers le bas le flanc montant de chaque horloge et calculez les valeurs binaires de DI à ces points, vous devriez obtenir la valeur 11000111 ou 0xC7. Il s’agit de l’instruction qui raconte la puce à l’effacer lui-même. Une fois que chip select est porté haut, les circuits internes commencera à exécuter la fonction d’effacement 0xC7/Chip. Cette instruction prend environ 1 ~ 2 secondes pour terminer.
Gardez à l’esprit, il ne faut en fait activer/désactiver l’horloge pin 8 fois d’envoyer des 8 bits d’un octet, la bibliothèque SPI accomplit cette tâche pour vous lorsque vous utilisez la fonction SPI.transfer(). Vous aurez toujours besoin de conduire manuellement/CS avec digitalWrite(), mais la SCK, le MOSI et le MISO est tous gérés par les fonctions SPI.
Dans mon code source, vous remarquerez une fonction appelée « not_busy() ». Cette fonction émet un « registre de contrôle lecture #1 » et vérifie les bits 0, qui indique si l’opération interne est encore terminée, et le flash n’est pas occupé continuellement. Le calendrier de cette opération correspond à diagramme 9.2.8 de la feuille de données.
* Remarque, que je ne parle pas des oscillogrammes électrique, ce qui expliquent à la nanoseconde, le programme d’installation et maintenez fois pour la logique numérique interne ; les schémas, à que je me réfère sont les diagrammes logiques qui ignorent les nanosecondes et décrivent la séquence d’événements logiques. Le chronométrage électrique réelle de l’interface SPI est géré par la bibliothèque de l’Arduino SPI. Et pour être honnête, ce code n’est pas très complex et pourrait être encore simplifié si vous concevez à un périphérique spécifique.