Forum: Mikrocontroller und Digitale Elektronik SPI mit CC2420


von Robert P. (robertoo)


Angehängte Dateien:

Lesenswert?

Hallo liebe Leute

Ich habe ein Problem mit SPI und den CC2420

Ich habe da ein unbekanntes Gerät mit einem Pic, das per SPi auf einem 
CC2420 zugreift.
Mit der Zigbee Kommunikation gibt es Probleme und ich wollte mal 
probieren, den CC2420 direkt, über ein SPI Modem anzusprechen (SPI/USB)
Dazu habe ich den PIC im Reset gehalten und greife direkt auf den CC2420 
per SPI zu.
Ich habe mal probiert die gleichen Befehle zu senden, wie der Pic
Der Status von 40 kommt vom CC2420 zurück aber keine weiteren Daten.

Beim ersten Bild sieht man die org. Daten. (ein Teil)
Bei Befehl 0x80 geht MISO dann auf High und gibt in Folge dann weitere 
Daten zurück.
Bei meinem Modem kommt bei 0x80 nur ein kleiner High Puls und MISO geht 
wieder auf Low.
Bei den weiteren Sequenzen bleibt dann MISO immer auf Low.
Wie wenn ich da nach 0x80 irgendwas abgewürgt hätte ?

Alle sonstigen Signale sind gleich wie org. mit dem Pic
Vreg_Enable , Clock Frequenz, Enable usw..
Das einzige was mir jetzt auffällt, dass die Abstände von Befehl zu 
Befehl org. kürzer sind als über mein Modem.
Org. 40µs, mit dem Modem 800µs und dann mal mit höherer Baudrate 
verkürzt auf 127µs. Es ändert sich aber nix.

Und was mir noch auffällt, das mein Modem das MISO und MOSI Signal im 
Leerlauf auf High hält.
Der PIC eher auf Low.
Wenn aber Enable EIN ist, sind die Signale wieder gleich.
Also sollte das eigentlich egal sein ?!

CPOl und CPHA sollte auch passen...

Hat jemand eine Idee, warum  mir der CC2420 nicht gleich antwortet wie 
mit dem Pic ?

