こんにちは、私はarduino-dueボードでxbeeドライバーをテストしています。
xbeeの現在のドライバーはボードで動作しません。ドライバーは、xbee.cの126行目で実行を停止します。
while (dev->resp_limit != dev->resp_count) {
mutex_lock(&(dev->resp_lock));
}
同じ構成とボードがriotリリース2015.09で機能します。
問題はuartドライバーにあるかもしれませんが、xbeeドライバーにはタイムアウトが必要だと思います。 現在、暴動はロックされており、問題を検出するための情報はログに記録されないためです。
PR#4734を作成しました。
コミットに続いて、デバッグ出力を追加します。
https://github.com/Yonezawa-T2/RIOT/commit/0b437f440d114a28bbc63c3c6a7ff9dc4ded4bfd
https://github.com/Yonezawa-T2/RIOT/commit/c16cd9281821aaec8c9dd8260a3a98db659e8ef5
ENABLE_DEBUG
とXBEE_ENABLE_DETAILED_DEBUG
を1に設定します。
他に問題がある場合は、#4445 に興味があるかもしれません。
arduino-dueでドライバーを試しましたが、それでも失敗しますが、uartの問題だと思います。
しかし、xbeeドライバーは完全には機能しません。
_api_at_cmdが失敗しても、xbee_initは失敗しません。たとえば、_get_addr_longが0未満の値を返す場合、xbee_initは次のように失敗する必要があります。
if(_get_addr_long(dev, dev->addr_long.uint8, 8) < 0) {
DEBUG("xbee: Initialization failed\n");
return -1;
}
最後に、デバッグ情報"xbee: response timeout"
をisr_resp_timeoutに記録するのではなく、_api_at_cmdに移動します。これは、最初のケースでは別のスレッドで実行され、常にデバッグを出力できるとは限らないためです。
PR#4749を作成しました。
新しいドライバーをテストしましたが、期待どおりに動作します。
送信関数で、xbeeドライバーに他のいくつかの問題があることに気づきました:
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; }
- 最初の場合: tx_buf[4] が上書きされ、宛先の短いアドレスがインデックス 5 と 6 にある
- 第二に、それが
else if (hdr->dst_l2addr_len == 2)
なるとしたら
最後の質問:宛先の長いアドレスはどのように取得されますか? 私のxbeeでは一致しないからです。
@ l3nko
送信関数で、xbeeドライバーに他のいくつかの問題があることに気づきました:
はい。 #4445を参照してください。最後の質問:宛先の長いアドレスはどのように取得されますか? 私のxbeeでは一致しないからです。
私はあなたの質問を正しく理解しているかどうかわかりません。 XBeeは、ショートアドレスが0xFFFF
設定されていない限り、ソースアドレスとしてショートアドレスを使用します。 これも#4445で修正されました。
#4445 がマージされたため、この問題はクローズできます。
最も参考になるコメント
#4445 がマージされたため、この問題はクローズできます。