Forum: Mikrocontroller und Digitale Elektronik Adresserkennung beim Transceiver-Chip cc2420


von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!!

Kann mir jemand helfen?
Ich steuere den cc2420 über den Mikrocontroller msp430 an.
Die 16-Bit Short-Address sowie die PAN-ID habe ich den RAM geschrieben.
Das Adresserkennungsbit MDMCTRL0.ADR_DECODE habe ich gesetzt.

Laut Datenblatt sollte der FIFOP PIN des cc2420 erst auf high gehen, 
wenn die Adresserkennung positiv abgeschlossen wurde. Das Problem ist 
das er bei mir jedesmal auf high geht wenn er Pakete (auch mit falscher 
Adresse) empfängt.

Ich Wäre über jede Hilfe sehr dankbar, da ich nun schon seit einer Woche 
versuche dieses Problem in den Griff zu bekommen.

Im Anhang befindet sich der Quellcode meiner Receive- und 
Transmitfunktion sowie der Initalisierung des cc2420.

Lg. Christoph

von Tobi O. (der_ossi)


Lesenswert?

Hi,

hast du Bit 13 des MDMCTRL0 (Reserved Frame Mode) gesetzt?

gruss
Tobias

Edit: Bit 13 darf NICHT gesetzt sein (war evtl. etwas falsch von mir 
ausgedrueckt)...

von Christoph (Gast)


Lesenswert?

Hi Tobias,

Nein Bit 13 ist nicht gesetzt.
MDMCTRL0 ist wie folgt konfiguriert:

MSB: 0x0A   (0000 1010)
LSB: 0xE2   (1110 0010)

Danke für die Antwort!
Lg. Christoph

von Tobi O. (der_ossi)


Lesenswert?

Also es kann zwar daran liegen, dass ich heute total krank bin (nächste 
woche kann ich sicher wieder klar denken, aber heute und morgen lieg ich 
erstmal flach... Mittwoch fängt dann mein Urlaub an juhuuu ) g... 
Aber ich lese in der Doku nichts davon, dass der FIFOP nur hochgeht, 
wenn die Überprüfung abgeschlossen ist... Wo hast du das gelesen? Also 
auf Seite 41 steht zumindest nix davon (Figure 22)

von Christoph M. (ruuby)


Lesenswert?

Wünsch dir baldige Besserung. Aber sieh es positiv, ich habe das nächste 
halbe Jahr überhaupt keinen Urlaub, dafür doppelt soviel zu tun wie 
sonst. g...

In der Doku auf Seite 33: Absatz 4 und 6.
Auf Seite 34 gibt es dann noch eine Grafik dazu. (Figure 13)

Und die Grafik auf Seite 32 zeigt auch das der FIFOP Pin für Interrupts 
benutzt werden kann.

Gibt es denn irgendeine andere Methode wie man erkennen kann ob die 
address recognition erfolgreich war? Brauche die Adresserkennung aber 
auf jeden Fall Hardwaremäßig, da der Mikrokontroller bei falscher 
Adresse einfach weiter im Energiesparenden Modus "schlafen" sollte.

lg. Christoph

von Tobi O. (der_ossi)


Lesenswert?

danke :)

hmmm... Und bei welchem Typ von Paket hast du das schon ausprobiert?

Baust du ein PAN auf oder machst du das ganze quasi Ad-Hoc?

gruß

von Christoph M. (ruuby)


Lesenswert?

Das ganze sollte Ad-Hoc aufgebaut werden.

Allerdings habe ich das Problem schon wenn ich nur 2 Knoten benutze. 
Auch bei falscher Adressierung wird das Paket vom Empfänger erkannt und 
der FIFOP Pin geht auf high.

Bin ein bisschen ratlos, weil ich mir eigentlich dachte das die 
Adresserkennung eine Grundfunktion vom cc2420 ist und eigentlich leicht 
zu Aktivieren sein müsste.

lg. Christoph

von Tobi O. (der_ossi)


Lesenswert?

hm... Also Ad-Hoc arbeite ich momentan bloß mit dem CC2431 (location 
engine)

