|
|
||
|
|
||
|
|
|
|
| .. Datenblätter .. SPI-Schnittstelle |
|
|
|
|
||
| SPI -Schnittstelle Die Anzeige verfügt über eine SPI-Schnittstelle. Diese wird durch ein 0-Signal an Pin 11, SPImode ausgewählt, also indem dieser Pin an GND gelegt wird. An der SPI-Schnittstelle ist eine dauerhafte Datenübertragung mit 200 kHz zum eDIP möglich. Wird nach den 8Bits eines übertragen Bytes eine Pause von 100µs eingelegt, so sind für Bytes Übertragungsfrequenzen bis 3MHz möglich. | ||
Daten lesen Um Daten vom eDIP zu lesen (z.B. das ACK-Signal) muss ein Dummybyte (z.B.0xFF) gesendet werden. Das eDIP benötigt Zeit um Daten bereitstellen zu können. Deshalb muss vor jedem zu lesenden Byte mindestens 6µs gewartet werden (keine Aktivität auf der CLK-Leitung) Einstellung des SPI-Übertragungsmodus DORD (Data Order) Es kann bestimmt werden, ob das Most Signifikant Bit (MSB) eines Bytes, also das höchste Bit, oder das Least Signifikant Bit (LSB) das niedrigste Bit als erstes gesendet werden soll. Diese Einstellung orientiert sich an den Einstellungsmöglichkeiten der Gegenstelle. CPOL (Clock Polarity) Hier wird vorgegeben, in welchem Zustand, Low (0) oder High (1), das Taktsignal des Masters seinen Ruhezustand besitzt. CPHA (Clock Phase) Die Taktphasen werden nach erster Flanke und zweiter Flanke unterschieden, nicht nach steigender oder fallener Flanke. Ob beispielsweise die erste Flanke steigt oder fällt, ist von dem Ruhezustand des Taktes abhängig. Bei welcher Flanke die Daten auf einer der Datenleitungen gelesen werden sollen, kann hier entschieden werden. |
||
|
|
|
|
|
Problembeschreibung. Datenpakete (Small Protokoll formatiert) können ohne Problem über die MOSI Leitung vom MCU (Master) zum Display (Slave) übertragen werden, vor dem ersten Byte muss das "SS" Signal von 1 auf 0 gesetzt werden, nach dem letzten Byte von 0 auf 1 (ein Absetzen des Signals zwischen den Bytes ist - wie im SPI Protokoll üblich - nicht nötig). Wenn nach dem letzten Byte eines Pakets das "ACK" Byte vom Display abgeholt werden soll, sollte es gemäss üblicher SPI Praxis reichen (noch während das SS Signal auf 0 steht) ein Leerzeichen zu senden und damit die SCL Taktleitung für die Dauer eines weiteren Bytes mit SCL Taktimpulsen zu belegen; damit wird das ACK (NAK) Byte über die MISO Leitung vom Slave zum Master zu geschoben und kann dann dort gelesen werden. Das funktioniert aber im eDIP so nicht: der Master erhält nicht - wie erwartet - ein ACK oder NAK, sondern das Echo des letzten gesendeten Datenbytes (im allgemeinen ist dies das BCC Byte). Dieses Problem kann folgender Weise umgangen werden: vor dem Senden des Leerzeichens (Belegen der SCL Leitung mit Takten zum Transfer der ACK Antwort) ist das "SS" Signal für mindestens 10 usec (empirisch gefunden) auf 1 und dann wieder auf 0 zu setzen. Danach legt das eDIP korrekt das ACK Byte auf die MISO Leitung und es wird korrekt übertragen. Neben dem Problem dieser nicht dokumentierten Anforderung hat dieser Sachverhalt auch eine schwerwiegende Folge auf den möglichen Durchsatz beim Abholen von Daten vom Display - bei 100 KHz Taktrate wird er auf die Hälfte des theoretisch möglichen Durchsatzes reduziert. Dieses Problem ist besonders schwerwiegend, wenn Datenpakete (z.B. nach einem Touchpanel Hit) vom Speicher des Displays zum Master geholt werden sollen: vor jedem einzelenen Byte muss "SS" für ca. 10 µsec auf 1 und dann wieder auf 0 gesetzt werden. Zusätzliche Frage: ich habe die minimal erforderliche Dauer des Signals auf der SS Leitung wurde empirisch mit 10 µsec angenommen - kann dieser Wert von Ihnen in der Spezifikation des eDIP klar definiert werden ? (auch bei Interrupt getriebenem Betrieb mit ca. 100 KHz Taktrate leicht zu implementieren durch Senden eines zusätzlichen Leerzeichens während die SS Leitung auf 1 liegt). Meine Testumgebung: MCU = AT90CAN128, Taktrate = 62.5 KHz, Problem unabhängig vom verwendeten SPI Modus. J. Harms Universität Genf |
||
|
|
.de