找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

搜索附件  

cli03-nordic-semi-wireless-iot-kq0M-447w.jpeg.webp

 

探索 OpenThread Command Line Interface 代码(1):
OpenThread 的协议栈是用 C++ 编写的。本文通过分析 nRF connect SDK 中的例程代码 OpenThread Command Line Interface,来分享一些 C++ 的基础知识。目的在帮助大家更好的理解 OpenThread 的源代码。
OpenThread Architectures
下面是 OpenThread 网络的描述,它有几个关特性:IPv6,低功耗,IEEE 802.15.4,mesh network
  • Thread® is an IPv6-based networking protocol designed for low-power Internet of Things devices
  • IEEE 802.15.4-2006 wireless mesh network, commonly called a Wireless Personal Area Network (WPAN)
OpenThread网络中的设备类型分为以下几种。CLI 例程中默认的设备类型是 FTD。
  • Full Thread Device (FTD) Router 是一种 FTD 设备。 Leader 是一个特殊的 Router, 它是整个 Thread 网络的中心,同一个网络中只能有一个 Leader。
  • Minimal Thread Device (MTD)
  • Minimal End Device (MED)
    • Sleepy End Device (SED)
    • Synchronized Sleepy End Device (SSED)

OpenThread stack architecture
nRF connect SDK 中 OpenThread 的代码框架如下图。PHY 层是 Nordic 提供的 IEEE 802.15.4 的驱动。中间层是 google 提供的 OpenThread 的 MAC 层和 网络层。上层有 Zephyr 提供的 BSD socket 接口和各种应用层网络协议。
下面是 OpenThread 的数据发送的流程图。后面我们会在 UDP 数据通讯演示部分具体分析。
OpneThread CLI Example
我们分析的代码位于 nRF connect SDK 2.6.0 的目录 nrf\samples\openthread\cli 下。它支持的开发板如下:
Hardware
Platforms         PCA                 Board name                      Build target



nRF5340 DK    PCA10095        nrf5340dk_nrf5340      nrf5340dk_nrf5340_cpuapp_ns
                                                                                      nrf5340dk_nrf5340_cpuapp



nRF52840        PCA10059     nrf52840dongle_nrf52840   nrf52840dongle_nrf52840
Dongle



nRF52840 DK   PCA10056      nrf52840dk_nrf52840           nrf52840dk_nrf52840



nRF21540 DK   PCA10112       nrf21540dk_nrf52840           nrf21540dk_nrf52840



这里我们选用 nRF52840 DK。我们可以通过下面的命令编译
west build -p -b nrf52840dk_nrf52840
编译结束后我们可以看到整个代码占用的 flash 和 RAM 的大小,如下图:
[td]

Memory region             Used Size              Region Size                      %age Used




FLASH                              463928 B                          1MB                     44.24%




RAM                                 104360 B                         256KB                    39.81%




IDT_LIST                                  0 GB                         32KB                       0.00%



下面的命令用来烧写代码
west flash
烧写完成后,连接串口终端。然后输入下面的指令启动 OpenThread 网络:
uart:~$ *** Booting nRF Connect SDK v3.5.99-ncs1 ***> ot channel 11ot channel 11Doneuart:~s> ot panid0 xabcoot panid OxabcdDoneuart:~$>ot networkkey 00112233445566778899aabbccddeeffot networkkey 00112233445566778899aabbccddeeffDoneuart:~$> ot ifconfig upot ifconfig upDoneuart:        ~$> ot thread startot thread startDoneuart:         ~$
当启动网络后,可以使用下面的命令来查看网络状态和IP地址。我们可以看到这台设备的角色是 leader。任何一台 FTD 都可以成为 leader. 当一台设备使能了 thread 网络后,它会首先试图加入一个已有的 Thread 网络。当搜索了一段时间,发现没有可加入的网络后,FTD 设备会构建一个 Thread 网络,自己成为 leader。一个设备可以有多个IP地址。
uart: ~$ ot stateot stateleaderDoneuart:~$ > ot ipaddrot ipaddrfdde: ad00: beef: 0: 0: ff: fe00: fc00fdde: ad00: beef: 0: 0: ff: fe00: 8c00fdde: ad00: beef: 0 : 8b97 : a8be: 52b3 : a367fe80: 0: 0: 0: a0cc: 601b: ea6b: 4ba1Doneuart:~$
cli03-nordic-semi-wireless-iot-kq0M-447w.jpeg.webp
         同一主题附件:
    cli01-nordic-semi-wireless-iot-x49J-600w.jpeg.webp
    cli02-nordic-semi-wireless-iot-3sKR-586w.jpeg.webp
    cli03-nordic-semi-wireless-iot-kq0M-447w.jpeg.webp
    cli04-nordic-semi-wireless-iot-mEy1-561w.jpeg.webp
    cli05-nordic-semi-wireless-iot-k8G6-600w.jpeg.webp
    cli06-nordic-semi-wireless-iot-RMY_-535w.jpeg.webp
    cli07-nordic-semi-wireless-iot-0U25-600w.jpeg.webp

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2025-7-6 19:17 , Processed in 0.099720 second(s), 10 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

返回顶部