beim CC2420 hatte ich eigentlich gar keine Probleme mit der 
Adresserkennung... das hat immer klasse funktioniert. Jedoch habe ich 
ein PAN aufgebaut und einen Koordinator bestimmt...

Ich arbeite daran auch nur mit einem ATMega 2561. Da war eine komplette 
MAC dabei... das musste ich den FIFOP gar nicht überprüfen... würde mich 
aber jetzt schon mal interessieren, ob der bei mir auch gesetzt wird, 
wenn eine falsche Adressierung vorliegt. Ich bin einfach davon 
ausgegangen, dass die Adressfilterung im PHY geschieht. Aber wenn du 
jetzt sagst, dass das nicht funktioniert muss ich das bei gelegenheit 
mal überprüfen

von Christoph M. (ruuby)


Lesenswert?

Wie haben die Knoten bei deinem Netz bemerkt das sie Pakete vom Pan 
Koordinator erhalten die für sie bestimmt sind? Hast du fafür einen 
anderen PIN benutzt oder hast du einfach alle Pakete als Broadcast 
ausgeschickt und die Adresserkennung in der Software des 
Mikrokontrollers vorgenommen?

lg. Christoph

von Tobi O. (der_ossi)


Lesenswert?

Hi,

das ist ne gute Frage. g
Der MAC von Amtel hat mir das Paket komplett Fertig in nem struct 
übergeben. Ich hab den gar nicht genauer betrachtet (wieso auch :) )
Deswegen bin ich mir ja jetzt gar nicht mehr so sicher, ob das jetzt vom 
MAC gelöst wurde oder nicht. Ich find bloß grad absolut nicht die Zeit 
das herauszufinden.

gruß

von Christoph M. (ruuby)


Lesenswert?

Hab jetzt eine vorläufige Ersatzlösung gefunden.
Die Adresserkennung für PANs funktioniert einwandfrei. D.h. wenn ich 
jeden Knoten in ein eigenes PAN gebe kann ich ihn über die PAN ID 
ansprechen. Da diese 16 Bit lang ist kann ich vorläufig mal 65535 Nodes 
ansprechen. Das müsste fürs erste mal reichen. ;-)

Falls dir innerhalb der nächsten zwei Monate doch noch eine Lösung 
einfallen sollte, wäre ich dir dankbar wenn du sie mir mitteilen 
könntest.

lg. Christoph

von Tobi O. (der_ossi)


Lesenswert?

Hm... also ich hab wie gesagt mit dem CC2420 noch nicht Ad-Hoc 
gearbeitet... aber wenn du das jetzt so sagst muss ich das unbedingt mal 
ausprobieren. Bei mir hats aber auch mit 5 Devices in einem PAN gut 
funktioniert. Ich werd mich damit aber mal auseinandersetzen müssen... 
65535 Knoten sollten auf jeden Fall reichen. Oder willst du die 
Straßenlaternen von München per ZigBee ansprechen? g

hab mir das Thema auf jeden Fall schonmal aboniert :)

von Tobi O. (der_ossi)


Lesenswert?

Hmmm... ich seh da grad was in deinem Code... oder zumindest glaube ich 
etwas zu sehen... Kann aber auch der Urlaubswahn sein (noch 53 minuten 
g) Sind deine Pakete IEEE 802.15.4 Pakete? Wenn die nicht dem IEEE 
802.15.4 Standard entsprechen funktioniert die Adresserkennung nicht...

Ich hab übrigens auch ein lustiges Problem: Bei mir kommen keine ACKs 
an... kannst du dir das erklären? Ich habe mir einen kleinen Sniffer 
gebastelt (also im promiscuous mode) und will alles empfangen, was 
umherschwirrt... aber die Acknowledgement Frames werden nicht erkannt...

von Ruuby (Gast)


Lesenswert?

Danke, werde mir gleich mal die Paket-Formate nochmal näher anschauen.

Sprichst du bei deinem Problem jetzt vom cc2420 oder einem anderen Chip?
Beim cc2420 solltest du überprüfen ob du das MDMCTRL0-AUTOACK - Bit 
gestetzt hast. (Data Sheet Seite 65)

