Zephyr 中 NXP LPCXpresso55S36 开发板实战指南:硬件特性、引脚映射、时钟配置与烧录调试
【免费下载链接】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/nxp/lpcxpresso55s36板级文档(boards/nxp/lpcxpresso55s36/doc/index.rst)展开,系统讲解这款 Arm Cortex-M33 评估板在 Zephyr 中的定位:LPC55(S)3x 家族的"超集参考板"。读完本文,你将掌握该板的硬件资源与 IOCON 引脚复用方式、设备树中控制台/CAN/PWM/Flash 分区等关键配置,以及使用 LinkServer 烧录、串口控制台 115200-8-N-1 调试的完整操作流程,并能基于板级源码(DTS、pinctrl、runner 配置)自行扩展外设支持。
一、板卡概览与硬件资源
LPCXpresso55S36 是 NXP 面向 LPC55S3x/LPC553x MCU 家族的评估平台,核心芯片为 LPC55S36,基于 Arm Cortex-M33 架构。板载丰富的扩展接口,使其成为 LPC55 系列功能验证的主力开发板。官方文档给出的硬件清单如下:
- LPC55S36 Cortex-M33 微控制器,最高运行频率 150 MHz;
- 片上 256 KB Flash 与 112 KB SRAM;
- LPC-Link2 高速 USB 调试探针,自带 VCOM 串口;
- 通过 LPC-Link2 探针实现的 I2C/SPI USB 桥接;
- MikroElektronika Click(mikroBUS)扩展接口;
- 兼容 Arduino UNO 的 LPCXpresso 扩展连接器;
- 兼容 PMod 的扩展/主接口;
- Reset、ISP、Wake、User 四个按键;
- 三色 LED;
- 全速(FS)USB 设备/主机口、高速(HS)USB 设备/主机口;
- 外接 USB 转串口线的 UART 排针;
- CAN 收发器;
- 带线路输入/输出的立体声音频编解码器。
在 Zephyr 中,板卡身份由 boards/nxp/lpcxpresso55s36/board.yml 声明:板名为lpcxpresso55s36,厂商nxp,SoC 为lpc55s36。这与文档中"硬件核心为 LPC55S36 SoC"的描述一一对应,也是west build -b lpcxpresso55s36时传入的板级标识。
二、在 Zephyr 生态中的定位:LPC55(S)3x 家族超集板
板级文档中特别强调了一段战略定位:NXP 将 LPCXpresso55S36 视为 LPC55(S)3x 整个 MCU 家族的超集(superset)评估板。这意味着 NXP 的"全平台支持"策略是优先在此板上启用 Zephyr 的新特性,从而惠及整个 LPC55(S)3x 家族。同系列的另一块超集板 lpcxpresso55s69(LPC55S69)功能更多,其已支持的特性可以复用到 lpcxpresso55s36 上。
从源码结构看,这一定位体现在板级 YAML 元数据 boards/nxp/lpcxpresso55s36/lpcxpresso55s36.yaml 中,它声明了架构为arm、112 KB RAM、246 KB Flash(256 KB 总量扣除末尾保留区后可用部分),并列出当前已验证的子系统能力:
adc、dac:模数/数模转换;can:CAN 总线(配合板载收发器);comparator:模拟比较器;counter:硬件计数器;flash、gpio、watchdog、crc:存储与基础外设;gint:通用中断控制器;pwm:脉宽调制;usb_device/usbd:USB 设备端;arduino_gpio:Arduino UNO 兼容排针 GPIO 映射。
这一能力清单可以直接作为选型依据:如果你的项目需要上述任意子集,lpcxpresso55s36 都可直接复用 Zephyr 的通用驱动框架,无需自行编写 BSP。
三、引脚复用:IOCON 与 pinctrl
LPC55S36 SoC 通过 IOCON 寄存器配置引脚功能。板级文档给出了核心引脚的官方分配表:
| 引脚 | 功能 | 用途 |
|---|---|---|
| PIO0_17 | GPIO | USR SW3 按键 |
| PIO0_22 | GPIO | 绿色 LED |
| PIO0_28 | GPIO | 红色 LED |
| PIO0_29 | USART | 控制台 RX |
| PIO0_30 | USART | 控制台 TX |
| PIO1_11 | GPIO | 蓝色 LED |
| PIO1_18 | GPIO | Wakeup SW1 按键 |
| PIO1_20 / PIO1_17 | FLEXPPWM0_PWM0_A/B | PWM 输出 |
| PIO1_6 / PIO1_22 | FLEXPPWM0_PWM1_A/B | PWM 输出 |
| PIO1_8 / PIO1_4 | FLEXPPWM0_PWM2_A/B | PWM 输出 |
| PIO1_21 / PIO0_3 | FLEXPPWM1_PWM0_A/B | PWM 输出 |
| PIO1_23 / PIO0_21 | FLEXPPWM1_PWM1_A/B | PWM 输出 |
| PIO1_25 / PIO0_31 | FLEXPPWM1_PWM2_A/B | PWM 输出 |
| PIO1_2 | CAN0_TXD | CAN 发送 |
| PIO1_3 | CAN0_RXD | CAN 接收 |
| PIO0_22 | USB0_VBUS | USBFS 电源检测 |
这些引脚分配在 Zephyr 中有两份对应的源码实现:
- 板级 DTS boards/nxp/lpcxpresso55s36/lpcxpresso55s36.dts 中声明了 LED 与按键。三色 LED 分别挂在
&gpio1 28(红)、&gpio0 22(绿)、&gpio1 11(蓝),并提供led0/led1/led2别名;两个按键btn_wk(Wake,&gpio1 18,低电平有效,编码INPUT_KEY_WAKEUP)与btn_usr(USR,&gpio0 17,低电平有效,编码INPUT_KEY_0),与 IOCON 表中 PIO1_18、PIO0_17 完全吻合。 - 引脚复用配置集中在 boards/nxp/lpcxpresso55s36/lpcxpresso55s36-pinctrl.dtsi(由
gen_board_pinctrl.py基于LPC55S36.mex自动生成)。例如控制台 USART 的复用组:
pinmux_flexcomm0_usart: pinmux_flexcomm0_usart { group0 { pinmux = <FC0_RXD_SDA_MOSI_DATA_PIO0_29>, <FC0_TXD_SCL_MISO_WS_PIO0_30>; slew-rate = "standard"; }; };即 FlexComm0 的 RX/TX 分别路由到 PIO0_29/PIO0_30,与上表一致。CAN0 复用组同样明确:CAN0_RD_PIO1_3与CAN0_TD_PIO1_2。该文件还包含 I2C(FC2)、HS-SPI、LPADC0(含nxp,analog-mode模拟属性)、FLEXPPWM0/1 各通道、USBFS VBUS 检测、DAC0、高速比较器 HSCMP0 等复用组,模拟引脚(ADC/OPA/DAC/HSCMP)统一标注了模拟模式,便于按需在 DTS 中引用。
此外,DTS 中通过arduino_header节点(compatible = "arduino-header-r3")将 Arduino UNO 排针的 A0–A5、D0–D15 逐一映射到具体 PIO(如 A0→&gpio0 15、D0→&gpio2 0等),并通过mikrobus_header节点(compatible = "mikro-bus")暴露 Click 扩展的 AN/RST/CS/SCK/MISO/MOSI/PWM/INT/RX/TX/SCL/SDA 引脚,二者都实现了 GPIO 透传(gpio-map-pass-thru = <0 0x3f>),用户可以直接用标准device_get_binding("arduino-header")/gpio_dt_spec方式访问扩展排针。
四、系统时钟
文档明确了时钟方案:LPC55S36 默认使用PLL1,由外部 24 MHz 晶振驱动,锁频至 144 MHz 作为系统时钟源。需要注意一个关键约束:当 Flash 控制器(XIP 方式执行)使能时,内核时钟会降为 96 MHz,其余系统时钟源则可按需求在 SoC 内切换。
这个约束对性能敏感的应用有实际意义:如果你计划把代码放在 SRAM 中运行(配合 DMA 访问 Flash),需要重新评估主频与功耗的取舍;反之,默认 XIP 配置下 96 MHz 已经是稳定可用的上限。
五、串口与设备树关键配置
5.1 串口
LPC55S36 SoC 内置8 个 FLEXCOMM 接口用于串行通信。板级 DTS 中仅 FlexComm0 被启用为 USART 控制台,其余未分配:
&flexcomm0 { status = "okay"; compatible = "nxp,lpc-usart"; current-speed = <115200>; pinctrl-0 = <&pinmux_flexcomm0_usart>; pinctrl-names = "default"; };current-speed = <115200>与后文串口终端配置参数一致。chosen节点中zephyr,console、zephyr,shell-uart与zephyr,uart-mcumgr全部指向&flexcomm0,并提供了usart-0别名——即 Zephyr 控制台、Shell 与 MCUmgr 管理通道共用这一个 USART。
5.2 设备树总览:chosen、别名与外设使能
lpcxpresso55s36.dts 的chosen节点还声明了:
zephyr,sram = &sram0、zephyr,flash = &flash0、zephyr,flash-controller = &iap:内存布局与片上 IAP Flash 控制器;zephyr,canbus = &can0:CAN 总线设备别名;zephyr,crc = &crc:硬件 CRC 计算单元。
同文件中被使能(status = "okay")的 SoC 外设包括:adc0(LPADC,CH0A 引脚带模拟模式)、dac0、opamp0、hscmp0(高速比较器)、crc、wwdt0(窗口看门狗)、powerquad(Cortex-M33 的 PowerQuad 指令集加速)、dma0、gint0/gint1、ctimer0~4、usbfs(全速 USB 设备端,别名zephyr_udc0),以及 CAN0:
&can0 { pinctrl-0 = <&pinmux_mcan_can0>; pinctrl-names = "default"; status = "okay"; can-transceiver { max-bitrate = <5000000>; }; };CAN 收发器的max-bitrate属性标定为 5 Mbps,与板上高速 CAN 收发器相符。
5.3 Flash 分区表
DTS 中&flash0定义了完整的固定分区布局(Flash 以 32 KB 子区为粒度,可在安全 AHB 控制器中按区配置安全级别):
| 分区 | 标签 | 起始地址 | 大小 |
|---|---|---|---|
boot_partition | mcuboot | 0x00000 | 32 KB |
slot0_partition | image-0 | 0x008000 | 96 KB |
slot1_partition | image-1 | 0x020000 | 96 KB |
storage_partition | storage | 0x038000 | 20 KB |
| (未分区) | PFR 保留区 | 末尾 | 12 KB |
chosen中zephyr,code-partition = &slot0_partition指向 image-0。该布局天然适配 MCUboot 双槽升级场景(mcuboot-button0别名已指向btn_wk按键,便于手动触发安全启动行为);若不需要 Bootloader,直接整片烧录应用同样可行,因为west flash默认处理整块镜像。
六、编程与调试:Runner 与工具链
文档给出的编程/调试模型是:板载 LPC-Link2(MCU-Link)探针同时承担烧录与调试,且默认工作模式为 CMSIS-DAP,宿主侧使用 NXP LinkServer 工具。Zephyr 中对应的 runner 配置在 boards/nxp/lpcxpresso55s36/board.cmake:
board_runner_args(linkserver "--device=LPC55S36:LPCXpresso55S36") board_runner_args(jlink "--device=LPC55S36" "--reset-after-load") board_runner_args(pyocd "--target=lpc55s36")三条 runner 参数分别对应三种可选方案:
- LinkServer(默认):设备串
LPC55S36:LPCXpresso55S36精确指定芯片与板子。使用前提是安装 LinkServer 调试宿主工具并确保其位于PATH。这也是 Zephyr 调试文档中"mcu-link-onboard-debug-probe + CMSIS-DAP 模式"的标准用法。 - J-Link:板载 MCU-Link 硬件在刷入特定固件后可作为 J-Link 探针使用;此时改用
SEGGER J-Link工具链,Zephyr 侧通过--device=LPC55S36 --reset-after-load参数接管设备选择与下载后复位。 - pyOCD:以
--target=lpc55s36参数接入,作为开源探针方案的备选。
板级默认配置 lpcxpresso55s36_defconfig 打开了一组基础能力:
CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_SERIAL=y CONFIG_UART_INTERRUPT_DRIVEN=y CONFIG_GPIO=y CONFIG_ARM_MPU=y CONFIG_RUNTIME_NMI=y其中UART_INTERRUPT_DRIVEN保证控制台在多线程/中断环境下可靠收发;ARM_MPU默认启用 MPU 内存保护;RUNTIME_NMI使运行时能感知不可屏蔽异常。Kconfig.lpcxpresso55s36则固定选择SOC_LPC55S36与封装LPC55S36JBD100。
七、串口控制台配置
按下文档操作:
- 用 USB 数据线将 PC 连接到板上J1(LINK2)接口(LPC-Link2 的 VCOM 口);
- 打开任意串口终端(minicom、putty 等),参数如下:
| 参数 | 值 |
|---|---|
| 波特率 | 115200 |
| 数据位 | 8 |
| 校验位 | 无(None) |
| 停止位 | 1 |
即 115200-8-N-1,与 DTS 中current-speed = <115200>一致,无需额外修改。
八、烧录示例(hello_world)
以最典型的 samples/hello_world 应用为例,构建并烧录:
west build -b lpcxpresso55s36 samples/hello_world west flashwest flash会经由 LinkServer runner(见上文 runner 参数)将镜像写入板载 MCU-Link 探针目标芯片。烧录完成后打开串口终端,按下 RESET 按键复位板卡,应看到:
***** Booting Zephyr OS v2.2.0 ***** Hello World! lpcxpresso55s36注意:终端输出中的 OS 版本号会随你构建时的 Zephyr 版本变化,Hello World! lpcxpresso55s36中的板名则来自 DTS 的model属性与板级标识,可作为烧录成功的直接判据。
九、调试示例
对同一 hello_world 应用执行交互式调试:
west build -b lpcxpresso55s36 samples/hello_world west build -t debug-t debug目标会启动 GDB 后端(经 LinkServer 与板载探针通信),进入调试会话后在 GDB 中逐步执行(next/step),随后在串口终端观察输出:
***** Booting Zephyr OS zephyr-v2.2.0 ***** Hello World! lpcxpresso55s36由于调试会话会停在断点,控制台消息只有在继续执行后才会打印,这是预期行为。若切换到 J-Link 固件模式使用同一颗 MCU-Link 硬件,则调试宿主工具换成 SEGGER 工具,Zephyr 侧无需改动板级配置(runner 参数已在board.cmake中就绪)。
十、小结与延伸阅读
- 板级文档主体:boards/nxp/lpcxpresso55s36/doc/index.rst(Overview、Hardware、Supported Features、Connections and IOs、System Clock、Serial Port、Programming and Debugging 全量内容);
- 板级元数据与能力清单:boards/nxp/lpcxpresso55s36/lpcxpresso55s36.yaml、boards/nxp/lpcxpresso55s36/board.yml;
- 设备树与引脚复用:boards/nxp/lpcxpresso55s36/lpcxpresso55s36.dts、boards/nxp/lpcxpresso55s36/lpcxpresso55s36-pinctrl.dtsi;
- Runner 与默认 Kconfig:boards/nxp/lpcxpresso55s36/board.cmake、boards/nxp/lpcxpresso55s36/lpcxpresso55s36_defconfig;
- 同家族超集板(功能更多,可交叉参考):boards/nxp/lpcxpresso55s69/doc。
综合来看,LPCXpresso55S36 在 Zephyr 中不仅是"一块能点亮 LED 的开发板",更是 NXP 对 LPC55(S)3x 全家族能力承诺的载体:时钟方案(24 MHz 晶振 → PLL1 → 144 MHz / XIP 96 MHz)、Flash 双槽分区、FLEXCOMM0 控制台、FLEXPPWM 双实例 PWM 阵列、CAN + USB + 模拟外设全开,配合 LinkServer/J-Link/pyOCD 三种调试链路,覆盖了从原型验证到安全启动、CAN 通信、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),仅供参考