Как распознаются и регистрируются лидеры / маршрутизаторы?
OT-cli работает и работает на 2 разных радиочастотных платформах (CC2358 и Atmel AT86RTxx управляются через SPI с хоста Arm7TDMI). Никаких проблем с компиляцией, связью или загрузкой. Все вроде нормально. Я могу сканировать и видеть все устройства в эфире.
Тем не менее, когда по какой-либо причине выдается команда "start", каждое из состояний устройства становится "лидером" - ни один из них не является Маршрутизатором. Каждый из них отправляет сообщения MLE, и я обнаружил, что когда устройство получает MLE, оно не заносит его в список маршрутизаторов. Это не удается mRouters[i].mState == Neighbor::kStateValid
тест на линию 2015 года mle_router.cpp
,
Обновленная информация о моей ситуации. Во-первых, кто-нибудь имел опыт мониторинга воздушного движения через Wireshark? Я заметил, что пакеты MLE UPD, рассмотренные wireshark, указывают, что контрольная сумма UPD неверна. Это условие существует как для Targets, TI, так и для Atmel. В любом случае это причина, по которой таблица маршрутизатора не заполняется / не обновляется. Проверка входящей контрольной суммы не выполнена.
Любые идеи кто-нибудь?
2 ответа
Я видел по крайней мере один компилятор (Visual Studio) обрабатывать mState
переменная как подпись, в результате чего проверка не пройдена. Внесение следующих изменений исправляет это:
State mState : 3;
в
unsigned int mState : 3;
С аналогичной проблемой я столкнулся на другой платформе, где было полезно переключение режима CCA (оценка чистых каналов) в конфигурации радиосвязи на 2 (определение несущей).
CCA имеет 3 режима:
1 - Обнаружение энергии
2 - Carrier Sense
3 - 1 и 2 вместе взятых