Forum: Mikrocontroller und Digitale Elektronik L6474 SPI 7 Bit WTF?


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,

ich versuche gerade, einen L6474-Schrittmotortreiber in Betrieb zu 
nehmen, da das Teil ja laut Datenblatt ja sowohl klein als auch fein 
ist.

Ein wenig bringt mich die SPI-Schnittstelle allerdings ins Grübeln, um 
genau zu sein: Das Register TVAL (im Datenblatt auf Seite 33, 34 und 35 
beschrieben). Hier das Datenblatt:

http://www.st.com/content/ccc/resource/technical/document/datasheet/group3/57/28/bd/09/23/1f/47/1f/DM00043117/files/DM00043117.pdf/jcr:content/translations/en.DM00043117.pdf

Es ist 7 Bit breit. Was soll das?

Natürlich drängt sich die Frage auf: Was passiert, wenn ich es mit 8 Bit 
lese/schreibe? Wenn das Register wirklich 7 Bit breit ist, und der SPI 
mit MSB first schreibt und liest, würde ich erwarten, daß es letzte 
gelesene Bit immer 0 ist.

Lese ich unmittelbar nach dem Reset das Register aus, ergeben sich 0x29, 
wie es das Datenblatt sagt. Bei einem 7-Bit-Register, das mit 8 Pulsen 
gelesen wird, hätte ich allerdings 0x52 erwartet.

Schreibe ich '0x07' über den SPI mit dieser Registeradresse, werden auch 
'7' wieder ausgelesen, d.h. das letzte Bit wird nicht abgeschnitten.

Also ist dieses 7-Bit-Register wohl eher ein 8-Bit-Register mit 
führender Null. So weit, nicht erstaunlich.

Nur: Warum steht im Datenblatt, das Register sei 7 Bit breit? Ist das 
ein Fehler im Datenblatt, oder wird hier irgendeine mir unbekannte 
Notation stillschweigend vorausgesetzt?

Viele Grüße
W.T.

von eProfi (Gast)


Lesenswert?

"The integrated 8-bit serial peripheral interface (SPI) is used for a 
synchronous Serial communication between the host microprocessor (always 
master) and the L6474 (always slave)."

Ich würde das so interpretieren:
Es werden immer ganze 8-Bit-Bytes übertragen.
Bei 7-Bit-Register werden nur Bits 0 - 6 verwendet, D7 wird ignoriert.


> After each byte transmission, the CS input must be raised
Damit ist immer ein Byte gemeint, also MSB = Bit7 und LSB = Bit0.

Es gibt ja mehrere Register mit krummen Bitzahlen (z.B. 22).

von Hans (Gast)


Lesenswert?

In der Beschreibung von SetParam und GetParam auf Seite 44-45 steht es 
auch indirekt:

The number of bytes composing the VALUE argument depends on the length 
of the target register (see Table 16).

The number of bytes composing the command response depends on the 
length of the target register (see Table 16).

Wobei Tabelle 16 falsch ist, gemeint ist wohl Tabelle 9.

von Walter T. (nicolas)


Lesenswert?

OK, also geht der SPI (wie erwartet) immer von ganzen Bytes aus, und die 
Information, daß es sich bei der "Registerbreite" um den Teil eines 
komplett übertragenen Bytes handelt, habe ich tatsächlich überlesen. Sie 
war mir wohl zu subtil.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.