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
Robert P. schrieb: > ich wollte mal > probieren, den CC2420 direkt, über ein SPI Modem Was ist ein SPI-Modem?
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.
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
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.
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.
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)
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.
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
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.
@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 ?
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.
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 ?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.