Zephyr RTOS 开发 MEC172x Modular ASSY6930 板卡:从硬件配置、跳线设置到 SPI 镜像生成与烧录实战
【免费下载链接】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 RTOS 仓库中 MEC172x Modular ASSY6930 板卡文档 为主体,结合仓库内该板卡的设备树、Kconfig 配置、CMake 构建逻辑与 SPI 镜像配置样例,系统讲解 Microchip MEC172x 模块化 EC 开发板的硬件资源、两种工作模式、关键跳线设置,以及基于 Dediprog SF100 的完整编译—镜像生成—烧录—调试流程。读完本文,你将掌握如何为 ASSY6930 板卡构建 Zephyr 应用、生成可烧写的 SPI NOR 镜像并完成首次 Hello World 运行。
板卡概述:面向 MEC172x 系列 MCU 的模块化评估平台
MEC172x Modular Card ASSY6930(Rev. B)是用于评估 Microchip MEC172X 系列微控制器的开发板。它既可以独立(Standalone)运行,也可以与任何符合MECC 规范(Microchip Embedded Controller Connector)的平台**对接(Mated)**使用,因此特别适合作为嵌入式控制器(EC)固件开发的参考硬件。
在 Zephyr 仓库中,该板卡的元数据定义在 board.yml:
board: name: mec172xmodular_assy6930 full_name: MEC172x Modular Card ASSY6930 (Rev. B) vendor: microchip socs: - name: mec172x_nsz对应 Zephyr 板级标识符为mec172xmodular_assy6930,SoC 为microchip,mec172xnsz。在 mec172xmodular_assy6930.yaml 中还可以看到该板卡的类别信息:
identifier: mec172xmodular_assy6930 type: mcu arch: arm toolchain: - zephyr - gnuarmemb ram: 64 flash: 352 supported: - gpio - pinmux - i2c即这是一块 ARM 架构 MCU 板卡,支持 Zephyr SDK 与 GNU Arm Embedded 两套工具链,默认启用 GPIO、引脚复用(pinmux)与 I2C 驱动。
MEC172x Modular ASSY6930 开发板实物图
硬件资源一览
ASSY6930 板卡围绕 MEC172x 系列 MCU 设计,核心硬件资源如下:
- 处理器:MEC172x(MEC1723、MEC1727、MEC1728)ARM Cortex-M4;
- 存储:416 KB RAM、128 KB 启动 ROM;
- 串口:UART1,通过 microUSB 引出,用于串口日志;
- PECI:PECI 3.0 接口;
- 风扇控制:FAN、PWM 与 TACHO(转速检测)引脚;
- 总线:5 个 SMBus 实例;
- eSPI:eSPI 排针接口;
- VCI:VCI 接口;
- PS/2:1 路硬件驱动 PS/2 端口;
- 键盘接口:键盘接口排针。
从设备树 mec172xmodular_assy6930.dts 可以看到,板级定义启用了ecia(EC 中断控制器)、rtimer、pcr、uart1、adc0、espi0、qspi0、kbd0、pwm0、tach0、ps2_0以及三路 I2C 控制器(i2c_smb_0、i2c_smb_1、i2c_smb_2)等外设,并且把uart1指定为 Zephyr 控制台与 shell 串口(zephyr,console/zephyr,shell-uart)。
两种引脚暴露方式
与 MEC172x 官方 EVB 不同的是,模块化的 MEC172x 通过两种方式暴露引脚:
1)独立模式(Standalone mode,通过排针引出)
- GPIO;
- JTAG 端口;
- eSPI 总线;
- I2C0、I2C1、I2C6;
- PWM1、PWM2、PWM3;
- 共享 SPI(Shared SPI);
- 键盘接口(Keyboard Interface)。
2)对接模式(Mated mode,通过高密度 MECC 连接器对接其他平台)
- FAN、PWM8;
- I2C3、I2C7;
- eSPI 总线。
板卡供电可通过+5V USB micro-A 连接器或MECC 连接器两种方式完成,具体由跳线决定(见下文)。
系统时钟与串口配置
系统时钟
MEC172x MCU 使用96 MHz 内部振荡器配合片上 PLL,产生最终 EC 时钟频率12 MHz。该配置位于 Processor clock control register(处理器时钟控制寄存器),对应数据手册第 4 章 "4.0 POWER, CLOCKS, and RESETS"。
在设备树中,CPU 的clock-frequency被显式声明为 96 MHz(mec172xmodular_assy6930.dts):
&cpu0 { clock-frequency = <96000000>; status = "okay"; };串口
UART1 被配置为串口日志输出。设备树中的完整配置为:
&uart1 { status = "okay"; current-speed = <115200>; pinctrl-0 = <&uart1_tx_gpio170 &uart1_rx_gpio171>; pinctrl-names = "default"; };即波特率 115200,TX 使用 GPIO170、RX 使用 GPIO171,并通过 pinctrl 完成引脚复用。对应板级 Kconfig 在 mec172xmodular_assy6930_defconfig 中开启:
CONFIG_CLOCK_CONTROL=y CONFIG_GPIO=y CONFIG_SERIAL=y CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_ADC=y CONFIG_I2C=y CONFIG_ESPI=y CONFIG_SPI=y CONFIG_SPI_ASYNC=y可以看到板卡默认同时启用了串口控制台、ADC、I2C、eSPI 与 SPI(含异步 SPI),为各类 EC 外设开发做好了准备。
跳线设置:正确上电与启动的前提
文档强烈建议按如下跳线配置进行演示,高级用户可根据需要偏离推荐值。
电源相关跳线
| 跳线 | 设置 | 作用 |
|---|---|---|
JP22 | 1-2 | 通过 type A/B 连接器P1供电,独立模式必需 |
JP22 | 2-3 | 通过 MECC 连接器P2供电,对接外部平台时使用 |
JP26 | 2-3 | 设置 VTR2 为3.3V,Windows 应用必需 |
JP26 | 1-2 | 设置 VTR2 为1.8V,Chrome 应用必需 |
注意:JP22 上必须且只能放置一个跳线帽。
Boot-ROM 启动引脚(Boot Strap)
JP23(UART_BSTRAP)用于配置 MEC172x 的 Boot-ROM strap:
| JP23(UART_BSTRAP) | 说明 |
|---|---|
1-2 | 将 UART_BSTRAP 拉低,Boot-ROM 采样到低电平后,使用 UART 接口进行Crisis Recovery(危机恢复) |
启动源选择
以下跳线配置 MEC172x 从Shared SPI、Slave Attached Flash(SAF)或Master Attached Flash(MAF)启动:
| Boot Source | JP25 |
|---|---|
| Shared SPI 或 SAF | 5-6 |
| MAF | 1-2, 4-6 |
启动源的选择直接决定了固件存放位置与烧录方式,是本板卡与常规开发板最大的不同点:固件不是烧进 MCU 内部 Flash,而是生成镜像后写入外部 SPI NOR 芯片。
支持的板载功能与启动器
板卡通过 Zephyr 的板级定义自动生成"支持特性"(Supported Features)与"支持运行器"(Supported Runners)两张表。从 mec172xmodular_assy6930.yaml 与 board.cmake 可知:
- 默认支持 GPIO、pinmux、I2C;
- 默认烧录运行器为Dediprog(
board_set_flasher_ifnset(dediprog)),即 Dediprog SF100 SPI 编程器; - 烧录时使用的镜像文件名为
spi_image.bin,并固定使用 3.5V 电平烧录(--vcc=0):
set(SPI_IMAGE_NAME spi_image.bin) board_set_flasher_ifnset(dediprog) # --vcc=0 - use 3.5V to flash board_finalize_runner_args(dediprog "--spi-image=${PROJECT_BINARY_DIR}/${SPI_IMAGE_NAME}" "--vcc=0" )编程与调试:完整操作流程
ASSY6930 的烧录流程与普通 Cortex-M 板卡差异较大:编译产物zephyr.bin必须先经过MEC172x SPI Image Generator工具封装成 SPI 镜像,再用 Dediprog SF100 之类的外部编程器写入板载 SPI NOR 芯片。
1. 准备 Dediprog SF100 编程器
- Windows 版本可从 SF100 产品页获取;
- Linux 版本源码可从 SF100 Linux 开源仓库获取,并按 SF100 Linux 手册完成配置。Linux 下务必把
SF100Linux目录中的60-dediprog.rules复制到/etc/udev/rules.s(或rules.d),然后重载 udev 规则:
$ udevadm control --reload- 将
dpcmd(Linux)或dpcmd.exe(Windows)所在目录加入PATH。
2. 获取 MEC172x SPI 镜像生成工具
克隆 MEC172x SPI Image Gen 仓库,或直接下载该目录中的文件。注意:Linux 与 Windows 的工具文件名不同。
3. 让 Zephyr 构建系统找到镜像生成工具
通过 CMake 变量MEC172X_SPI_GEN指定工具路径,例如:
-DMEC172X_SPI_GEN=<path to spi_gen tool>/mec172x_spi_gen_lin_x86_64在仓库的 CMakeLists.txt 中可以看到其查找逻辑:
if(NOT DEFINED MEC172X_SPI_GEN) set(MEC172X_SPI_GEN $ENV{MEC172X_SPI_GEN}) endif() find_program (MEC172X_SPI_GEN NAMES mec172x_spi_gen_lin_x86_64 mec172x_spi_gen) if(MEC172X_SPI_GEN STREQUAL MEC172X_SPI_GEN-NOTFOUND) message(WARNING "Microchip SPI Image Generation tool is not available. SPI Image will not be generated.") endif()也就是说,除了用-D显式指定,也可以设置环境变量MEC172X_SPI_GEN;如果构建系统仍找不到工具,会打印警告且不会生成 SPI 镜像。
4. 指定 SPI 配置(可选)
默认的 SPI 配置文件是位于${BOARD_DIR}/support下的spi_cfg.txt。仓库中同时提供了针对4MBit(spi_cfg_4MBit.txt)与128MBit(spi_cfg_128MBit.txt)两种 SPI Flash 的示例配置。如需自定义,可通过MEC172X_SPI_CFG覆盖:
-DMEC172X_SPI_CFG=<path to spi_cfg file>/spi_cfg.txtCMake 侧对应的查找逻辑为:
if(NOT DEFINED MEC172X_SPI_CFG) set(MEC172X_SPI_CFG $ENV{MEC172X_SPI_CFG}) endif() find_file (MEC172X_SPI_CFG NAMES spi_cfg_4MBit.txt spi_cfg_128MBit.txt spi_cfg.txt PATHS ${BOARD_DIR}/support)找到工具与配置文件后,构建系统会在构建结束后自动调用:
COMMAND ${MEC172X_SPI_GEN} -i ${MEC172X_SPI_CFG} -o ${PROJECT_BINARY_DIR}/${SPI_IMAGE_NAME}生成spi_image.bin。
5. 完整构建示例:为 128MBit SPI Flash 生成 hello_world 镜像
west build -p auto -b mec172xmodular_assy6930 samples/hello_world -- -DMEC172X_SPI_GEN=$HOME/CPGZephyrDocs/MEC172x/SPI_image_gen/mec172x_spi_gen_lin_x86_64 -DMEC172X_SPI_CFG=$HOME/zephyrproject/zephyr/boards/microchip/mec172xmodular_assy6930/support/spi_cfg_128MBit.txt构建完成后,只要构建系统能找到镜像生成工具,就会在构建目录中生成spi_image.bin,该二进制镜像即可用于烧写 SPI 芯片。
SPI 配置文件核心字段解读
以仓库中的 spi_cfg.txt(内部 512KB Flash 场景)为例:
[SPI] SPISizeMegabits = 4 Flashmap = false FlshmapAddr = 0 [DEVICE] TagAddr0 = 0 TagAddr1 = 0 ; BoardID is used by a Boot-ROM feature named PlatformID. By default PlatformID ; is disabled. If PlatformID is enabled in OTP Boot-ROM will check the image ; BoardID value with an OTP PlatformID value. Load is aborted if the ID's do ; not match. BoardID = 0 [IMAGE "0"] ImageLocation = 0x1000 SpiFreqMHz = 24 SpiReadCommand = Dual SpiDriveStrength = 4 SpiSlewFast = false SpiSignalControl = 0x00 FwBinFile = zephyr.bin ImageRevision = 0x56 FwOffset = 0 FwLoadAddress = 0xC0000 FwEntryAddress = 0 UseECDSA = false几个关键参数的含义:
SPISizeMegabits:SPI Flash 容量(单位 Mbit),与板载 Flash 容量必须匹配;BoardID:平台 ID。Boot-ROM 的 PlatformID 功能默认关闭;若在 OTP 中启用了 PlatformID,Boot-ROM 会将镜像的 BoardID 与 OTP 中存储的值比对,不匹配则中止加载。128MBit 配置样例中该值被设为0x316;ImageLocation:镜像在 SPI Flash 中的起始偏移;SpiFreqMHz/SpiReadCommand/SpiDriveStrength:SPI 读时序参数(频率、读命令模式如 Dual/Quad、驱动强度)。对比可见 4MBit 配置使用Quad读命令与驱动强度 8,而 128MBit 配置使用Dual读命令与驱动强度 4;FwBinFile:待封装的固件文件,即zephyr.bin;FwLoadAddress:固件加载地址(0xC0000);UseECDSA/ECDSAPrivKeyFile/FwEncrypt:签名与加密相关选项,示例中均为关闭或占位状态。
6. 硬件接线(Wiring)
将编程器连接到 ASSY6930 板上的J2排针,用于烧写 SPI NOR 芯片U2。务必确保编程器偏移为0x0。J2 与 Dediprog 连接器的引脚对应关系如下:
| Dediprog 连接器 | J2 | | --------------- | -- | | VCC | 1 | | GND | 2 | | CS | 3 | | CLK | 4 | | MISO | 6 | | MOSI | 5 |
接着:
- 用 RS232 线缆将板卡 UART1 端口连接到主机;
- 通过 micro-USB 线缆供电,并在
JP22的1-2位置放置跳线帽。
7. 烧录与运行验证
第一步:启动终端程序监听串口输出,Linux 下一般为/dev/ttyUSB0,并保持终端不关闭。例如:
$ minicom -D /dev/ttyUSB0 -o-o选项让 minicom 不发送 modem 初始化字符串。串口参数为:115200、8 数据位、无校验、1 停止位。
第二步:在第二个终端窗口中执行烧录:
$ west flash注意:west 进程启动后,请按住板上的Reset 按钮 S1不要松开,直到整个 west 流程成功结束。
第三步:在第一个终端窗口中应看到:
"Hello World! mec172xmodular_assy6930"若未看到该消息,按下 Reset 按钮,消息即应出现。
8. 调试(Debugging)
板上J1排针提供 JTAG 连接,用于调试。
故障排除(Troubleshooting)
- 应用未运行:先确认
LED1是否点亮。若LED1熄灭,请重新检查电源相关跳线(JP22、JP26)。 - Dediprog 无法编程:断开并重新连接
P1的线缆后重试。 - Dediprog 检测不到板载 Flash:按下板上
S1Reset 按钮后重试。
从设备树看板卡的外设布局
除了文档明示的跳线与烧录要点,仓库设备树还揭示了更多可用的板载外设,可作为后续二次开发的参考:
- LED:
led3(丝印 LED1,原理图 GPIO157)与led2(丝印 LED2,原理图 GPIO153),均以高电平有效方式配置,并分别建立led1/led2别名; - I2C:
i2c_smb_0(端口 0,SCL=GPIO004/SDA=GPIO003)、i2c_smb_1(端口 1,SCL=GPIO131/SDA=GPIO130)、i2c_smb_2(端口 7,即 I2C7,SCL=GPIO013/SDA=GPIO012),全部采用开漏(open-drain)输出; - eSPI:
espi0启用了完整 4 线 I/O(IO0~IO3)以及 RESET、CS、ALERT、CLK 引脚,并启用了面向 host 的 eSPI 子设备kbc0(键盘控制器)、acpi_ec0/acpi_ec1(ACPI EC)、emi0(eSPI 内存接口)与p80bd0(端口 80 调试); - 键盘矩阵:
kbd0配置为 8 行 × 16 列(row-size = <8>; col-size = <16>),并提供了default与sleep两套引脚状态; - PWM / TACHO:
pwm0(GPIO053)与tach0(GPIO050)默认启用; - PS/2:
ps2_0使用 CLK=GPIO114、DAT=GPIO115; - QSPI:
qspi0采用microchip,xec-qmspi-ldma兼容驱动,时钟 4 MHz,对应共享 SPI 引脚。
结语
MEC172x Modular ASSY6930 作为符合 MECC 规范的模块化 EC 开发板,其 Zephyr 支持链路完整:设备树与 Kconfig 已就绪,构建系统会自动调用 SPI 镜像生成工具产出spi_image.bin,配合 Dediprog SF100 即可完成外部 SPI NOR 的烧录。掌握本文的跳线配置、镜像生成参数与烧录时序(按住 S1 直到 west 完成),即可顺利跑通首个 Hello World,并进一步基于仓库设备树中已启用的 eSPI、I2C、键盘矩阵、PWM/TACH 等外设资源开展 EC 固件开发。
【免费下载链接】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),仅供参考