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
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)...
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
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)
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
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ß
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
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
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
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ß
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
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 :)
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...
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)
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
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
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)
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.
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...
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.
Also die Adressbytes kommen genau so, wie es im Standard vorgegeben wird. Die FCF-Bytes sind auch nicht vertauscht. In welcher Byteorder verarbeitest du?
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.
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....
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.
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 ;)
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.