von Tobi O. (der_ossi)


Lesenswert?

Hi,

ich habe das Auto ACK auf 1... Die ACKs werden auch gesendet (laut 
Chipcon Packet Sniffer). Aber bei meinem CC2420 kommen die nicht an. Die 
Überprüfung des Physical Layer funktioniert ja (also wenn ein ACK kommt 
wird das nächste Paket geschickt, wenn nicht wird das Paket wiederholt 
gesendet). Aber vom MAC wird der ACK nicht erkannt, wahrscheinlich, weil 
der zu schnell kommt. Naja ist auch nicht wichtig das zu empfangen. Das 
was ich machen will funktioniert.

Die Paket-Typen findest du im IEEE 802.15.4 Std 
(http://standards.ieee.org/getieee802/download/802.15.4-2003.pdf)
Ab Seite 21 ;)

gruß
Tobias

von Christoph M. (ruuby)


Angehängte Dateien:

Lesenswert?

Anscheinend bin ich zu dämlich um zu erkennen was ich falsch mache. :-(
Wo siehst du genau den Fehler im Frameformat?

Preamble Sequence, Start of Frame Delimiter und FCS (MDMCTRL0.AUTOCRC = 
1) sollten vom cc2420 automatisch generiert werden.
Der Rest meines Frames entspicht doch dem Data frame format, oder?
(Code im Anhang)

lg. Christoph

von Tobi O. (der_ossi)


Lesenswert?

Hm... ich erkenne auch keinen Fehler...

Hast du mal folgendes probiert:

Setz mal ACK Req in deinem FCF auf 1 und versuche das Paket an die 
richtige Adresse zu schicken. Kommt ein ACK ist das ja richtig so :)
Danach machst du das Selbe nochmal schickst das Paket aber an eine 
Adresse, die nicht vorhanden ist... Kommt da auch ein ACK? (Es dürfte ja 
keins kommen)

von Christoph M. (ruuby)


Lesenswert?

Werde das gleich mal testen. Aber der FIFOP-PIN wird vermutlich trotzdem 
in beiden Fällen auf high gehen befürchte ich.

Hätte da noch eine zweite Frage (Vermutlich wird es nicht die Letzte 
sein ;-) )

Ich beschäftige mich gerade mit dem RSSI (Receive Signal Strength 
Indicator). So wie ich das verstanden habe, gibt es da 2 Möglichkeiten 
den herauszufinden:

1) Wenn MODEMCTRL0.AUTOCRC gesetzt ist wird das erste FCS-Byte durch 
den RSSI-Wert ersetzt.

2) Man liest den Wert einfach aus dem RSSI.RSSI_VAL Register aus.

Das Problem dabei ist nur das ich dabei jedesmal 2 völlig 
unterschiedliche Were bekomme und nicht wirklich weiss welchen der 
Beiden ich benutzen soll.

von Tobi O. (der_ossi)


Lesenswert?

Hi,

also zu erstens: Ja!

zu 2.) Auch richtig... Die Werte sind Signed Byte... Du musst die erst 
noch konvertieren... Gleich noch vorab: das erste Bit ist nicht das Bit, 
welches das Vorzeichen angibt, sondern es gibt Bestimmungen, wie man das 
umzuwandeln hat (ich find es bloß grad nicht... kann am Alkohol 
liegen... Jede woche das Selbe in der Abteilung :D)
Desweiteren ist auf dem RSSI ein Offset von ungefähr 40 drauf. Das heißt 
ein RSSI - Wert von 0 wird vom CC2420 als 40 ausgegeben (-60 vom CC2420 
entspricht dann quasi -100 beim RSSI). Dadurch entstehen 
grundverschiedene Werte...

von Michael (Gast)


Lesenswert?

Hallo,

kann es sein, dass die FCF-Bytes vertauscht worden sind, bei mir 
funktioniert die Adresserkennung auch noch nicht, aber bei einem Empfang 
eines Acknoledge kommt bei mir 0x02, 0x00 an. Die 0x02 würde ich 
behaupten steht für den Frame-Type "Acknoledge". Oder hat bisher jemand 
dass mit der automatischen Adresserkennung hinbekommen?

