
Zephyr 中 Ezurio Sentrius MG100 网关板开发指南nRF52840 主控、LTE-M/NB-IoT 调制解调器与外设详解【免费下载链接】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 官方板级文档boards/ezurio/mg100/doc/index.rst为主体系统讲解 Sentrius MG100 网关板板名mg100在 Zephyr 中的定位、硬件资源、引脚连接、烧录与调试流程并结合仓库中的设备树、Kconfig 与构建配置深入剖析该板从 UART 控制台、QSPI 外置 Flash 分区到 HL7800 蜂窝调制解调器驱动的完整支持细节。读完本文你将能够独立在 MG100 上构建、烧录并验证 Zephyr 应用如 hello_world、blinky、button 与蓝牙示例并理解其硬件接口在源码层面的定义方式。一、MG100 是什么Bluetooth 5 低功耗蜂窝一体化网关根据 板级文档Sentrius MG100 Gateway 提供紧凑的、开箱即用的“蓝牙到低功耗蜂窝”网关方案基于 Pinnacle 100 socket 调制解调器平台MG100 可采集任意 Bluetooth 5 模块或设备的数据并通过全球通用的低功耗蜂窝网络LTE-M / NB-IoT连接发送到云端板载一颗高性能 Cortex-M4F 控制器支持完整 Bluetooth 5 连接与双模 LTE-M/NB-IoT 能力具备完整的法规与网络认证及终端设备运营商准入开发者可直接在板载 Cortex-M4F 微控制器上使用 Zephyr RTOS 开发应用借助开源、安全的 RTOS 获得远超内核本身的服务能力硬件提供内/外天线灵活选项可选电池备份可在断电期间持续上报远端蓝牙传感器数据。文档明确给出的主控与调制解调器选型为组件型号说明MCUNordic Semiconductor nRF52840ARM Cortex-M4F蜂窝调制解调器Sierra Wireless HL7800LTE-M1 / NB-IoT从仓库配置看这些定位在 board.yml 中得到印证板标识为mg100全名Sentrius™ MG100 Gateway厂商为ezurioSOC 为nrf52840mg100.yaml 则声明了ram: 256KB、flash: 1024KB工具链支持zephyr与gnuarmemb并列出受支持特性adc、bluetooth、counter、gpio、i2c、pwm、spi、watchdog以及netif:modem蜂窝网络接口。板级文档列出的完整受支持硬件包括ADC、CLOCK、FLASH、GPIO、I2C、MPU、NVIC、PWM、RADIOBLE 与 802.15.4、RTCnRF RTC System Clock、SPI、UART、WDT、QSPI、LIS3DH 三轴 MEMS 加速度计、HL7800 调制解调器以及 SD 卡。其中 802.15.4 无线电的使能可以在 mg100.dts 中验证chosen节点包含zephyr,ieee802154 ieee802154;且ieee802154 { status okay; }。二、硬件连接与 IO 映射文档“Connections and IOs”一节给出了板上用户可交互外设的确切引脚分配下面完整继承这些映射并对照设备树源码说明其落地方式。2.1 LED 与按键外设颜色/说明引脚LED1红色P1.7LED2蓝色P1.6LED3绿色P1.5BUTTON1板载按键P0.3这些定义与 mg100.dts 完全一致leds节点compatible gpio-leds中led_1/led_2/led_3分别绑定gpio1 7/6/5标签依次为 Red LED、Blue LED、Green LEDbuttons节点compatible gpio-keys中button_1绑定gpio0 3带GPIO_PULL_UP | GPIO_ACTIVE_LOW属性并映射输入事件码INPUT_KEY_0。设备树中的aliases节点还做了一组面向示例程序的兼容映射led0/led1/led2分别指向三个物理 LEDsw0指向button1此外mcuboot-button0/mcuboot-led0供 MCUboot 使用watchdog0指向wdt0。这正是 Zephyr 中samples/basic/blinky与samples/basic/button等示例无需硬编码引脚即可点亮 LED、读取按键的底层原因。2.2 外置 QSPI Flash64Mbit Macronix MX25R6435F文档说明板上有一颗 64Mbit 外置 Flash用于存放应用镜像与数据连接在板载 QSPI 设备控制器上引脚分配为MX25R64 QSPI SCK P0.19 IO0 P0.20 IO1 P0.21 IO2 P0.22 IO3 P0.23 CSN P0.17mg100-pinctrl.dtsi 中的qspi_default/qspi_sleep分组通过NRF_PSEL宏将这 7 根引脚P0.19、P0.20、P0.21、P0.22、P0.23、P0.17分别绑定到QSPI_SCK、QSPI_IO0..IO3、QSPI_CSN与文档一一对应且 sleep 分组开启了low-power-enable以降低休眠功耗。mg100.dts 中qspi节点进一步给出该 Flash 的关键属性mx25r64: mx25r6435f0 { compatible nordic,qspi-nor; reg 0; writeoc pp4io; /* 4 IO 页编程 */ readoc read4io; /* 4 IO 读取 */ sck-frequency 8000000; jedec-id [c2 28 17]; /* Macronix 器件 ID */ size 67108864; /* 64 MiB */ has-dpd; t-enter-dpd 10000; t-exit-dpd 35000; };jedec-id [c2 28 17]是 Macronix 厂商的 JEDEC 器件标识size为 67108864 字节即 64MiB并配置了深度掉电DPD进入/退出时序驱动会在空闲时利用该特性进一步降低功耗。2.3 LIS3DH 运动传感器文档描述用于检测网关是否移动的运动传感器引脚为 IRQ IO P0.28、I2C SDA P0.26、I2C SCL P0.27。设备树中 I2C0 使用nordic,nrf-twim兼容引脚复用见 mg100-pinctrl.dtsi 的i2c0_defaultTWIM_SDA P0.26、TWIM_SCL P0.27。传感器节点挂载在i2c0下lis2dh19 { compatible st,lis3dh, st,lis2dh; status okay; reg 0x19; irq-gpios gpio0 28 GPIO_ACTIVE_HIGH; anym-on-int1; };I2C 地址0x19中断接到 P0.28 且高电平有效并启用anym-on-int1使任意运动事件均可触发 INT1 中断——这正是“检测网关移动”场景的实现基础。2.4 SD 卡SPI 总线文档说明 SD 卡用于存储大量数据引脚分配SPI CS P0.29、SPI SCK P1.09、SPI MOSI P0.11、SPI MISO P0.12。对应 mg100-pinctrl.dtsi 的spi2_default分组SPIM_SCK P1.09、SPIM_MOSI P0.11、SPIM_MISO P0.12与文档完全一致。mg100.dts 中spi2节点额外声明了片选cs-gpios gpio0 29 GPIO_ACTIVE_LOWP0.29并以zephyr,sdhc-spi-slot兼容节点挂载zephyr,sdmmc-disk磁盘名SD最大 SPI 频率 8MHz从而让 SD 卡可直接作为磁盘/文件系统后端使用。值得注意的一个细节设备树中还定义了en-sd-switch节点compatible regulator-fixed使能脚为 P0.04从命名与 Kconfig.defconfig 中REGULATOR默认由DISK_DRIVER_SDMMC选中的结构看可以推断该“固定稳压器”用于在访问 SD 卡前切换/使能 SD 相关电源二者配合完成 SD 卡访问的电源管理。2.5 默认内核配置defconfigmg100_defconfig 为所有构建提供板级默认选项内容很精炼但信息量明确CONFIG_ARM_MPUy # 启用内存保护单元 CONFIG_GPIOy # 启用 GPIO CONFIG_SERIALy # 启用串口驱动 CONFIG_CONSOLEy CONFIG_UART_CONSOLEy # UART 控制台 CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTALy # 32KHz 晶振时钟源 CONFIG_CLOCK_CONTROL_NRF_K32SRC_150PPMy # 晶振精度 150ppm最后两项与 mg100.dts 中lfclk { k32src xtal; k32src-accuracy-ppm 150; };呼应低速时钟使用外部 32.768kHz 晶振并声明 150ppm 精度这是 Nordic 平台 BLE 定时精度的标准要求。Kconfig.defconfig 则体现了该板的应用取向MODEM与MODEM_HL7800的默认值同为NETWORKING即只要启用网络子系统CONFIG_NETWORKINGHL7800 调制解调器驱动默认自动开启这解释了板级文档中“通过 LTE-M/NB-IoT 连接云端”的默认可用性NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE默认 4096适配外置 QSPI Flash 的 4KiB 扇区布局REGULATOR默认由DISK_DRIVER_SDMMC选中为 SD 卡访问提供电源管理支持。三、HL7800 蜂窝调制解调器设备树中的完整控制线定义HL7800 是 MG100 区别于普通 nRF52840 开发板的核心部件。mg100.dts 将其作为 UART1 子节点定义并给出了全套控制 GPIOuart1 { compatible nordic,nrf-uarte; status okay; current-speed 115200; hw-flow-control; pinctrl-0 uart1_default; pinctrl-1 uart1_sleep; pinctrl-names default, sleep; hl7800: hl7800 { compatible swir,hl7800; status okay; mdm-reset-gpios gpio1 15 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_LOW); mdm-wake-gpios gpio1 13 (GPIO_OPEN_SOURCE | GPIO_ACTIVE_HIGH); mdm-pwr-on-gpios gpio1 2 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_LOW); mdm-fast-shutd-gpios gpio1 14 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_LOW); mdm-vgpio-gpios gpio1 11 0; mdm-uart-dsr-gpios gpio0 25 0; mdm-uart-cts-gpios gpio0 15 0; mdm-gpio6-gpios gpio1 12 0; }; };从这份定义可以读出若干实现要点HL7800 与主机 MCU 之间走UART1nrf-uarte115200 bps带硬件流控其引脚复用在 mg100-pinctrl.dtsi 中TX P0.14、RX P0.16、RTS P0.13、CTS P0.15驱动需要完整控制调制解调器的生命周期mdm-pwr-on-gpiosP1.02上电、mdm-reset-gpiosP1.15复位、mdm-fast-shutd-gpiosP1.14快速关机、mdm-wake-gpiosP1.13唤醒全部按开漏/开集电极方式配置符合调制解调器电源控制电路的典型接法mdm-uart-dsr-gpiosP0.25与mdm-uart-cts-gpiosP0.15提供 DSR/CTS 握手mdm-vgpio-gpiosP1.11用于电压可编程 GPIOmdm-gpio6-gpiosP1.12对应 HL7800 的 GPIO6。结合仓库结构可以推断该swir,hl7800兼容串由drivers/modem下的 HL7800 驱动实现drivers/modem/hl7800 的绑定与驱动匹配Zephyr 的网络栈再将其暴露为netif:modem网络接口使应用可以通过标准 Socket 或 MQTT/CoAP 等协议直接经蜂窝网络上云而无需关心底层 AT 指令序列。四、存储分区内置 Flash 与外置 QSPI 的双镜像布局mg100.dts 为内置 Flash1MBflash0和外置 QSPI Flashmx25r64分别定义了分区构成典型的 MCUboot 双槽two-slot布局内置 FlashnRF52840共 1MB分区标签起始地址大小用途boot_partitionmcuboot0x0000000096KMCUboot 引导加载器slot0_partitionimage-00x00018000896K主镜像槽zephyr,code-partition指向此处storage_partitionstorage0x000F800032KFCB/NVS 存储如启用注释明确说明0x000F8000至0x000FFFFF之外的空闲区段“保留给应用使用”。外置 QSPI FlashMX25R6435F64MiB分区标签起始地址大小用途slot1_partitionimage-10x00000000896K备用镜像槽scratch_partitionimage-scratch0x000E0000128K升级交换暂存区lfs_partitionlfs_storage0x001000007MBLittleFS 存储区这套布局的工程含义镜像 A 烧在片内 Flash镜像 B 烧在片外 QSPI Flash升级时可利用 128K scratch 区完成跨存储交换7MB 的lfs_storage则为应用数据提供大容量文件系统空间。配合 2.2 节提到的NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE4096默认值QSPI Flash 按 4KiB 页布局管理。chosen节点中zephyr,flash flash0、zephyr,sram sram0、zephyr,code-partition slot0_partition则明确了构建系统默认使用的 Flash/SRAM 与代码分区。另外uicr { gpio-as-nreset; };将 nRESET 引脚配置为普通 GPIO这是板级调试/烧录链路外部 SWD 调试器经 nRESET 控制目标复位的必要 UICR 设置reg1节点将板载稳压器设为 DCDC 模式有助于降低整机功耗——对一款可选电池备份的远程网关而言都是合理的取舍。五、构建、烧录与调试5.1 支持的调试器与烧录配置board.cmake 声明了本板的烧录器支持情况board_runner_args(jlink --devicenRF52840_xxAA --speed4000) board_runner_args(pyocd --targetnrf52840 --frequency4000000) include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)即支持 J-Linkwest flash --runner jlink器件参数nRF52840_xxAA、SWD 速度 4MHz与 PyOCD同时保留了 nrfutil/nrfjprog 兼容入口。板级文档特别指出Ezurio USB-SWD Programming Kit包含为 MG100 编程与调试所需的全部硬件。烧录操作可参照 Zephyr 通用的 Nordic Segger 烧录流程doc/develop/build_system相关页面中的nordic_segger与nordic_segger_flashing章节安装并配置软件后按常规方式构建与烧录应用。pre_dt_board.cmake 还有一个容易忽视的细节它通过EXTRA_DTC_FLAGS追加-Wno-unique_unit_address_if_enabled以抑制 nRF52840 DTS 中power40000000与clock40000000、bprot40000000重叠以及acl4001e000与flash-controller4001e000重叠引发的设备树检查告警——这是 Nordic SoC 寄存器域地址复用的常见处理方式。5.2 控制台使用 USB 口访问 UART板级文档强调在 MG100 上应使用 USB 连接器访问 UART 控制台。先打开终端监听输出$ minicom -D tty_device -b 115200将tty_device替换为 MG100 实际出现的端口例如 Linux 下的/dev/ttyUSB0。该波特率与 mg100.dts 中uart0 { current-speed 115200; }的设定一致chosen节点中zephyr,console、zephyr,shell-uart、zephyr,uart-mcumgr、zephyr,bt-mon-uart均指向uart0意味着日志控制台、shell、mcumgrMCU 管理协议与蓝牙监控输出都复用 UART0而 UART0 的引脚复用在 mg100-pinctrl.dtsi 中为TX P0.06、RX P0.08、RTS P0.05、CTS P0.07。5.3 示例构建并烧录 hello_world板级文档给出的标准验证流程以samples/hello_world为例先打开串口终端然后按 Zephyr 常规方式构建并烧录west build -b mg100 samples/hello_world west flash构建成功后应用将在 115200 波特率的 USB 串口中输出 Hello World! mg100输出中板名取自 board.yml 定义。这一步同时验证了 nRF52840 引导、UART0 控制台与烧录链路是否正常。5.4 调试调试方面板级文档建议参照 Zephyr 文档中 “Nordic boards Segger J-Link” 的调试指南nordic_segger章节配置软件。由于 board.cmake 已声明 J-Link 运行器参数--devicenRF52840_xxAA --speed4000配置好 J-Link 驱动后即可使用west build --prerelease gdb 或 Zephyr 调试脚本进行目标调试。六、软件生态与推荐验证示例6.1 Canvas Software Suite板级文档“Software”一节说明MG100 是 Ezurio Canvas Software Suite 的受支持硬件平台官方建议结合该套件覆盖产品的全部能力与硬件接口加速开发。这一节属于厂商配套软件的介绍Zephyr 仓库本身不包含该套件代码相关能力需以 Ezurio 官方资料为准。6.2 验证蓝牙三个推荐示例文档指出许多 Bluetooth 示例可以在 MG100 上运行并推荐ble_peripheralBLE 外围设备示例位于 samples/bluetoothbluetooth_eddystoneEddystone 广播bluetooth_ibeaconiBeacon 广播这些示例能直接使用得益于设备树中 BLE 无线电的完整使能nRF52840 的 RADIO 由 mg100.dts 继承自nordic/nrf52840_qiaa.dtsi且K32SRC采用 150ppm 精度的外部晶振满足 BLE 广播时隙对定时精度的要求。作为 MG100 的立身之本用 BLE 采集外围传感器数据再经 HL7800 上云正是其典型数据通路。6.3 验证 LED 与按键blinky 与 button文档给出的两个最小硬件验证示例为samples/basic/blinky samples/basic/button构建并烧录这两个示例即可确认 Zephyr 在 MG100 上运行正常。如前所述示例依赖的引脚完全由 mg100.dts 中的gpio-leds/gpio-keys节点与led0..led2、sw0别名提供无需任何额外 overlayblinky 将依次点亮 P1.7/P1.6/P1.5 三个 LEDbutton 则在按下 P0.3 按键INPUT_KEY_0事件码时响应。七、小结从板级文档到源码的完整映射回看 boards/ezurio/mg100/doc/index.rst 的整条脉络MG100 在 Zephyr 中的支持可以概括为一张清晰的证据链文档声明仓库佐证nRF52840 (Cortex-M4F) 主控board.ymlsocs: nrf52840mg100.dts 包含nrf52840_qiaa.dtsiHL7800 LTE-M/NB-IoT 调制解调器mg100.dtsswir,hl7800节点 Kconfig.defconfigMODEM_HL7800LED/按键引脚P1.7/P1.6/P1.5、P0.3mg100.dtsleds/buttons节点与别名QSPI 引脚P0.19~P0.23、P0.17mg100-pinctrl.dtsiqspi_defaultmg100.dtsmx25r6435f0节点LIS3DHIRQ P0.28、SDA P0.26、SCL P0.27mg100.dtslis2dh19节点 i2c0_default引脚组SD 卡CS P0.29、SCK P1.09、MOSI P0.11、MISO P0.12mg100.dtsspi2sdhc0mg100-pinctrl.dtsispi2_default115200 波特率 USB 串口控制台mg100.dtsuart0 current-speedJ-Link/PyOCD 烧录board.cmake 运行器参数对开发者而言这条证据链意味着以mg100为目标板用west build -b mg100即可获得包含 UART 控制台、GPIO LED/按键、I2C 加速度计、SPI SD 卡、QSPI 大容量存储与 HL7800 蜂窝网络接口的完整默认配置再按本文第五节的流程接上 USB-SWD 编程器与 USB 串口即可完成从构建、烧录到调试的完整闭环。【免费下载链接】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),仅供参考