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
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).
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..
aha! jetzt macht es auch sinn, warum C3 (LSB of transfer length) und C4 (MSB of transfer length) weg fallen, wenn C1 [2] = 0 ! peinlich! vielen dank für den anstoß! thread kann als gelöst markiert werden
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.