开发板:设备树配置、BLFlash 烧录与串口调试实战指南)
Zephyr 支持 DT-BL10BL602开发板设备树配置、BLFlash 烧录与串口调试实战指南【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr本篇指南基于 Zephyr 仓库中 DT-BL10 开发板的官方板级文档带你完整掌握dt_bl10_devkit这块基于博通微Bouffalo LabBL602 单芯片 Wi-Fi/BLE 共存 SoC 的 RISC-V 开发板如何在 Zephyr 中编译并运行hello_world示例、如何通过 D8/EN 按键配合west flashBLFlash runner完成固件烧录、如何用 minicom 以 115200-8N1 参数监听控制台输出并结合板级设备树、defconfig 与 CMake 配置深入理解其 192MHz 系统时钟、16MB 外部 QSPI Flash 分区与 UART0 引脚复用实现。板卡概述单芯片 Wi-Fi/BLE 共存方案DT-BL10 开发板搭载的 DT-BL10 模块是一个高集成度的单芯片低功耗 802.11n WLAN 网络控制器将 RISC CPU、WLAN MAC、支持 LT1R 的 WLAN 基带、RF 前端以及蓝牙功能整合在单一芯片内官方文档中写作 lT1R即 Long-Term-1R 单发单收基带同时提供一组可配置 GPIO可用作数字外设适配不同应用与控制用途。硬件上的核心事实来自板级文档与仓库配置SoC 为BL602compatible bflb,bl602具体型号为BL602C20Q2Ibl602c20q2i由 board.yml 中socs字段声明并在 Kconfig.dt_bl10_devkit 中通过select SOC_BL602C20Q2I选中对应 SoC模块内部集成了片上存储可完整承载 Wi-Fi 协议栈也便于做简单应用开发支持标准 IEEE 802.11 b/g/n/e/i 协议与完整 TCP/IP 协议栈既可作为 Wi-Fi 外设挂载也可作为独立的网络控制器使用该板由 Doctors of Intelligence Technologywww.doiting.com出品。从 dt_bl10_devkit.yaml 的板级硬件清单可以确认其关键规格identifier: dt_bl10_devkit name: DT-BL10 coexistence Module Development Kit type: mcu arch: riscv ram: 64 # 64KB 可用 RAM toolchain: - zephyr testing: ignore_tags: # twister 测试中忽略的标签 - net - bluetooth supported: # 声明支持的硬件功能 - gpio - pinctrl - uart - dma - flash vendor: doiting这里有两点值得注意supported列表明确声明该板支持 gpio、pinctrl、uart、dma、flash 五类功能是驱动可用性判断的依据testing.ignore_tags配置了net与bluetooth意味着 Zephyr 的自动化测试框架twister对该板跳过网络与蓝牙测试——这也提示读者虽然 BL602 硬件上具备 Wi-Fi/BLE 能力但当前 Zephyr 板上支持的驱动范围以 gpio/pinctrl/uart/dma/flash 为准Wi-Fi 相关能力在 Zephyr 主仓库中并非该板的测试验证范围。系统时钟与核心主频板级文档明确写道DT-BL10 开发板被配置为运行在最高速度192MHz。这一配置直接体现在 dt_bl10_devkit.dts 中cpu0 { clock-frequency DT_FREQ_M(192); };设备树中的clock-frequency属性是 Zephyr 时钟基础设施的基准输入sys_clock_hw_cycles_per_sec()等 API 返回值、以及CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC宏都以它为准。BL602 系列 SoC 的公共实现位于 soc/bflb/bl60x/ 目录含 soc.c、soc.h、bflb_rf.c 等而 BL602C20Q2I 这一具体型号的 Kconfig 定义在 soc/bflb/bl60x/Kconfig.soc第 18 行config SOC_BL602C20Q2I。设备树深度解析外部 Flash 与分区DT-BL10 的一个显著特点是程序与存储位于外部 QSPI NOR Flash上。dt_bl10_devkit.dts 的关键配置如下/ { model 2.4GHz Wi-Fi and BLE coexistence Module Development Kit; compatible bflb,bl602; chosen { zephyr,flash is25lp128; zephyr,flash-controller sf_bank1; zephyr,code-partition slot0_partition; zephyr,itcm itcm; zephyr,sram all_ram; zephyr,console uart0; zephyr,shell-uart uart0; zephyr,entropy sec_eng_trng; }; aliases { watchdog0 wdt0; }; };chosen节点完成了 Zephyr 对板级硬件的关键绑定zephyr,flash/zephyr,flash-controllerZephyr 映像烧写到外部 Flash 芯片is25lp128其控制器为 SoC 上的sf_bank1QSPI 控制器 Bank1zephyr,code-partition代码分区指向slot0_partition即image-0分区链接脚本据此定位映像加载地址zephyr,console/zephyr,shell-uart控制台与 shell 均使用 UART0zephyr,entropy熵源使用 SoC 安全引擎的真随机数生成器sec_eng_trng。IS25LP128 Flash 芯片与三级分区外部 Flash 节点声明了一块 16MB0x1000000字节的 IS25LP128sf_bank1 { reg 0x23000000 0x1000000; ranges 0x0 0x23000000 0x1000000; is25lp128: flash0 { compatible bflb,sf-flash, soc-nv-flash; reg 0 0x1000000; ranges; write-block-size 4; erase-block-size DT_SIZE_K(4); spi-bus-mode 2; sf-pad 1; jedec-id [96 60 18]; partitions { ranges; #address-cells 1; #size-cells 1; boot_header_partition: partition0 { compatible zephyr,mapped-partition; label boot_header; reg 0x00000000 0x2000; read-only; }; slot0_partition: partition2000 { compatible zephyr,mapped-partition; label image-0; reg 0x00002000 (0x00100000 - 0x2000); read-only; }; storage_partition: partition100000 { compatible zephyr,mapped-partition; label storage; reg 0x00100000 0xf00000; }; }; }; };各属性含义与分区布局整理如下属性取值含义reg控制器侧0x23000000QSPI 控制器 Bank1 的 SoC 地址映射reg设备侧0x1000000Flash 容量 16MBwrite-block-size4编程写入块最小 4 字节erase-block-size4K擦除块大小 4KBspi-bus-mode2使用 2 线 SPI 总线模式jedec-id[96 60 18]厂商 ID 0x96ISSI、器件 ID 0x6018即 IS25LP128Flash 内部划分为三个分区分区标签地址范围大小用途与约束boot_header0x00000000–0x00001FFF8KBBoot 头区标记read-onlyimage-0slot0_partition0x00002000–0x000FFFFF约 1MBZephyr 代码分区read-onlyzephyr,code-partition指向它storage0x00100000–0x00FFFFFF15MB通用存储分区可承载 Zephyr 设置settings等子系统数据这种代码分区只读 大容量 storage 分区的布局是 Zephyr 外部 Flash 平台的典型做法15MB 的 storage 分区为文件系统、settings 等非易失数据留出了充足空间。UART0 串口控制台、烧录共用通道板级文档说明dt_bl10_devkit使用UART0作为默认串口该串口连接到 USB 串口转换器同时承担固件烧录与控制台输出两个角色。设备树中 UART0 节点开启并设定了波特率与引脚复用uart0 { status okay; current-speed 115200; pinctrl-0 uart0_default; pinctrl-1 uart0_sleep; pinctrl-names default, sleep; };对应的引脚复用定义在 dt_bl10_devkit-pinctrl.dtsi引自 BL602 的 pinctrl 绑定头文件zephyr/dt-bindings/pinctrl/bl602x-pinctrl.hpinctrl { uart0_default: uart0_default { group1 { pinmux GPIO7_UART0_RX, GPIO16_UART0_TX; bias-pull-up; input-schmitt-enable; }; }; uart0_sleep: uart0_sleep { group1 { pinmux GPIO7_UART0_RX, GPIO16_UART0_TX; bias-high-impedance; }; }; };从源码结构看这里体现了 Zephyr pinctrl 的两种状态机设计default 状态RX 复用为 GPIO7、TX 复用为 GPIO16使能上拉偏置并开启施密特输入提高串口信号抗扰能力sleep 状态同一组引脚切换为高阻态bias-high-impedance降低休眠功耗。因此接线与调试时需要记住GPIO7 UART0_RX接收接 USB 转换器 TXDGPIO16 UART0_TX发送接 USB 转换器 RXD。默认 defconfig该板的默认内核配置在 dt_bl10_devkit_defconfig 中内容非常精简CONFIG_CONSOLEy CONFIG_SERIALy CONFIG_UART_CONSOLEy CONFIG_UART_INTERRUPT_DRIVENy即启用通用控制台框架、串口驱动、UART 控制台后端并使能 UART 中断驱动收发中断驱动模式是 UART 驱动被 flash 编程、DMA 等场景复用的前提。构建时可用-DCONFIG_Xy之类的 west 参数按需叠加。烧录 runnerBLFlashbflb_mcu_tool板级文档中的烧录步骤提到使用blflash runner其工程化配置位于 board.cmakeboard_runner_args(bflb_mcu_tool --chipname bl602) include(${ZEPHYR_BASE}/boards/common/bflb_mcu_tool.board.cmake) board_set_flasher(bflb_mcu_tool)三行代码分别完成为bflb_mcu_toolrunner 追加芯片参数--chipname bl602让烧录工具按 BL602 协议工作引入公共的 bflb_mcu_tool.board.cmake该文件封装了博通微系板卡通用的 runner 注册逻辑将本板的默认 flasher 指定为bflb_mcu_tool这样直接执行west flash即可无需指定--runner。另外pre_dt_board.cmake 在设备树编译前追加了EXTRA_DTC_FLAGS -Wno-unique_unit_address_if_enabled用于抑制该板设备树中 Flash 子节点地址与父节点ranges不一致时 dtc 的告警——这是 BL602 类 SoC 外部 Flash 节点常见的一处编译告警豁免。实战编译、烧录与串口验证以下流程完整继承自板级文档并补充了仓库中的配置佐证。第一步编译 hello_world构建 Zephyr 内核与hello_world示例应用等价于west build -b dt_bl10_devkit samples/hello_world$ west build -b dt_bl10_devkit samples/hello_world第二步进入烧录模式并 west flashBL602 通过专用引脚的复位时电平决定启动模式板上用D8 按键连接 GPIO8与EN 按键复位/使能配合实现。按键时序必须严格如下按下并保持D8按键按下并松开EN按键触发一次复位松开D8按键。此时芯片处于可烧录状态立即执行$ west flash由于 board.cmake 已将 flasher 绑定为bflb_mcu_tool --chipname bl602该命令会把build/zephyr/zephyr.bin写入 IS25LP128 外部 Flash设备树中image-0代码分区。第三步串口监听启动输出用终端程序监听 USB 串口。Linux 下端口通常为/dev/ttyUSB0例如使用 minicom$ minicom -D /dev/ttyUSB0 -o-o选项告诉 minicom 不发送调制解调器初始化字符串。串口参数须与设备树中current-speed 115200匹配配置为波特率115200数据位8校验位无None停止位1然后再次按下并松开EN按键复位板子即可看到*** Booting Zephyr OS build v4.1.0-4682-g21b20de1eb34 *** Hello World! dt_bl10_devkit/bl602c20q2i第二行输出中的bl602c20q2i由设备树/SoC 信息拼接而成与 Kconfig.dt_bl10_devkit 选中的SOC_BL602C20Q2I一致可作为正确运行在 BL602 上的直观校验。至此dt_bl10_devkit已完成配置并成功运行 Zephyr。延伸继续深入的路径SoC 层公共实现soc/bflb/bl60x/soc.c、soc/bflb/bl60x/soc.h以及 soc/bflb/bl60x/Kconfig.soc 中SOC_BL602C20Q2I第 18 行与SOC_BL602C20Q2IS第 22 行两个 BL602 型号定义pinctrl 绑定宏GPIO7_UART0_RX等由zephyr/dt-bindings/pinctrl/bl602x-pinctrl.h提供定义 BL602 各功能引脚复用编号同厂商另一块板卡 DT-Xt ZB1 的文档可作横向参考boards/doiting/dt_xt_zb1_devkit/doc/index.rst板级文档原始出处boards/doiting/dt_bl10_devkit/doc/index.rst。小结项目取值/说明依据SoCBL602bl602c20q2iRISC-VWi-Fi 802.11 b/g/n/e/i BLE 共存board.yml、dt_bl10_devkit.dts主频192MHz设备树clock-frequency外部 FlashIS25LP12816MBQSPI Bank1 0x230000004K 擦除块设备树sf_bank1节点分区boot_header 8KB只读/ image-0 约 1MB只读/ storage 15MB设备树partitions控制台UART0 115200-8N1RXGPIO7、TXGPIO16与烧录共用设备树 pinctrl.dtsi烧录方式D8 长按 EN 复位 west flashbflb_mcu_tool--chipname bl602board.cmake 板级文档支持功能gpio / pinctrl / uart / dma / flashnet、bluetooth 不在测试范围dt_bl10_devkit.yaml掌握以上内容后你就可以在 DT-BL10 上完成从编译、烧录到串口调试的完整闭环并基于其设备树分区与 pinctrl 框架继续开发 GPIO、UART、DMA、Flash 存储类应用。【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考