Irgendwie fällt mir jetzt nix mehr ein... :-(

l.G. Robert

von Harry L. (mysth)


Lesenswert?

Robert P. schrieb:
> ich wollte mal
> probieren, den CC2420 direkt, über ein SPI Modem

Was ist ein SPI-Modem?

von mitlesa (Gast)


Lesenswert?

Robert P. schrieb:
> Irgendwie fällt mir jetzt nix mehr ein... :-(

Bei deinen "nicht-ok"-Screenshots fällt mir auf dass CS dauernd
low ist. Da fühlt sich ein SPI Slave irgendwann beleidigt bzw.
er weiss dann einfach nicht wann "es los geht" bzw. wann eine
Datenübertragung beendet ist.

Entweder hast du es unvollständig dargestellt oder du machst
mit dem CS gar nichts, dann wird das nix.

Das Wort Modem habe ich im Zusammehang mit SPI noch nicht
gehört. Bitte um Aufklärung bzw. Zurechtrückung deiner eigenen
Verwendung von Begriffen.

von Robert P. (robertoo)


Lesenswert?

Hallo
Das CS ist gleich wie bei der Original Übertragung.
Sieht man hier nicht so gut, weil ich den Bildausschnitt kleiner gemacht 
habe.
Vor der Sequenz ist es High, dann Low und am Schluss wieder High

SPI Modem nenne ich mein kleines Modul von ELV
Da kann man über USB, ein SPI Signal erzeugen und auch lesen.
Am PC kann man da per Terminalprogramm (z.B. hterm) Befehle an das 
Modem, Kästchen, Schnittstellenwandler, schicken und dieses wandelt es 
dann in SPi um
Sowas:
https://de.elv.com/elv-usb-spi-interface-usb-spi-komplettbausatz-131292

Ja, eigentlich sollte man sagen Interface ;-)

l.G. Robert

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Kannst du die kompletten Traces des LA hier hinlegen?

Schon viele Jahre her, dass ich den CC2420 das letzte Mal in den Fingern 
hatte, ich muss da auch erstmal ins Datenblatt gucken, was der wie 
machen sollte.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Aaalso, 0xea 0x80 sind:
1
7   6   5   4   3   2   1   0      7   6   5   4   3   2   1   0
2
M/R A6  A5  A4  A3  A2  A1  A0     B1  B0  W/R x   x   x   x   x
3
1   1   1   0   1   0   1   0      1   0   0   0   0   0   0   0

Das Ganze ist also ein Zugriff auf den internen RAM. Es wird Bank 2 
ausgewählt (B1=1, B0=0), das ist die "security bank". Die Adresse im RAM 
ist 0x6a, es sollen Daten gelesen und geschrieben werden. 0x6a ist die 
short address, die fürs Adressfilter benutzt wird. Da ist also in erster 
Linie interessant, was geschrieben wird – die zurückgelesenen Daten (in 
deinem Beispiel die gleiche Adresse) werden vermutlich vom Controller 
ignoriert.

Ohne die komplette Konversation aufzudröseln, wirst du da wohl keine 
Chance haben. In dem Chip hängt ja eins vom anderen ab, nachfolgende 
Aktionen durchaus auch davon, was zuvor von der Gegenseite empfangen 
worden ist. Wenn Frame Security noch mit ins Spiel kommt (was bei Zigbee 
normalerweise der Fall sein sollte), kannst du auch kein einfaches 
Replay machen: die Frames haben einen Zähler, und die Entschlüsselung 
funktioniert nur, wenn beide Seiten damit synchron sind (beginnend ab 
was auch immer als Pairing benutzt wird). Wenn du da Signalfolgen 
nochmal abspielst, wird die Gegenseite schlicht nicht drauf antworten, 
weil die Entschlüsselung fehlschlägt.

von Robert P. (robertoo)


Lesenswert?

Hallo

Hier mal auf die schnelle die originalen Werte ohne Zeitangaben:

MOSI  MISO

1  0

6  0

18  0
41  0
88  0

11  40
1A  0
F2  0
12  40
5  0
0  0
15  40
80  0
FF  0
1C  40
0  0
0  0

0  40

EA  40
80  0
EF  EF
CD  CD

E8  40
80  0
AB  AB  <----
87  87

3  40

6  46
8   40
18  40
41  0
A6  0

3  40

Alles ist ohne weitere Teilnehmer.
Es geht mir nur mal darum, das ich das gleiche erhalte wie über den Pic
(Ohne Teilnehmer usw.)
Die obigen Werte klingen auch gut und tuen für meinen ersten versuch 
eigentlich wenig zu Sache....

Bei meinem Interface kommt halt dann ab 0x80  (nach E8) keine Daten vom 
CC2410 zurück.
In den oberen Daten würde 0xAB zurück kommen. (mit PIC)
(Sende das gleiche wie oben)
Komischerweise bekomme ich bei den Registern (3,6,8 usw.) 0x40 schon 
zurück (Status das OSC läuft)
Nur Daten keine ?!

Ein anderer versuch sollte dann sein, dass ich den Security Bereich 
auslese.
Das müsste dann eigentlich mit
A0   (nur lesen)
A0   (nur lesen)
funktionieren ?!
Oder stimmt meine Berechnung mit den 9 Bits da nicht?
( Also lesen ab 0x100)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sorry, der Zahlensalat ist mir gerade zu schwierig zu überblicken.

Du müsstest dir schon mal die Mühe machen, die Bits und Bytes da 
auseinander zu klamüsern gemäß des CC2420-Datenblatts um zu sehen, was 
da an welcher Stelle passiert. Irgendein Python- oder Perlscript, den 
man über die decodierten SPI-Daten sendet.

von Robert P. (robertoo)


Angehängte Dateien:

Lesenswert?

ups.. sorry

Bei mir waren das noch zwei Spalten..
Auf die Schnelle als Bild als zwei Zeilen

Bis zum Pfeil ist alles gleich.
Ab dem Pfeil kommen bei mir keine Daten mehr vom CC2420

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ja, wie gesagt, mir ist das jetzt zu müßig, mit der Hand hier jede 
einzelne SPI-Transaktion zu decodieren um zu sehen, was da überhaupt im 
Chip passiert.

Bloßer Blick auf die Zahlenkolonnen hilft da nicht für eine Erleuchtung.

von Robert P. (robertoo)


Lesenswert?

@jörg
Ok
Es geht ja vorerst nur mal darum, warum ich nicht das gleiche 
zurückbekomme wie  der Pic.
(ohne Teilnehmer)

Die SPI Signale müssten ja eigentlich passen ?!
0x40 bekomme ich ja zurück.

Andere Frage:
Ich kapiere nicht so recht das mit dem Schreiben/lesen-Bit zu tun ist.

Wenn ich aus dem Security Ram lesen will, z.B. ab 0x100 dann besteht die 
Adresse ja aus zwei Byte die ich per SPI übertrage
Einmal 6Bit und einmal 2 Bit
Bei jedem Byte könnte man Lesen/Schreiben einstellen (ein Bit)
Es würde ja keinen Sinn machen, wenn ich bei jedem Byte ein anderes 
Schreib/Lese Bit gesetzt hätte ?! oder?

Wenn ich nur ab Adresse 0x100 lese möchte, stimmen dann die
Bytes A0 (erstes Byte) und A0 (zweites Byte) als Adresse für 0x100 nur 
lesen ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Robert P. schrieb:

> Die SPI Signale müssten ja eigentlich passen ?!

Wie gesagt, vermag ich ohne Rückübersetzung in symbolische Werte jetzt 
nicht zu sagen. Du müsstest ggf. auch noch sowas wie /RESET ansehen. 
Wenn das zwischenzeitlich gezogen wird, ändert das auch das Verhalten.

> Wenn ich aus dem Security Ram lesen will, z.B. ab 0x100 dann besteht die
> Adresse ja aus zwei Byte die ich per SPI übertrage
> Einmal 6Bit und einmal 2 Bit
> Bei jedem Byte könnte man Lesen/Schreiben einstellen (ein Bit)

Nein, das R/W-Bit gibt es beim RAM-Zugriff nur im zweiten Byte. Das 
erste Byte hat Bit 7 gesetzt als Kennzeichen für den RAM-Zugriff, danach 
folgen die 7 niederwertigen Adressbits. Im zweiten Byte enthalten Bit 7 
und Bit 6 die Bank-Nummer des RAMs, Bit 5 ist dann das R/W-Bit. Bit 4 
bis 0 sind X (don't care).

> Wenn ich nur ab Adresse 0x100 lese möchte, stimmen dann die
> Bytes A0 (erstes Byte) und A0 (zweites Byte) als Adresse für 0x100 nur
> lesen ?

Nein, 0x80 0xA0 wären dann korrekt.

von Robert P. (robertoo)


Lesenswert?

Danke, dass muss ich mir morgen nochmal genau ansehen.😁

von Robert P. (robertoo)


Angehängte Dateien:

Lesenswert?

Hallo Jörg
Hatte mir das so wie im Bild aufgeschlüsselt.
Habe mich da unten verrechnet. Müsste natürlich 80 und A0 sein.

Aber für was ist das linke Bit dann ?
Ich Dachte das ist auch für Lesen/Schreiben ?
Oder ist das nur wenn man 1 Byte verwendet ?
Bei 2 Byte Adressweite dann nur das schreib/lese Bit von Byte 2 ?

von mitlesa (Gast)


Lesenswert?

Bei soviel Herumgewurschtel das ich da sehe hätte ich mir schon
längst einem Mikrocontroller zu Hilfe genommen und ein eigenes
kleines Progrämmchen geschrieben.

So etwas scheint aber bei dir nicht möglich zu sein wenn du
schon ein einfaches USB-zu-SPI Modul als "Modem" bezeichnest.

von Robert P. (robertoo)


Lesenswert?

Deine Meinung in Ehren, aber das ist nicht das Thema ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Robert P. schrieb:
> Aber für was ist das linke Bit dann ?
> Ich Dachte das ist auch für Lesen/Schreiben ?

Bit 7 Byte 0: Entscheidung Register- oder RAM-Zugriff

Bei Registerzugriff: Bit 6 Byte 0: Entscheidung Lesen/Schreiben

Bei RAM-Zugriff: Bit 5 Byte 1: Entscheidung Lesen/Schreiben

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.