ARTICLE DETAIL

资讯详情

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

Zephyr 开发指南:96Boards Carbon(STM32F401RET + nRF51822)双芯片板卡的构建、刷写与蓝牙联调

Zephyr 开发指南:96Boards Carbon(STM32F401RET + nRF51822)双芯片板卡的构建、刷写与蓝牙联调 Zephyr 开发指南96Boards CarbonSTM32F401RET nRF51822双芯片板卡的构建、刷写与蓝牙联调【免费下载链接】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/zephyr96Boards Carbon 是一块基于 STMicroelectronics STM32F401RETCortex-M4主控、并通过 SPI 挂载 nRF51822 实现 Bluetooth LE 的双芯片开发板。本篇以 boards/96boards/carbon/doc/stm32f401xe.rst 为骨架结合当前仓库中该板卡的实际设备树、Kconfig 默认配置与烧录脚本完整讲解 96Boards Carbon 的硬件资源、Zephyr 支持特性、引脚映射以及从 DFU 刷写、串口验证到 BLE 功能联调的端到端实操流程。阅读完成后你将能独立完成该板卡的hello_world烧写、peripheral_hr蓝牙示例验证并理解双芯片各自独立烧录的开发模型。板卡概览一块板卡、两颗芯片、两套固件96Boards Carbon 板载两颗芯片一颗是主控STM32F401RETARM Cortex-M4带 FPU主频最高 84 MHz另一颗是nRF51822通过 SPI 与主控相连专门承担 Bluetooth LE 通信。两颗芯片虽然在同一块物理板卡上但必须分别独立编程这决定了该板卡在 Zephyr 中存在两套 board configuration96b_carbon/stm32f401xe面向主芯片 STM32F401RET。绝大多数应用都应使用这套配置因为它连接了板卡上所有的 breakout I/O 排针96b_carbon/nrf51822面向从芯片 nRF51822。多数用户通常不需要为这颗芯片开发应用因为 Zephyr 已提供可直接烧录到 nRF51822 的示例固件samples/bluetooth/hci_spi为主控侧应用提供蓝牙能力。两套配置的完整支持清单分别见 96b_carbon_stm32f401xe.yaml 与 96b_carbon_nrf51822.yaml板级总览见 board.ymlsocs: stm32f401xe / nrf51822。nRF51822 侧的编程与调试细节记录在 boards/96boards/carbon/doc/nrf51822.rst。硬件资源一览96Boards Carbon 的硬件组成如下STM32F401RET6LQFP64 封装ARM 32 位 Cortex-M4 CPU带 FPU最高 CPU 主频 84 MHzVDD 供电范围 1.7 V ~ 3.6 V512 KB Flash96 KB SRAM支持外部中断的 GPIO12 位 ADC16 通道RTC高级控制定时器通用定时器 × 7看门狗定时器 × 2USART/UART × 4I2C × 3SPI × 3SDIOUSB 2.0 OTG FSDMA 控制器由 nRF51822 经 SPI 提供的 Bluetooth LE值得说明的是板级设备树 96b_carbon_stm32f401xe.dts 中配置了外部高速晶振 HSE16 MHz与外部低速晶振 LSI并通过 PLL 将系统主频锁定到 84 MHzclk_hse { clock-frequency DT_FREQ_M(16); status okay; }; pll { div-m 16; mul-n 336; div-p 4; div-q 7; clocks clk_hse; status okay; }; rcc { clocks pll; clock-frequency DT_FREQ_M(84); ahb-prescaler 1; apb1-prescaler 2; apb2-prescaler 1; };支持的特性与默认配置96b_carbon/stm32f401xe在 Zephyr 中支持如下硬件特性接口控制器驱动/组件NVICon-chip嵌套向量中断控制器SYSTICKon-chip系统时钟UARTon-chip串口GPIOon-chipgpioPINMUXon-chippinmuxFLASHon-chipflashSPIon-chipspiI2Con-chipi2cUSB OTG FSon-chipUSB device默认配置位于 96b_carbon_stm32f401xe_defconfig。该文件除了开启CONFIG_SERIAL、CONFIG_UART_CONSOLE、CONFIG_GPIO等基础外还特意开启了# Enable MPU CONFIG_ARM_MPUy # Enable HW stack protection CONFIG_HW_STACK_PROTECTIONy即默认启用 ARM MPU 与硬件栈保护这也是该板卡作为 Cortex-M4 平台在安全特性上默认开启的防护能力。连接与引脚映射LEDLED信号引脚LED1 / User1 LEDPD2gpiod 2LED2 / User2 LEDPA15gpioa 15LED3 / BT LEDPB5gpiob 5LED4 / Power LEDVCC电源指示在设备树中分别定义为green_led_1、green_led_2、bt_blue_led并通过aliases映射为led0、led1、led2方便应用层按通用别名访问96b_carbon_stm32f401xe.dts。按键BUTTON BOOT0SW1BUTTON RST复位此外设备树中还定义了一个 User 按键gpiob 2低电平有效映射为sw0用于 Zephyr 输入子系统。低速排针Low Speed Header奇数排针引脚号信号名STM32F401 功能1UART2_CTSPA03UART2_TXPA25UART2_RXPA37UART2_RTSPA19GNDGND11USB5VUSB5V13AIN12PC215AIN14PC417UART6_TXPC619GPIOPC821I2C1_SCLPB623I2C1_SCAPB725I2C2_SCAPB327I2C2_SCLPB1029RST_BTNRST_BTN偶数排针引脚号信号名STM32F401 功能2SPI2_SSPB124SPI2_MOSIPB156SPI2_MISOPB148SPI2_SCKPB1310GNDGND12VCC2VCC214AIN13PC316AIN15PC518UART6_RXPC720GPIOPC922I2C1_SCLPB824I2C1_SDAPB926AIN10PC028AIN11PC130NCNC排针所对应的 96Boards Low Speed Connector 抽象还体现在 96b_lscon.dtsi 中它定义了linaro,96b-lscon-3v3连接器节点将 96Boards 标准 GPIO-A~H引脚 13~20映射到 PC2~PC9并将lscon_96b_i2c0、lscon_96b_spi0、lscon_96b_uart0/uart1分别绑定到i2c1、spi2、usart2、usart1供应用通过 96Boards 标准接口编写可移植代码。外部时钟源STM32F4 有两颗外部振荡器低速时钟频率 32.768 kHzLSI 32.768 kHz主时钟频率 16 MHzHSE。后者经 PLL 倍频至 84 MHz 系统主频。串口96Boards Carbon 最多提供 4 路 U(S)ART。Zephyr 控制台输出分配在USART1默认波特率 115200、8N1。设备树中chosen明确指定了zephyr,console usart1与zephyr,shell-uart usart1同时usart1PA9/PA10、usart2PA2/PA3、usart6PC6/PC7均已在设备树中启用并配置为 115200。I2C96Boards Carbon 最多提供 2 路 I2CZephyr 默认映射为I2C1_SCL : PB6I2C1_SDA : PB7I2C2_SCL : PB10I2C2_SDA : PB3设备树中i2c1、i2c2均以I2C_BITRATE_FAST400 kHz启用。SPI96Boards Carbon 最多提供 2 路 SPI。SPI1 专用于与 nRF51822 的蓝牙 HCI 通信。Zephyr 默认 SPI 映射SPI1_NSS : PA4SPI1_SCK : PA5SPI1_MISO : PA6SPI1_MOSI : PA7SPI2_NSS : PB12SPI2_SCK : PB13SPI2_MISO : PB14SPI2_MOSI : PB15在 96b_carbon_stm32f401xe.dts 中SPI1 下挂了一个zephyr,bt-hci-spi类型的 HCI 从设备节点hci_spi通过reset-gpiosPB4低有效带上拉与irq-gpiosPB1控制 nRF51822SPI 时钟最高 2 MHz同时chosen中zephyr,bt-hci hci_spi将该节点设为蓝牙 HCI 传输通道。USB96Boards Carbon 拥有一个支持设备/主机双角色的 USB OTG DRD 控制器通过板上的 mini OTG USB 接口引出。当前 Zephyr 仅支持 USB 设备功能USB_DM : PA11USB_DP : PA12设备树中zephyr_udc0即指向usbotg_fs节点PA11/PA12供 USB 设备类应用使用。编程与调试两条烧录路径STM32F4 SoC 主要有两种烧录入口ROM bootloader无需额外硬件通过 BOOT0 引脚触发与SWD 调试端口需要额外调试器。ROM bootloader 支持 USBDFU、UART、I2C、SPI 四种烧录通道。本节重点介绍 DFU 路径这也是 Zephyr 为该板卡配置的默认烧录方式见 board.cmake 中的board_runner_args(dfu-util --pid0483:df11 --alt0 --dfuse)。安装 dfu-util建议至少使用dfu-util v0.8。Debian/Ubuntu 软件源自带的版本可能较旧必要时需从源码自行构建。将应用烧写到 96Boards Carbon用 micro-USB 线连接 USB OTG Carbon 口与电脑板卡应上电启动。保持按住 BOOT0 开关同时按下并松开 RST 开关将板卡强制进入 DFU 模式。确认板卡处于 DFU 模式$ sudo dfu-util -l dfu-util 0.8 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2014 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to dfu-utillists.gnumonks.org Found DFU: [0483:df11] ver2200, devnum15, cfg1, intf0, alt3, nameDevice Feature/0xFFFF0000/01*004 e, serial3574364C3034 Found DFU: [0483:df11] ver2200, devnum15, cfg1, intf0, alt2, nameOTP Memory /0x1FFF7800/01*512 e,01*016 e, serial3574364C3034 Found DFU: [0483:df11] ver2200, devnum15, cfg1, intf0, alt1, nameOption Bytes /0x1FFFC000/01*016 e, serial3574364C3034 Found DFU: [0483:df11] ver2200, devnum15, cfg1, intf0, alt0, nameInternal Flash /0x08000000/04*016Kg,01*064Kg,03*128Kg, serial3574364C3034 Found Runtime: [05ac:8290] ver0104, devnum2, cfg1, intf5, alt0, nameUNKNOWN, serialUNKNOWN其中alt0对应内部 Flash0x08000000512 KB扇区划分 4×16 KB 1×64 KB 3×128 KB与 board.cmake 中--alt0 --dfuse的参数一致。在 Linux 主机上还会看到如下 dmesg 确认$ dmesg usb 1-2.1: new full-speed USB device number 14 using xhci_hcd usb 1-2.1: New USB device found, idVendor0483, idProductdf11 usb 1-2.1: New USB device strings: Mfr1, Product2, SerialNumber3 usb 1-2.1: Product: STM32 BOOTLOADER usb 1-2.1: Manufacturer: STMicroelectronics usb 1-2.1: SerialNumber: 3574364C3034构建并烧写应用以hello_world为例$ west build -b 96b_carbon/stm32f401xe samples/hello_world $ west flash用 micro-USB 线连接 USB UARTFTDI口与电脑运行终端程序监听输出$ minicom -D tty_device -b 115200将tty_device替换为板卡对应的串口设备Linux 下通常是/dev/ttyUSB0-b选项强制指定波特率。按下板卡 Reset 按键终端应输出Hello World! arm验证蓝牙功能板卡的蓝牙链路是STM32F401RET 主控 nRF51822 从芯片经 SPI1/HCI的组合因此验证分为三步按 boards/96boards/carbon/doc/nrf51822.rst 的说明将samples/bluetooth/hci_spi示例烧录到 nRF51822$ west build -b 96b_carbon/nrf51822 samples/bluetooth/hci_spi $ west flash⚠️ 注意hci_spi固件只能烧到 nRF51822绝不能误烧到主芯片 STM32F401RET——虽然两颗芯片都受 Zephyr 支持但该蓝牙桥接固件仅在 nRF51822 上运行。nRF51822 侧的烧录需借助外部 SWD 调试器通过板载丝印标注为 BLE 的调试排针出厂未焊接 0.1 英寸排针需自行焊接完成。按上文步骤安装 dfu-util。构建并烧写samples/bluetooth/peripheral_hr心率外设示例到主芯片目标板卡仍为96b_carbon/stm32f401xe进入 DFU 模式的方式同上$ west build -b 96b_carbon/stm32f401xe samples/bluetooth/peripheral_hr $ west flash按照samples/bluetooth/peripheral_hr示例ble_peripheral_hr自带的说明验证功能使用手机或另一台支持 BLE 的设备扫描并连接该外设即可观察到心率服务的广播与连接行为。完成以上步骤后96Boards Carbon 即具备完整的蓝牙连接能力可在此基础上进一步开发蓝牙应用。使用 SWD 调试96b_carbon/stm32f401xe支持 SWD 调试在板卡右下角安装一个 100 mil0.1 英寸排针将 SWD 调试器连接到该排针的 3V3、GND、CLK、DIO、RST 引脚然后通过任一 USB 口为 96Boards Carbon 供电。随后即可让调试器通过 SWD 扫描挂接 STM32F401RET 进行调试。Flash 分区布局从 96b_carbon_stm32f401xe.dts 可以看到板载 512 KB Flash 预定义了 MCUboot 友好的分区布局分区标签偏移大小bootmcuboot0x0000000032 KB只读slot0image-00x00020000128 KBslot1image-10x00040000128 KBscratchimage-scratch0x00060000128 KBchosen中的zephyr,code-partition slot0_partition表明应用默认链接到 slot0 分区为后续接入 MCUboot 引导升级预留了镜像槽位与交换空间。小结96Boards Carbon 是理解双芯片异构板卡在 Zephyr 中组织方式的典型范例主控96b_carbon/stm32f401xe负责全部外设与用户应用从芯片96b_carbon/nrf51822只承担 BLE 桥接二者经 SPI1 上的zephyr,bt-hci-spi节点在设备树层面完成 HCI 对接烧录路径上主芯片走 STM32 ROM bootloader dfu-utilDFU 模式从芯片走外部 SWD 调试器。沿着本文的 DFU 进入流程、串口验证与蓝牙三步入门的实操路径即可快速跑通该板卡从裸机点亮到 BLE 通信的完整开发闭环。【免费下载链接】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),仅供参考
返回列表