ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Tock OS 在 Wio WM1110 开发板上的部署指南:基于 nRF52840 与 Semtech LR1110 的多模无线定位板

Tock OS 在 Wio WM1110 开发板上的部署指南:基于 nRF52840 与 Semtech LR1110 的多模无线定位板 操作系统嵌入式嵌入式OS【免费下载链接】tockA secure embedded operating system for microcontrollers项目地址https://gitcode.com/gh_mirrors/to/tock点击查看免费下载本文以 Tock 仓库中 boards/wm1110dev/README.md 为核心系统讲解 Wio WM1110 开发板的硬件构成、Tock 内核移植要点以及如何借助 Tock Bootloader 与 nRF52840dk 完成烧录和日常编程。读完本文你将掌握 WM1110 的完整刷机链路跳线连接 → 烧录 Bootloader → tockloader 刷内核与 App并理解该板在内核源码中的引脚分配、内存布局与驱动注册方式。一、Wio WM1110 开发板是什么Wio WM1110 Development Board 是 Seeed Studio 推出的一款多模无线定位开发板定位是LoRa 与位置服务location services应用。它基于 Nordic nRF52840 SoC并集成了 Semtech LR1110 射频前端芯片属于 Tock 官方支持的板级平台之一对应内核入口为 boards/wm1110dev/src/main.rs。从硬件构成上看这块板集成了三类关键器件器件类型用途LIS3DHTR3 轴加速度计运动检测、姿态感知SHT41温湿度传感器环境温湿度采集Semtech LR1110多模射频前端LoRaWAN、GNSSGPS 定位、WiFi AP 扫描其中 LR1110 是这块板的核心卖点它通过一颗芯片同时支持 LoRaWAN 长距离通信、GNSS 卫星定位与 WiFi AP 扫描辅助定位配合 nRF52840 的 Cortex-M4F 主控与丰富外设天然适合做资产追踪、环境监测等低功耗物联网场景。1.1 源码中的板级资源确认在 boards/wm1110dev/src/main.rs 中可以看到 Tock 为这块板注册的完整驱动集合。Platform结构体main.rs#L118-L132与SyscallDriverLookup实现main.rs#L134-L156把以下能力暴露给用户态进程console串口控制台capsules_core::console::DRIVER_NUMgpio通用 IO引脚 D2~D7alarm定时器/闹钟led三色 LED 中的绿、红两路rng真随机数基于 nRF52840 TRNGnonvolatile_storage非易失存储驱动temperature / humidity基于 SHT41 的温湿度驱动LoRa SPI 驱动LoRaPhySPI与LoRa GPIO 驱动LoRaPhyGPIO分别对应 capsules/core/src/driver.rs#L44-L45 中定义的系统调用号0x30003与0x30004IPC进程间通信这些驱动号与 doc/syscalls 目录下的系统调用文档一一对应读者可以结合 doc/syscalls/README.md 查看每个驱动的用户态接口。二、准备工作环境与前置条件2.1 安装 Tock 工具链在开始任何烧录工作之前请先按照 Tock 官方的 Getting Started 指南 完成环境搭建。核心依赖包括Rustnightly 版本仓库的 rust-toolchain.toml 会固定具体日期版本构建系统会自动校验并安装对应 nightlyrustup版本 ≥ 1.23.0用于管理多个 Rust 工具链宿主机工具链gcc、glibcmake、find 等命令行工具。快速安装以 Ubuntu 为例$ sudo apt install -y build-essential python3-pip curl $ curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh $ pipx install tockloader $ pipx ensurepath其中tockloader是 Tock 生态的烧录与 App 管理工具稍后刷内核、装应用都靠它。2.2 两种烧录路径的取舍WM1110 开发板在设计上默认使用外部 JLink 编程器进行烧录。Tock 团队希望摆脱这个依赖因此选择使用Tock Bootloader它允许通过 UART 串口直接烧录内核与应用日常开发不再需要 JLink。不过有两点需要明确Bootloader 本身仍需借助 JLink 编程器烧录一次一次性操作之后的内核、应用烧录全部走 Bootloader tockloader无需再碰 JLink。最简单的 JLink 来源就是一块现成的nRF52840dk开发板——它板载 J-Link OB 调试器可以直接充当外部编程器。三、把 nRF52840dk 连接到 WM1110-dev3.1 跳线连接图在烧录 Bootloader 之前先用杜邦线跳线把 nRF52840dk 与 WM1110-dev 连起来。官方连接示意图如下图中展示了四组点对点跳线连接把 nRF52840dk 板载的 J-Link 调试排针信号引到 WM1110-dev 上。3.2 引脚映射表对应 README 中的官方引脚映射如下nRF52840dkWM1110-devGNDGNDSWD SEL3V3SWD CLKCLKSWD IODIO连接完成后的正确姿势是nRF52840dk 与 WM1110-dev 两块板各自通过一条 USB 线连接到电脑共两条 USB 线。只有一条 USB 线怎么办官方给出的替代方案把唯一的 USB 线插在 nRF52840dk 上然后额外跳两根线3V3 (wm1110dev) - VDD (nrf)SWD SEL (nrf) - VDD (nrf)其余跳线保持不变。这样由 nRF52840dk 的 USB 同时为两块板供电并通过 VDD 回灌点亮 WM1110 的调试链路。3.3 底层原理SWD 调试链路理解这几根线的作用能帮你排查连接问题SWD SEL / 3V3SWD SEL 是 SWD 调试使能信号拉高到 3.3V 后 WM1110 的 SWD 调试接口才会被激活J-Link 才能访问目标芯片SWD CLK / CLKSWD 时钟线由 J-Link 驱动SWD IO / DIOSWD 双向数据线承载调试协议的数据收发GND / GND共地所有信号都必须以它为参考。nRF52840dk 板载的 J-Link OB 正是通过这四根线以标准 SWD 协议与 WM1110 的 nRF52840 芯片通信。四、一次性烧录 Tock Bootloader4.1 执行烧录命令跳线接好、两块板都通电之后进入 WM1110 的板级目录执行$ cd boards/wm1110dev $ make flash-bootloader这条命令会调用JLinkExe借助 nRF52840dk 板载的 JTag 硬件把 Bootloader 写入 WM1110。整个操作对 JLinkExe 的依赖体现在 Makefile 的flash-bootloader目标中boards/wm1110dev/Makefile#L22-L26.PHONY: flash-bootloader flash-bootloader: curl -L --output /tmp/wm1110_dev-bootloader_v1.1.3.bin https://github.com/tock/tock-bootloader/releases/download/v1.1.3/wm1110_dev-bootloader_v1.1.3.bin tockloader flash --address 0 /tmp/wm1110_dev-bootloader_v1.1.3.bin rm /tmp/wm1110_dev-bootloader_v1.1.3.bin从源码可以拆解出这条目标实际做了三件事用curl从 Tock Bootloader 的 release 页面下载 WM1110 专用的 Bootloader 镜像版本 v1.1.3临时存放在/tmp/wm1110_dev-bootloader_v1.1.3.bin用tockloader flash --address 0把它烧录到芯片地址 0即 Flash 起始位置烧录完成后删除临时文件。需要强调的是此时 nRF52840dk 必须已连接且其 J-Link 可被 JLinkExe 识别。若JLinkExe尚未安装请参考 doc/Getting_Started.md 中的 Programming Adapter 一节安装 J-Link Software and Documentation Pack版本 ≥ 5.0。4.2 为什么 Bootloader 要放在地址 0查看 WM1110 的链接脚本 boards/wm1110dev/layout.ld 可以更清楚地理解这个设计MEMORY { rom (rx) : ORIGIN 0x00010000, LENGTH 256K prog (rx) : ORIGIN 0x00050000, LENGTH 704K-16K ram (rwx) : ORIGIN 0x20000000, LENGTH 256K }rom 段从0x1000064KB 偏移开始——这正是给 Tock Bootloader 预留的 64KB 空间Bootloader 常驻0x00000 ~ 0x0FFFFTock 内核rom 段起始于0x10000长度 256KB应用区prog 段起始于0x50000长度 704K−16K末尾保留 16KB 给非易失存储。与之呼应WM1110 的program目标把内核烧录到--address 0x10000boards/wm1110dev/Makefile#L18-L20.PHONY: program program: $(TOCK_ROOT_DIRECTORY)target/$(TARGET)/release/$(PLATFORM).bin tockloader flash --address 0x10000 $也就是说Flash 的布局为Bootloader0x0→ 内核0x10000→ 应用0x50000 起。这也是flash-bootloader必须烧在--address 0的原因。4.3 用户态非易失存储nrf52840 芯片的 main.rs#L489-L501 中NonvolatileStorageComponent把 Flash 末尾区域开放给用户态进程使用起始地址0xFC000、长度 16 个页每页 4KB共 64KB内核自身不占用这部分No kernel access。这与 layout.ld 中 prog 段704K-16K的预留完全一致App 可以在系统调用层访问这块区域做持久化存储。五、Bootloader 的激活与日常使用5.1 如何进入 Bootloader 模式Bootloader 烧录完成后日常烧录不再需要 JLink。它的激活方式是硬件操作快速连续按下两次复位Reset按钮Bootloader 即被激活激活后绿色 LED 常亮作为指示。一旦绿灯常亮说明设备已进入 Bootloader 模式等待主机通过 UART 接收固件。这个绿灯正是 main.rs#L32-L33 中定义的LED_GREEN_PINP0_13它和红色 LEDP0_14共同组成三色 LED 中由 Tock 内核驱动的两路// Three-color LED. const LED_RED_PIN: Pin Pin::P0_14; const LED_GREEN_PIN: Pin Pin::P0_13;另外板上的复位按键对应BUTTON_RST_PINP0_18由NrfStartupComponent接管main.rs#L240-L246。在 boards/wm1110dev/src/main.rs 中这两个 LED 以LedHigh方式注册进LedsComponent用户态可通过 LED 驱动系统调用点灭它们同时它们也被注册为内核调试 GPIOdebug_gpio!宏可用。5.2 Bootloader 就位后tockloader 即可正常工作进入 Bootloader 模式后tockloader 会像在其他支持 Bootloader 的 Tock 板卡上一样正常工作。这意味着你可以编译并烧录内核在 boards/wm1110dev 目录下执行make install等价于make programtockloader 会把编译产物target/thumbv7em-none-eabihf/release/wm1110dev.bin通过 UART 烧到0x10000安装示例应用例如tockloader install blink应用会被烧入应用区并自动启动管理应用tockloader list查看已装应用、tockloader erase-apps清空应用区、tockloader uninstall卸载指定应用等。编译内核的通用目标与其他板卡一致boards/Makefile.common 与 doc/Getting_Started.md 均有说明目标作用make默认 all编译 release 版内核make debug编译带调试信息的版本make doc生成该板的 Rust 文档make clean清理构建产物make install通过 tockloader 烧录内核到板子make flash-bootloader一次性烧录 Tock Bootloader需 JLink若在make install时指定串口可通过make install PORT/dev/ttyUSB0传入Makefile 中PORT变量会转成tockloader --port port参数。六、WM1110 板级源码导读可选深入如果读者想进一步理解这块板在 Tock 中的实现以下几个文件值得精读boards/wm1110dev/src/main.rs板级入口。定义了全部引脚常量main.rs#L32-L62UARTTXP0_24、RXP0_22UART_TX_PIN/UART_RX_PIN用于 console 与调试输出波特率 115200I2CSDAP0_27、SCLP0_26挂载 SHT41另有I2C_PWRP0_07作为 I2C 总线与传感器的电源开关启动时由内核拉高供电main.rs#L361-L363SPISCKP1_13、MOSIP1_14、MISOP1_15、CSP1_12连接 LR1110LR1110 控制脚BUSYP1_11、RESETP1_10、DIO9P1_08通过LoRaPhyGPIO0x30004暴露给用户态GPIO D2~D7 分别映射 P0_17/P0_16/P0_15/P1_09/P1_04/P1_03。boards/wm1110dev/src/io.rspanic 处理。内核崩溃时点亮红色 LEDP0_14并通过 UART115200、8N1打印调试信息boards/wm1110dev/Makefile烧录相关全部目标boards/wm1110dev/layout.ld内存布局Bootloader/内核/应用/存储分区一目了然boards/wm1110dev/Cargo.toml板级 crate 依赖主要引入cortexm4、kernel、nrf52、nrf52840、components、capsules-core/capsules-extra/capsules-system等。七、小结完整上手指南把整个流程串起来WM1110 从零到跑起 Tock 的完整路径是装环境Rust nightly rustup tockloader参考 doc/Getting_Started.md接线按引脚映射表把 nRF52840dk 与 WM1110-dev 用跳线连好两块板各接一条 USB烧 Bootloader一次性在boards/wm1110dev下执行make flash-bootloader借助 nRF52840dk 的 J-Link 完成进入 Bootloader 模式快速双击复位键绿灯常亮即成功日常烧录make install烧内核tockloader install blink装应用从此无需 JLink。这套 JLink 只用来烧一次 Bootloader之后全走 UART 的方案是 WM1110 这类无板载调试器板卡的典型 Tock 部署模式也让该板成为 LoRaWAN/GNSS 场景下体验 Tock 的安全嵌入式开发流程的低门槛选择。赞分享操作系统嵌入式嵌入式OS【免费下载链接】tockA secure embedded operating system for microcontrollers项目地址https://gitcode.com/gh_mirrors/to/tock点击查看免费下载相关推荐在 Zephyr 上开发 Wio-WM1110 Dev Kit基于 nRF52840 与 Semtech LR1110 的 LoRa/GNSS 开发板实战指南在 Zephyr 上开发 Wio WM1110 Dev Kit基于 nRF52840 与 Semtech LR1110 的 LoRa/GNSS 开发板实战指南操作系统嵌入式RTOS物联网ESP IoT Solution BLE TX Power Serviceesp_tps组件使用指南从服务注册到发射功率上报的完整实践ESP IoT Solution BLE TX Power Serviceesp_tps组件使用指南从服务注册到发射功率上报的完整实践 本文面向在 ESP操作系统嵌入式嵌入式OS使用 Terraform AWS Provider 的 aws_outposts_sites 数据源批量发现 Outposts Site使用 Terraform AWS Provider 的 aws_outposts_sites 数据源批量发现 Outposts Site aws_outpost操作系统嵌入式嵌入式OS上一篇构建多平台直播抓取与视频处理架构48tools技术实现深度解析下一篇48tools多平台直播抓取架构从口袋48到抖音的技术实现深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表