Forum: Mikrocontroller und Digitale Elektronik STM32: SPI (9bit/16bit)


von klicke (Gast)


Lesenswert?

Hi,

ich hab hier ein Device vor mir liegen, welches ich per SPI mit 9bit 
langen Befehlen füttern muss. Das Datenwort, was als Antwort zurückkommt 
ist jedoch 16bit lang.
Hat jemand eine Idee wie man das mit dem STM32 am besten bewerkstelligen 
kann?

Was ich mir überlegt habe (jedoch noch ungetestet):
Chip Select Low
//Schreiben
SPI deaktivieren
SPI Framelänge auf 8bit setzen
SPI aktivieren
ersten 8bit übertragen
SPI deaktivieren
9.bit "manuell" reintakten

//Lesen
SPI Framelänge auf 16bit setzen
SPI aktivieren
16bit Datenwort lesen
Chip Select High

Ich hab ehrlich gesagt keine Ahnung ob das funktionieren kann. Am 
ehesten macht mir der Punkt "9.bit reintakten" Kopfzerbrechen. Kann das 
überhaupt funktionieren? Oder sollte man hierfür Software SPI in 
Betracht ziehen?

Bin für Vorschläge offen.

von Stefan C. (felsnadel)


Lesenswert?

Da die SPI-Schnittstelle ja ein Schieberegister ist, muss man sowieso 
16-Bit reinschieben um 16-Bit zu erhalten. Eventuell sind noch 
"Dummy-Bits" einzufügen.

Gruß
Stefan

von klicke (Gast)


Lesenswert?

Hallo Stefan,

du meinst also, dass der Befehl nicht 9bit sondern eigentlich 16bit hat? 
Versteh ich dich da richtig?

Kann natürlich auch sein, dass ich da im Datenblatt[1] etwas falsch 
verstanden habe. Wenn ich die Abb. 5 auf Seite 8 richtig deute, dann 
schicke ich ein 9bit langes Datenwort an das Device und ein 16bit 
Datenwort kommt zurück.

Aber bitte korrigiert mich, wenn ich etwas falsch verstehe.

[1] 
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/BreakoutBoards/AN230_0.61.pdf

von Stefan C. (felsnadel)


Lesenswert?

Also meiner Meinung nach handelt es sich hierbei nicht um eine 
SPI-Schnittstelle. Bei einer SPI hast du 4 Leitungen und immer wenn du 
auf MOSI ein Bit herausschiebst bekommst du auf MISO ein Bit herein.

Du hast nur 3 Leitungen und m.E. keine Schiebefunktionalität. Da wird 
dir nichts anderes übrigbleiben als das Protokoll selber zu 
implementieren.

von Jean P. (fubu1000)


Lesenswert?

klicke schrieb:
> Hat jemand eine Idee wie man das mit dem STM32 am besten bewerkstelligen
> kann?

Stefan C. schrieb:
>> Da wird
>> dir nichts anderes übrigbleiben als das Protokoll selber zu
>> implementieren.

HUST bitte nicht,
das Protokoll was dort verwendet wird heist I2C und ist im STM32 
selbstverständlich in Hardware schon gegossen !

Gruß und n8

von Stefan C. (felsnadel)


Lesenswert?

Ach ja, das gabs ja auch noch! Ich bedecke mein Haupt mit Schande, war 
wohl doch schon zu spät... Zumindestens war es keine SPI ;)

von klicke (Gast)


Lesenswert?

Ihr habt natürlich Recht Hand gegen Kopf. Da ich auf Watterott gelesen 
hab, dass das Si4703 Breakout Board SPI unterstützt war ich irgendwie so 
drauf fixiert und hab nich mehr nachgedacht. Sorry!

I2C kann ich leider nicht nutzen, da die entsprechenden Portpins schon 
anderwertig belegt sind. Also wirds wohl doch auf selbst programmieren 
hinauslaufen - schade.

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.