2016-04-08 6 views
1

hey ich verwende ADS1292 für mein eigenes Projekt, und ich bin verwirrt mit SPI-Protokoll.SPI-Protokoll-Prozedur

Ich habe einen Code im Internet gefunden und ich habe festgestellt, dass er auf einmal sendet und empfängt.

zum Beispiel, ich möchte 0xFF an Slave-Gerät senden.

dann sendet es die Daten zuerst und wartet auf einen Empfang.

Und beim Empfangen von Daten sendet es ein Dummy-Byte und dann empfangen.

Wer bitte erklären, warum sie das tun?

uint8_t sEE_ReadByte(void) 
{ 
    return (sEE_SendByte(sEE_DUMMY_BYTE)); 
} 

uint8_t sEE_SendByte(uint8_t byte) 
{ 
    /*!< Loop while DR register in not empty */ 
    while (SPI_I2S_GetFlagStatus(sEE_SPI, SPI_I2S_FLAG_TXE) == RESET); 

    /*!< Send byte through the SPI peripheral */ 
    SPI_SendData(sEE_SPI, byte); 

    /*!< Wait to receive a byte => I do not understand this point*/ 
    while (SPI_I2S_GetFlagStatus(sEE_SPI, SPI_I2S_FLAG_RXNE) == RESET); 

    /*!< Return the byte read from the SPI bus */ 
    return (uint8_t)SPI_ReceiveData(sEE_SPI); 
} 

Antwort

3

Sie tun dies, weil dies die Art von SPI-Bus ist und dies ist, wie Bus-Kommunikation durchgeführt wird. Schauen Sie:

Datenübertragung

Jeder SPI Taktzyklus eine Vollduplex-Datenübertragung. Der Master sendet ein Bit auf dem MOSI-Pin und der Slave liest es, während der Slave ein Bit auf dem MISO-Pin sendet und der Master liest es. Diese Sequenz ist auch dann wahr, wenn Sie nur eine Datenübertragung in einer Richtung benötigen.

Schau dir das Bild (aus Wikipedia) enter image description here

So jede Übertragung beinhaltet zwei Schieberegister fester Größe (8bit für ex). Einer ist im Master-Gerät und einer im Slave. In jedem Taktzyklus werden die Daten verschoben. Wenn Sie fortfahren und genügend Impulse austakten (so viele wie die Größe der Register), haben der Master und der Slave Registerwerte ausgetauscht. Jetzt können Sie die Daten lesen und fortfahren. Natürlich ist das nicht alles. Es gibt auch

Daisy-Chain-Konfiguration

In dieser Konfiguration mehr als eine Slave-Vorrichtung auf die gleiche Kette von MISO und MOSI Leitungen verbunden ist. Das MOSI jedes Slaves ist mit dem MISO des vorherigen Slaves verbunden. (Siehe Bild unten). Mit dieser Konfiguration der Taktimpulse für einen vollen Zyklus ist jetzt (Anzahl der Geräte) * (sizo von Puffern)

enter image description here

Für weitere Informationen können Sie auch wikipedia sehen.

Schlussfolgerung

Als Ergebnis der oben genannten. Damit der Master ein Byte senden kann, muss er auch ein Byte empfangen. Dieses Byte hat keinen Wert für die Kommunikation. Ist ein Dummy-Byte und der Master verwirft es. Und um ein Byte zu empfangen, muss er auch eins übertragen. Wiederum überträgt der Master ein Dummy-Byte. Das Gleiche gilt für den Slave-Teil der Kommunikation.

hoo2