Stap 3: Hoe om te lezen een Timing-Diagram
Nu ik heb uitgelegd flitser, SPI, en een specifieke implementatie van een SPI flash apparaat, de volgende dingen die je moet begrijpen zijn mededeling timing diagrammen *. Timing diagrammen verklaren de volgorde van de gegevens over de pinnen om instructies te geven aan het apparaat. Elk SPI apparaat reageert op zijn eigen set van instructies (bijvoorbeeld een flash-apparaat zal lezen of wissen van de instructie) en de timing-diagram is het verband tussen het conceptuele gedrag van de instructie en de daadwerkelijke hardware-protocol dat instructie uit te voeren.
In het diagram voor deze sectie mij tweede piloot het chip wissen timing diagram uit het gegevensblad want het is het gemakkelijkst te begrijpen.
De bodem-as is tijd, de verticale assen vertegenwoordigen vier SPI pinnen en de reeks gegevens moeten verschijnen op hen na verloop van tijd een instructie uit te voeren. Noot: "Hoge impedantie" betekent dat u kunt negeren dat signaal (het is gedreven niet 0 of 1, maar extreem hoge weerstand, dus het is in feite een open stroomkring). Wanneer twee lijnen (zoals DI verschijnen) gevallen die eenvoudige vertegenwoordigt dat een soort overgangen gebeuren maar zijn onbekend; een enkele lijn betekent een specifieke hoge of lage waarde aanwezig is.
Bekijk het diagram van links naar rechts en van boven naar beneden.
Om te praten op een SPI-apparaat, het chip-select moet worden gebracht hoog en dan gedreven lage (Vergeet niet /CS betekent actieve laag). /CS laag wordt gebracht, er rekening mee dat de klok in het diagram wordt zeer expliciet getekend om aan te tonen van de acht fasen. Dit betekent dat u moet pulse de klok achtmaal, eenmaal per bit. Op het moment dat de klok knipperen is, gaat de gegevens in van hoog naar laag naar hoog. Ik denk dat het DI-diagram is onjuist, want als u een verticale lijn beneden de stijgende rand van elke klok tekenen en berekenen van de binaire waarden van DI op die punten, moet je waarde 11000111 of 0xC7. Dit is de instructie die vertelt de chip zelf te wissen. Zodra chip select hoog wordt gebracht, zal de interne circuits beginnen het uitvoeren van de functie van 0xC7/Chip wissen. Deze instructie neemt ongeveer 1 ~ 2 seconden in beslag.
Houd in gedachten, hoeft niet daadwerkelijk knevel de klok pin 8 keer voor het verzenden van 8 bits van een byte, de SPI-bibliotheek doet dit voor u wanneer u de functie SPI.transfer() gebruiken. Moet u nog steeds handmatig rijden /CS met digitalWrite(), maar het SCK, MOSI en MISO is alles afgehandeld door de SPI-functies.
U zult opmerken in mijn broncode een functie genaamd "not_busy()". Deze functie voortdurend problemen een "Lees besturingselement registreren #1" en controleert bit 0, waarmee wordt aangegeven als de interne werking nog heeft voltooid, en de flitser niet bezet. De timing van deze operatie komt overeen met diagram 9.2.8 van het gegevensblad.
* Let op dat ik bedoel niet de elektrische timing diagrammen, die aan de nanoseconde uitleggen de setup en houd tijden voor de interne digitale logica; de diagrammen die ik bedoel zijn de logische diagrammen negeren van nanoseconden en de opeenvolging van logische gebeurtenissenbeschrijven. De werkelijke elektrische timing van de SPI interface wordt afgehandeld door de Arduino SPI-bibliotheek. En om eerlijk te zijn, dat de code is niet zeer complex, en verder kan worden vereenvoudigd als u voor een specifiek apparaat ontwerpt.