Gruß Michi.

von Tobi O. (der_ossi)


Lesenswert?

Also die Adressbytes kommen genau so, wie es im Standard vorgegeben 
wird.

Die FCF-Bytes sind auch nicht vertauscht. In welcher Byteorder 
verarbeitest du?

von Michael (Gast)


Lesenswert?

Bei Empfang eines Acks kommt bei mir an:

0x05, 0x02, 0x00, seq_nr, rssi, crc_corr

Nach meiner theoretischen Betrachtung sollte

0x05, 0x00, 0x02, seq_nr, rssi, crc_corr

ankommen, da ich zuerst Source Addressing mode und zum Schluss den 
Frame-type erwarte.

Also ich sende zuerst eine 0x88 für Shortadr und dann eine 0x01 für 
dataframe. Ist dies die richtige Reihenfolge?

Gruß Michi.

von Christian R. (supachris)


Lesenswert?

Benutzt du nicht die von TI gelieferten Funktionen und Header? Damit 
klappts bei uns hier bestens, muss man sich keine Gedanke um die Daten 
machen, die werden ordentlich in die Strukturen einsortiert....

von Michael (Gast)


Lesenswert?

hallo,

ich beschäftige mich auch gerade mit dem RSSI_Wert...dabei hab ich ein 
Problem, dass sich der Rssi-Wert im Frame(nicht im Register) bei 
Erhöhung der Signalstärke kaum (fast garnicht) ändert. Normalerweise 
müsste der RSSI_Wert bei Steigerung der Signalstärke doch wieder höher 
werden...oder verstehe ich da etwas falsch...?!?!?

Gruß Michi.

von Tobi O. (der_ossi)


Lesenswert?

Das ist nicht ganz so einfach, wie du dir das vorstellst. Leider ist der 
RSSI-Wert etwas sehr ... Naja sagen wir Willkürlich ;)

Der Wert hängt von allen möglichen Faktoren ab, die gerade bei einem so 
Leistungsschwachen Netzwerk (1mW) eine sehr große Rolle spielen. Wenn du 
nur deinen Finger auf die Antenne hältst, kann es schon passieren, dass 
die Verbindung komplett zusammenbricht, obwohl der Empfänger direkt 
daneben liegt.

Der RSSI Wert ist hier also nicht wirklich zu gebrauchen. Im optimalen 
Raum fällt er logarithmisch im Zusammenhang mit Leistung und der Distanz 
ab. Das heißt, dass er bei dem CC2420 auf die ersten 10cm um ca. 60% 
abfällt. Auf 10 meter hast du dann kaum noch eine Signalstärke. Soweit 
zur Theorie.... In der Praxis hab ich das alles schon anders erlebt. 
Selbst auf 24m durch ein Großraumbüro hindurch konnte ich eine 
Kommunikation aufrecht erhalten (wenn auch mit Paketverlusten >25%)... 
Manchmal hat das aber auch nicht geklappt... also sehr unvorhersehbar 
das ganze ;)

von Michael (Gast)


Lesenswert?

hmmm, ok

das hab ich mir schon gedacht...bzw. befürchtet. Welches Modul hast du 
verwendet? ich benutzte das Easybee-Modul von Flexipanel. Die Reichweite 
ging schonmal bis 20m Großraumbüro und zur Zeit mit max. Signalstärke 
bis gerade mal 10m...

Gruß Michi.

von Christian R. (supachris)


Lesenswert?

Der RSSI Wert an sich ist relativ ungenau, das bringt nicht viel. Im 
Zusammenhang mit dem LQI Wert und dem Offset aus dem Datenblatt kann man 
grob abschätzen, wie gut die Verbindung ist.

von Tobi O. (der_ossi)


Lesenswert?

Aber nur sehr grob ;)

Modul: Firmenproduktion... Bin da aber auch nich mehr dabei ;) arbeite 
seit 4 Monaten nich mehr mit CC2420 oder IEEE 802.15.4 ;)

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.