- 操作系统
- 嵌入式
- RTOS
- 物联网
【免费下载链接】zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
RDDRONE-FMUK66 是 NXP 面向 PX4 无人机飞控应用推出的飞行管理单元(FMU),搭载 Kinetis K66 主控,板载丰富的传感器与舵机/PWM、GPS、CAN、SDHC 等飞行控制常用外设接口。本文以 Zephyr 仓库中该板卡文档 boards/nxp/rddrone_fmuk66/doc/index.rst 为核心骨架,结合板级设备树、Kconfig 与构建配置源码,系统讲解该板卡的硬件构成、外设分配、系统时钟、串口/USB 使用方式,以及从构建、烧录到调试的完整实操流程,帮助你快速上手基于 Zephyr 的飞控应用开发。
板卡概览
RDDRONE-FMUK66 是一块无人机控制板(drone control board),板载一颗 Kinetis K66 主控,并引出飞控系统常用的各类外设连接器。根据板卡文档的描述,其最大特点是随板附带 J-Link Edu Mini 调试器,可直接用于程序烧录与 UART 控制台输出,开箱即具备完整的开发闭环:
- 随板附带 J-Link Edu Mini,承担编程烧录与 UART 控制台功能;
- 板载飞行控制常用传感器组合(加速度计、陀螺仪、磁力计、气压计);
- 提供 PWM 舵机/电机控制接口、UART GPS/GLONASS 接口与 SDHC 卡槽。
该板卡在 Zephyr 仓库中的标识为rddrone-fmuk66,对应 SoC 为 MK66F18(详见 board.yml 中的socs: mk66f18)。
硬件资源详解
根据板卡文档的 Hardware 章节,RDDRONE-FMUK66 的主要硬件资源如下:
- MCU:MK66FN2MOVLQ18,ARM Cortex-M4F 内核,主频 180 MHz,2 MB Flash、256 KB RAM,支持低功耗模式与无晶振 USB(crystal-less USB),采用 144 引脚 LQFP 封装;
- USB:双角色(dual role)USB 接口,micro-B 连接器;
- RGB LED:板载三色灯,可用于状态指示;
- FXOS8700CQ:加速度计与磁力计二合一传感器;
- FXAS21002CQ:三轴陀螺仪;
- BMM150:磁力计;
- ML3114A2:气压计;
- BMP280:气压计;
- PWM 舵机/电机控制连接器;
- UART GPS/GLONASS 连接器;
- SDHC:SD 卡接口。
这些传感器在板级设备树 rddrone_fmuk66.dts 中均有对应的设备节点:
| 外设 | 总线 | 设备树节点 | 说明 |
|---|---|---|---|
| FXOS8700CQ 加速度计/磁力计 | SPI1(CS#0) | fxos8700@0 | 挂载于 SPI1,片选为 PIOB10 |
| FXAS21002CQ 陀螺仪 | SPI1(CS#1) | fxas21002@1 | 挂载于 SPI1,片选为 PIOB9 |
| BMM150 磁力计 | I2C1 | bmm150@10 | I2C 地址 0x10 |
| BMP280 气压计 | I2C1 | bme280@76 | I2C 地址 0x76 |
关于气压计节点,设备树中有值得注意的细节:板卡文档写的是 BMP280,而设备树注释明确说明"本板没有 BME280 而是 BMP280,两款器件高度相似,因此 BME280 驱动同样适用于 BMP280",节点名也沿用了bme280@76。这是 Zephyr 设备树中常见的驱动复用模式。
支持的板级特性
RDDRONE-FMUK66 在 board.yml 中声明的supported特性列表如下:
can(CAN 总线)counter(定时器/计数器)flash(Flash 存储)gpio(通用 IO)i2c(I2C 总线)nvs(非易失性存储)pwm(PWM 输出)spi(SPI 总线)usb_device(USB 设备)watchdog(看门狗)
该列表是west build -b rddrone-fmuk66时校验板卡功能是否可用的依据。从设备树看,板卡还额外使能了以太网(enet,RMII 接口)与双路 CAN 收发器(nxp,tja1042),这两项为飞控与机载通信提供了基础。
系统时钟配置
板卡文档指出:K66F SoC 使用板载16 MHz 外部晶振,配合芯片内部 PLL 产生160 MHz 系统时钟。
这在源码中有完整印证:
- rddrone_fmuk66_defconfig 中设置
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=160000000,并开启CONFIG_OSC_EXTERNAL=y使用外部晶振; - Kconfig.defconfig 定义了 PLL 相关的分频/倍频参数:
OSC_XTAL0_FREQ默认 16 MHz,MCG_PRDIV0(预分频)为 0x0,MCG_VDIV0(倍频)为 0x4,MCG_FCRDIV为 1; - rddrone_fmuk66.dts 中
&cpu0节点声明clock-frequency = <160000000>,&sim节点选择KINETIS_SIM_PLLFLLSEL_MCGPLLCLK作为系统时钟源。
文档中的"180 MHz MCU"指的是 K66 芯片的最高主频能力,而 Zephyr 板级配置将其设定在 160 MHz,这是板级配置的明确前提,开发时如需调整频率应同步修改设备树、Kconfig 与CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC三处。
串口资源分配
K66F SoC 共有 6 个 UART。RDDRONE-FMUK66 板卡文档给出了明确的串口用途划分:
- LPUART0:配置为控制台(console),连接调试接口;
- UART0:标签为Serial 2;
- UART2:标签为GPS,用于连接 GPS/GLONASS 模块;
- UART4:标签为Serial 1。
文档同时说明:以上任一 UART 都可通过 overlay 覆盖板级设备树的方式改作控制台。
在 rddrone_fmuk66.dts 的chosen节点中,控制台相关别名统一指向 LPUART0:
chosen { zephyr,console = &lpuart0; zephyr,shell-uart = &lpuart0; zephyr,uart-pipe = &lpuart0; zephyr,uart-mcumgr = &lpuart0; };已使能的 5 路 UART(lpuart0、uart0、uart1、uart2、uart4)在设备树中均配置为 115200 波特率,其引脚复用定义位于自动生成的 rddrone_fmuk66-pinctrl.dtsi:
| UART | 引脚 | 用途 |
|---|---|---|
| LPUART0 | PTD8(RX)/PTD9(TX) | 调试接口控制台 |
| UART0 | PTA1(RX)/PTA2(TX) | Serial 2 |
| UART1 | PTC3(RX)/PTC4(TX) | 通用串口 |
| UART2 | PTD2(RX)/PTD3(TX) | GPS |
| UART4 | PTC14(RX)/PTC15(TX),含 CTS/RTS | Serial 1 |
需要注意的是,pinctrl 文件中明确标注了两处引脚冲突:ftm3_default与 UART2 冲突、ftm3的通道与 FTM3 冲突——即 FTM3(RGB LED 及 PWM 通道)与 UART2 复用了同一组引脚,二者不可同时启用,开发时需根据实际需求取舍。
USB 接口
K66F SoC 内置 USB OTG(USBOTG)控制器,通过 micro-USB 连接器(K66F USB)同时支持**设备(device)与主机(host)**两种角色。板卡文档明确指出:当前 Zephyr 仅支持 USB 设备功能。
设备树中 USB 控制器的配置如下:
zephyr_udc0: &usbotg { compatible = "nxp,kinetis-usbd"; status = "okay"; num-bidir-endpoints = <8>; };即使用nxp,kinetis-usbd驱动,双向端点数为 8。配合 board.yml 中声明的usb_device支持,开发者可以在此板卡上实现 USB CDC-ACM 串口、HID、MSC 等标准 Zephyr USB 设备应用。
编程与调试
RDDRONE-FMUK66 默认使用J-Link作为调试探针(debug probe),板卡随附的 J-Link Edu Mini 与专用线缆直接连接板卡,同时提供 USB 转 UART 线缆直连 J-Link Edu Mini,这是文档描述的默认编程与获取控制台的期望配置。
board.cmake 中对该配置的实现为:
board_runner_args(jlink "--device=MK66FN2M0xxx18") include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)即通过board_runner_args指定 J-Link 目标器件为MK66FN2M0xxx18,并引入通用的 jlink runner 支持。
构建与烧录应用的方式与 Zephyr 标准流程一致(可参考 samples/hello_world 与构建相关文档),以hello_world为例:
west build -b rddrone_fmuk66 samples/hello_world执行上述命令后,Zephyr 会依据板卡目录下的 rddrone_fmuk66_defconfig 完成内核与驱动配置(该 defconfig 已默认开启 CONSOLE、UART_CONSOLE、SERIAL、GPIO,并启用 ARM MPU 与硬件栈保护CONFIG_HW_STACK_PROTECTION,以及固定稳压器CONFIG_REGULATOR)。
配置控制台
使用串口终端工具(如 minicom、putty 等)连接控制台时,需采用以下参数:
- 波特率(Speed):115200
- 数据位(Data):8 bits
- 校验位(Parity):None
- 停止位(Stop bits):1
即标准 115200 8N1 配置,与设备树中各 UART 节点的current-speed = <115200>一致。
烧录(Flashing)
以hello_world为例,烧录命令如下:
west build -b rddrone_fmuk66 samples/hello_world --runner jlink west flash烧录完成后,打开串口终端,按下板卡上的SW1 按键复位,终端中应出现如下启动信息:
***** Booting Zephyr OS v2.7.0 ***** Hello World! rddrone-fmuk66(上述输出为板卡文档提供的示例,其中的 Zephyr 版本号以当前使用的 SDK 版本为准。)
调试(Debugging)
同样以hello_world为例,启动调试会话的命令为:
west build -b rddrone_fmuk66 samples/hello_world west debugwest debug会通过 J-Link 启动调试器(默认 GDB 连接),此时打开串口终端并在调试器中单步执行程序,终端中会逐步打印出与烧录运行相同的输出:
***** Booting Zephyr OS v2.7.0 ***** Hello World! rddrone-fmuk66源码级扩展:从设备树看板级设计要点
Flash 分区布局
rddrone_fmuk66.dts 中为 2 MB Flash 定义了基于 MCUboot 的标准分区布局,分区大小按 4 KB 扇区对齐:
| 分区 | 起始地址 | 大小 | 标签 |
|---|---|---|---|
| boot | 0x00000000 | 64 KB | mcuboot(只读) |
| slot0 | 0x00010000 | 932 KB | image-0 |
| slot1 | 0x000F9000 | 932 KB | image-1 |
| storage | 0x001E2000 | 120 KB | storage |
其中slot0_partition同时被指定为zephyr,code-partition,即应用固件的默认加载区。该布局与nvs、MCUboot 升级流程等板级支持能力直接相关。
电源域与关键使能
设备树中定义了三个固定稳压器,分别控制板载关键外设的电源轨:
reg-3v3-s:使能 3V3_S 电源轨,为板载传感器供电,启动延时 2 ms;reg-3v3-neth:使能板载以太网 PHY 电源;reg-3v3-sd:使能板载 SD 卡电源。
三者均标记为regulator-always-on,配合 defconfig 中的CONFIG_REGULATOR=y与CONFIG_REGULATOR_FIXED_INIT_PRIORITY=75使用。
PWM 与 LED
- FTM0:驱动 PWM 航插的通道 1~4,
clock-source = "fixed"; - FTM3:驱动 RGB LED 的三个 PWM 通道(红 PTC8/通道4、绿 PTC9/通道5、蓝 PTD1/通道1,周期 15625000 ns 即 64 Hz 左右,极性反相),同时引出通道 5、6 供 PWM 航插使用。
GPIO LED(amber/green)定义为低电平有效,alias 分别为led0、led1;RGB 三个 PWM LED 的 alias 为pwm-led0/1/2。
通信外设
- 以太网:
enet使用 RMII 接口,phy-connection-type = "rmii",PHY 地址 0,启用zephyr,random-mac-address; - CAN:
flexcan0与flexcan1均使能,各自挂载nxp,tja1042收发器(can-phy0/can-phy1),支持最大 5 Mbps 位率,zephyr,canbus指向 flexcan0; - I2C0:外部 I2C 航插接口;I2C1:板载传感器总线(BMM150、BMP280);
- SPI0:FRAM 存储接口;SPI2:外部 SPI 接口。
结语
RDDRONE-FMUK66 在 Zephyr 中的支持相当完整:160 MHz 的 K66 主控、六路 UART、USB 设备、CAN、以太网、SDHC、PWM 舵机接口以及一整套板载传感器,配合随板 J-Link Edu Mini,构成了一套"开箱即用"的无人机飞控开发平台。通过本文的硬件资源梳理、串口/USB 分配说明以及构建、烧录、调试三步实操,配合 板级设备树 与 板级配置 的源码印证,你可以在此基础上快速移植或开发自己的飞控应用。实际开发中遇到引脚冲突、时钟调整或外设扩展需求时,建议优先从上述板级文件入手,通过 overlay 机制灵活适配。
- 操作系统
- 嵌入式
- RTOS
- 物联网
【免费下载链接】zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
相关推荐
Zephyr RTOS 开发板指南:NXP FRDM-MCXC444 硬件资源、管脚映射与调试烧录实战
Zephyr RTOS 开发板指南:NXP FRDM MCXC444 硬件资源、管脚映射与调试烧录实战 本文围绕 Zephyr 项目中 NXP FRDM MCX
操作系统嵌入式RTOS物联网Zephyr RTOS 下的 NXP FRDM-MCXN236 开发板完全指南:硬件资源、烧录调试与工程实践
Zephyr RTOS 下的 NXP FRDM MCXN236 开发板完全指南:硬件资源、烧录调试与工程实践 FRDM MCXN236 是 NXP 面向 MCX
操作系统嵌入式RTOS物联网Zephyr RTOS 下 NXP FRDM-MCXA153 开发板移植指南:硬件特性、构建、烧录与调试
Zephyr RTOS 下 NXP FRDM MCXA153 开发板移植指南:硬件特性、构建、烧录与调试 FRDM MCXA153 是 NXP 推出的紧凑型可扩
操作系统嵌入式RTOS物联网
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考