SPI transfer length

OP #4115664
Lesenswert?
• ▲
▼
Hallo Forum,

ich bin gerade dabei einen WiFi-Chip von Redpine Signals zum laufen zu 
bringen. Genauer ist es ein RS9113 Dualband mit integrierter Antenne.

Ich steuere das Ganze mit einem Arduino UNO über SPI an. Die 
Initalisierung klappt, das heißt prinzipiell funktioniert die 
Übertragung anscheinend. Auch die Antwortbits lassen sich, zumindest 
beim Initialisieren, korrekt auslesen.

Jetzt ist es so, dass vor jedem Tranfser immer einige Kommando-Bytes 
geschickt werden müssen, in denen Bit-weise codiert Informationen wie 
read/write, memory/register usw. stehen. Jetzt steht in dem Userguide 
folgende Codierbeschreibung für das C1 Kommando, was jedem Transfer 
vorraus geschickt werden muss:

C1
Bit [7:6] Command Type
          "00" Init Command
          "01" read/write Command
          "10", "11" reserved

... restliche Bits sind klar verständlich

Bit 2     2-bit or 16-bit length for the transfer
          "0" 2-bit length for transfer
          "1" 16-bit length for tranfser

Bit [1:0] 2-bit length (in terms of bytes) for the transfer (valid only 
if  bit 2 is cleared)
          "00" 4 bytes length
          "01" 1 bytes length
          "10" 2 bytes length
          "11" 3 bytes length


Meine Frage:

Wie soll ich die Bits 0-2 verstehen? Ich bekomme es nicht ordentlich 
übersetzt. Heißt es, dass hier angegeben werden soll, wieviele Bits mit 
einmal übertragen werden? (SPI.tranfser() von der Arduino lib überträgt 
8 Bits)
Andererseits muss man im C2 Kommando schon die "granularity of the 
write/read data", also die Feinheit der Schreibe- und Lesedaten angeben 
(wählbar sind 8-bit oder 32-bit mode).

Für eventuelle Erfahrungen oder Vorschläge für eine richtige Übersetzung 
wäre ich sehr dankbar.

Grüße Andre
#4115743
Lesenswert?
• ▲
▼
Andre Richter schrieb:
> Heißt es, dass hier angegeben werden soll, wieviele Bits mit
> einmal übertragen werden?

Nein. Da steht doch ausdrücklich "bytes".

Hier hat wohl jemand die Anzahl der zu übertagenen Bytes optimiert. Denn 
für den Fall Bit 2 = "1" müssen ja die 16 Bit (2 Byte) als Tansferlänge 
extra übertragen werden, was bei sehr kurzen Transfers natürlich einen 
signifikanten Overhead erzeugen würde.

Bei Transferlängen von 4,3,2 oder 1 kann man daher mit Bit2="0" die 
Länge codiert in Bit 0 und Bit 1 angeben und so 2 Bytes sparen. Wenn Bit 
2="1" ist, dann werden Bit 0 und Bit 1 offenbar nicht beachtet (don't 
care).
#4115745
Lesenswert?
• ▲
▼
Ich lese es eher so, dass Du Dich entscheiden sollst, wie Du die 
Übertragungslänge angeben willst.

Wenn Du Bit2 = 0 setzt, kannst Du 1 bis 4 bytes senden (je nach bits 
1,0)

Wenn Du Bit2 = 1 setzt, hast Du 2 Byte für die Längenangabe, aber wie 
die 2 Byte dann interpretiert werden, steht evtl. woanders.

Und wenn ein SPI.tranfser() 8 bit überträgt, musst es einfach 
entsprechend oft aufrufen..

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren