Riot: драйвер xbee и uart

Созданный на 2 февр. 2016  ·  7Комментарии  ·  Источник: RIOT-OS/RIOT

Привет, я тестирую драйвер xbee с платой arduino-due.
Текущий драйвер для xbee не работает с платой, драйвер перестает работать в строке 126 xbee.c:
while (dev->resp_limit != dev->resp_count) { mutex_lock(&(dev->resp_lock)); }

Такая же конфигурация и плата работают с Riot выпуска 2015.09.

Возможно, проблема в драйвере uart, но я думаю, что у драйвера xbee должен быть тайм-аут. Потому что теперь RIOT заблокирован и не регистрирует никакой информации для обнаружения проблемы.

drivers network ARM question

Самый полезный комментарий

Этот вопрос можно закрыть, так как # 4445 был объединен.

Все 7 Комментарий

Создан 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 работает не идеально:
xbee_init не дает сбой, если _api_at_cmd не работает, например, если _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;
    }
  1. в первую очередь, если: tx_buf [4] перезаписывается, короткий адрес назначения находится в индексах 5 и 6
  2. во-вторых, если, может быть, это будет else if (hdr->dst_l2addr_len == 2)

Последний вопрос: как получить длинный адрес назначения? потому что с моим xbee не совпадает.

@ l3nko

Я заметил некоторые другие проблемы с драйвером xbee в функции отправки:
Да. См. №4445.

Последний вопрос: как получить длинный адрес назначения? потому что с моим xbee не совпадает.

Не уверен, что правильно понял ваш вопрос. XBee использует короткий адрес в качестве исходного адреса, если его короткий адрес не настроен на 0xFFFF . Это также исправлено в # 4445.

Этот вопрос можно закрыть, так как # 4445 был объединен.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги