Riot: ๋“œ๋ผ์ด๋ฒ„ xbee ๋ฐ uart

์— ๋งŒ๋“  2016๋…„ 02์›” 02์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: RIOT-OS/RIOT

์•ˆ๋…•ํ•˜์„ธ์š”, arduino-due ๋ณด๋“œ๋กœ xbee ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
xbee์˜ ํ˜„์žฌ ๋“œ๋ผ์ด๋ฒ„๋Š” ๋ณด๋“œ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„ ์ค‘์ง€๋Š” xbee.c์˜ 126 ํ–‰์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
while (dev->resp_limit != dev->resp_count) { mutex_lock(&(dev->resp_lock)); }

๋™์ผํ•œ ๊ตฌ์„ฑ ๋ฐ ๋ณด๋“œ๊ฐ€ riot ๋ฆด๋ฆฌ์Šค 2015.09์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” uart ๋“œ๋ผ์ด๋ฒ„์—์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ xbee ๋“œ๋ผ์ด๋ฒ„์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ํญ๋™์ด ์ž  ๊ฒผ๊ณ  ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ์œ„ํ•œ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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 ๋“œ๋ผ์ด๋ฒ„๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
_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 ๋“œ๋ผ์ด๋ฒ„์˜ send ํ•จ์ˆ˜์—์„œ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

    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์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฟก๋ฟก

xbee ๋“œ๋ผ์ด๋ฒ„์˜ send ํ•จ์ˆ˜์—์„œ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ. # 4445๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋งˆ์ง€๋ง‰ ์งˆ๋ฌธ : ๋ชฉ์ ์ง€ ๊ธด ์ฃผ์†Œ๋Š” ์–ด๋–ป๊ฒŒ ์–ป์Šต๋‹ˆ๊นŒ? ๋‚ด xbee์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์งˆ๋ฌธ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. XBee๋Š” ์งง์€ ์ฃผ์†Œ๊ฐ€ 0xFFFF ๊ตฌ์„ฑ๋˜์ง€ ์•Š๋Š” ํ•œ ์งง์€ ์ฃผ์†Œ๋ฅผ ์†Œ์Šค ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ # 4445์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” # 4445๊ฐ€ ๋ณ‘ํ•ฉ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ข…๊ฒฐ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