Riot: Treiber xbee und uart

Erstellt am 2. Feb. 2016  ·  7Kommentare  ·  Quelle: RIOT-OS/RIOT

Hallo, ich teste den xbee-Treiber mit einem Arduino-Due-Board.
Der aktuelle Treiber für xbee funktioniert nicht mit dem Board, der Treiber stoppt in Zeile 126 von xbee.c:
while (dev->resp_limit != dev->resp_count) { mutex_lock(&(dev->resp_lock)); }

Die gleiche Konfiguration und das gleiche Board funktionieren mit Riot Release 2015.09.

Vielleicht liegt das Problem im uart-Treiber, aber ich denke, der xbee-Treiber muss eine Zeitüberschreitung haben. Denn jetzt ist Riot gesperrt und es werden keine Informationen protokolliert, um das Problem zu erkennen.

drivers network ARM question

Hilfreichster Kommentar

Dieses Problem kann geschlossen werden, da #4445 zusammengeführt wurde.

Alle 7 Kommentare

Erstellt PR #4734.

Folgende Commits fügen zusätzliche Debug-Ausgaben hinzu.

https://github.com/Yonezawa-T2/RIOT/commit/0b437f440d114a28bbc63c3c6a7ff9dc4ded4bfd
https://github.com/Yonezawa-T2/RIOT/commit/c16cd9281821aaec8c9dd8260a3a98db659e8ef5

Setzen Sie ENABLE_DEBUG und XBEE_ENABLE_DETAILED_DEBUG auf 1.

Sie könnten auch an #4445 interessiert sein, wenn Sie andere Probleme haben.

Ich habe den Treiber mit dem arduino-due ausprobiert und es schlägt immer noch fehl, aber ich denke, es ist ein Problem von uart.
Aber der xbee-Treiber funktioniert nicht perfekt:
xbee_init schlägt nicht fehl, wenn _api_at_cmd fehlschlägt, zum Beispiel wenn _get_addr_long einen Wert <0 zurückgibt xbee_init muss fehlschlagen, etwa wie:

if(_get_addr_long(dev, dev->addr_long.uint8, 8) < 0) {
        DEBUG("xbee: Initialization failed\n");
        return -1;
}

Loggen Sie die Debug-Info "xbee: response timeout" in isr_resp_timeout ein, sondern verschieben Sie sie in _api_at_cmd, da sie im ersten Fall in einem anderen Thread ausgeführt wird und den Debug nicht immer ausgeben kann.

Erstellt PR #4749.

Gut, ich habe den neuen Treiber getestet und er funktioniert wie gewünscht.
Ich habe einige andere Probleme mit dem xbee-Treiber in der Sendefunktion bemerkt:

    dev->tx_buf[0] = API_START_DELIMITER;
    dev->tx_buf[4] = 0;         /* set to zero to disable response frame */
    /* set size, API id and address field depending on dst address length  */
    if (_is_broadcast(hdr)) {
        dev->tx_buf[1] = (uint8_t)((size + 5) >> 8);
        dev->tx_buf[2] = (uint8_t)(size + 5);
        dev->tx_buf[3] = API_ID_TX_SHORT_ADDR;
        dev->tx_buf[4] = 0xff;
        dev->tx_buf[5] = 0xff;
    }
    if (hdr->dst_l2addr_len == 2) {
        dev->tx_buf[1] = (uint8_t)((size + 5) >> 8);
        dev->tx_buf[2] = (uint8_t)(size + 5);
        dev->tx_buf[3] = API_ID_TX_SHORT_ADDR;
        memcpy(dev->tx_buf + 5, gnrc_netif_hdr_get_dst_addr(hdr), 2);
        pos = 7;
    }
    else {
        dev->tx_buf[1] = (uint8_t)((size + 11) >> 8);
        dev->tx_buf[2] = (uint8_t)(size + 11);
        dev->tx_buf[3] = API_ID_TX_LONG_ADDR;
        memcpy(dev->tx_buf + 5, gnrc_netif_hdr_get_dst_addr(hdr), 8);
        pos = 13;
    }
  1. in first if: tx_buf[4] ist überschreiben, Zielkurzadresse ist bei Index 5 und 6
  2. zweitens, wenn es vielleicht else if (hdr->dst_l2addr_len == 2)

Letzte Frage: Ziel lange Adresse wie wird erhalten? denn mit meinem xbee passt es nicht zusammen.

@l3nko

Ich habe einige andere Probleme mit dem xbee-Treiber in der Sendefunktion bemerkt:
Ja. Siehe #4445.

Letzte Frage: Ziel lange Adresse wie wird erhalten? denn mit meinem xbee passt es nicht zusammen.

Ich bin mir nicht sicher, ob ich deine Frage richtig verstehe. XBee verwendet die Kurzadresse als Quelladresse, es sei denn, die Kurzadresse ist auf 0xFFFF konfiguriert. Dies wurde auch in #4445 behoben.

Dieses Problem kann geschlossen werden, da #4445 zusammengeführt wurde.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen