Hallo, ich habe da mal ein eine Frage bezuglich der SPI-Commands, mir ist der unterschied/nutzen dieser drei Commands nicht ganz klar, vielleicht könnt ihr licht in die Sache bringen? CMD: W_TX_PAYLOAD_NO ACK bedeutet doch: Schreibe zu sendene Daten in Tx-Sendespeicher (FIFO), OHNE eine ACK (Empfangsbestätigung)anforderung vom Empfänger. CMD: W_TX_PAYLOAD bedeutet doch: Schreibe zu sendene Daten in Tx-Sendespeicher (FIFO) und hänge eine ACK (Empfangsbestätigung)anforderung vom Empfänger an. CMD: W_ACK_PAYLOAD bedeutet doch: Schreibe zu sendene Daten für eine ACK-Antwort, die versendet wird wenn ein Datenpacket mit ACK-Bestätigung empfangen wird, zusätzlich kann die Sende-PIPE mit ausgewählt werden. Habe ich die Sache soweit richtig verstanden? Denn dauerbesuchern hier ist sicher aufgefallen das ich diesen Post schon bei den Funkern gepostet habe, da aber die letzten Fragen auch schon nicht mehr beantwortet worden sind und der Post auch schon ziemlich lang ist habe ich mich entschieden hier noch einmal zu fragen, also bitte nicht böse sein :) gruß Matthias
Der Befehl W_ACK_PAYLOAD ist dafür da, eine ACK-Nachricht zu verschicken. Das brauchst Du, wenn Du Auto-ACK deaktiviert hast und selbst entscheidest, ob Du ein Paket bestätigen willst oder nicht. Die Pipe, die Du angibst, ist nicht die Sende-Pipe (davon gibt es ja nur eine), sondern die Pipe, auf der das Paket reinkam, dessen Empfang Du bestätigen willst. Zusätzlich zum ACK (also der Information "Ich habe das Paket erhalten, du brauchst es nicht nochmal probieren") kannst Du halt auch gleich noch andere Daten mitsenden.
xfr schrieb: > Der Befehl W_ACK_PAYLOAD ist dafür da, eine ACK-Nachricht zu > verschicken. Das brauchst Du, wenn Du Auto-ACK deaktiviert hast und > selbst entscheidest, ob Du ein Paket bestätigen willst oder nicht. Habe gerade nochmal ins Datenblatt reingeschaut. Bin mir jetzt doch nicht so sicher, ob das stimmt. In der Beschreibung des Befehls steht ja "Maximum three ACK packet payloads can be pending". Das würde eher für Deine Erklärung sprechen, dass man damit nur die Payload eines ACK-Pakets setzen kann (sofern es eine haben soll), aber nicht das eigentliche Senden des ACK-Pakets anstößt. Hab den Befehl bisher noch nicht genutzt, daher sorry, falls ich Blödsinn erzählt habe. Werde es bei Gelegenheit mal ausprobieren.
Ich habe es gerade ausprobiert. Es schon so, wie ich es zuerst gesagt habe: Mit W_ACK_PAYLOAD sendet man selber ein ACK-Paket, das auch noch Payload enthält. Wenn man beim Empfänger Auto-ACK deaktiviert und beim Sender aktiviert, kann der Empfänger manuell entscheiden, ob er ein empfangenes Paket bestätigen möchte oder nicht. Das ACK-Paket muss allerdings mindestens ein Byte Payload enthalten, ein leeres Paket senden geht anscheinend nicht. Das ACK-Paket mit Payload wird wie ein normales Paket empfangen, man kann es allerdings nicht nochmal ACKen. Es entsteht also keine Endlosschleife, wenn man jedes empfangene Paket manuell bestätigt.
Super danke erstmal für die erklärung, bin gerade dabei es zu versuchen ein eigenes ACK sendenzulassen, aber irgendwas haut noch nicht hin gruß Matthias
Hallo xfr, kannst du mir noch mal ein wenig helfen zum Thema W_ACK_PAYLOAD? Ich bekomme einfach kein eigenes ACK am Sender :( wie muss der Empfänger richtig eingestellt werden? muss EN_AA=0 auto ACK aus? Über W_ACK_Payload ein ACK packet schreiben, vor empfang von sender oder nach empfang des senders? wie muss der Sender richtig eingestellt werden? muss EN_AA=0 auto ACK aus? oder kann hier die ACK automatik eingeschaltet bleiben? Senden über W_TX_PAYLOAD (also mit ACK anforderung), oder? wäre dir dankbar wenn du meine versuchsketten etwas abkürzen könntest. gruß Matthias
Bei mir hat es so funktioniert: - Die FEATURE-Befehle mit ACTIVATE aktivieren. - Im FEATURE-Register EN_DPL, EN_ACK_PAY und EN_DYN_ACK setzen (bei Sender und Empfänger). - Beim Sender EN_AA auf Pipe 0 einschalten. - Beim Empfänger EN_AA auf der Empfangspipe ausschalten. - Beim Sender mit W_TX_PAYLOAD senden. - Beim Empfänger warten, bis ein Paket eintrifft (RX FIFO not empty). - Paket lesen. - Mit W_ACK_PAYLOAD das ACK-Paket (mind. 1 Byte Payload) senden. Dabei die Pipe angeben, auf der Paket reinkam (RX_P_NO im STATUS-Register).
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.