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 ASSY6930Rev. B是用于评估 Microchip MEC172X 系列微控制器的开发板。它既可以独立Standalone运行也可以与任何符合MECC 规范Microchip Embedded Controller Connector的平台**对接Mated**使用因此特别适合作为嵌入式控制器EC固件开发的参考硬件。在 Zephyr 仓库中该板卡的元数据定义在 board.ymlboard: name: mec172xmodular_assy6930 full_name: MEC172x Modular Card ASSY6930 (Rev. B) vendor: microchip socs: - name: mec172x_nsz对应 Zephyr 板级标识符为mec172xmodular_assy6930SoC 为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 设计核心硬件资源如下处理器MEC172xMEC1723、MEC1727、MEC1728ARM Cortex-M4存储416 KB RAM、128 KB 启动 ROM串口UART1通过 microUSB 引出用于串口日志PECIPECI 3.0 接口风扇控制FAN、PWM 与 TACHO转速检测引脚总线5 个 SMBus 实例eSPIeSPI 排针接口VCIVCI 接口PS/21 路硬件驱动 PS/2 端口键盘接口键盘接口排针。从设备树 mec172xmodular_assy6930.dts 可以看到板级定义启用了eciaEC 中断控制器、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通过排针引出GPIOJTAG 端口eSPI 总线I2C0、I2C1、I2C6PWM1、PWM2、PWM3共享 SPIShared SPI键盘接口Keyboard Interface。2对接模式Mated mode通过高密度 MECC 连接器对接其他平台FAN、PWM8I2C3、I2C7eSPI 总线。板卡供电可通过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 MHzmec172xmodular_assy6930.dtscpu0 { clock-frequency 96000000; status okay; };串口UART1 被配置为串口日志输出。设备树中的完整配置为uart1 { status okay; current-speed 115200; pinctrl-0 uart1_tx_gpio170 uart1_rx_gpio171; pinctrl-names default; };即波特率 115200TX 使用 GPIO170、RX 使用 GPIO171并通过 pinctrl 完成引脚复用。对应板级 Kconfig 在 mec172xmodular_assy6930_defconfig 中开启CONFIG_CLOCK_CONTROLy CONFIG_GPIOy CONFIG_SERIALy CONFIG_CONSOLEy CONFIG_UART_CONSOLEy CONFIG_ADCy CONFIG_I2Cy CONFIG_ESPIy CONFIG_SPIy CONFIG_SPI_ASYNCy可以看到板卡默认同时启用了串口控制台、ADC、I2C、eSPI 与 SPI含异步 SPI为各类 EC 外设开发做好了准备。跳线设置正确上电与启动的前提文档强烈建议按如下跳线配置进行演示高级用户可根据需要偏离推荐值。电源相关跳线跳线设置作用JP221-2通过 type A/B 连接器P1供电独立模式必需JP222-3通过 MECC 连接器P2供电对接外部平台时使用JP262-3设置 VTR2 为3.3VWindows 应用必需JP261-2设置 VTR2 为1.8VChrome 应用必需注意JP22 上必须且只能放置一个跳线帽。Boot-ROM 启动引脚Boot StrapJP23UART_BSTRAP用于配置 MEC172x 的 Boot-ROM strapJP23UART_BSTRAP说明1-2将 UART_BSTRAP 拉低Boot-ROM 采样到低电平后使用 UART 接口进行Crisis Recovery危机恢复启动源选择以下跳线配置 MEC172x 从Shared SPI、Slave Attached FlashSAF或Master Attached FlashMAF启动Boot SourceJP25Shared SPI 或 SAF5-6MAF1-2, 4-6启动源的选择直接决定了固件存放位置与烧录方式是本板卡与常规开发板最大的不同点固件不是烧进 MCU 内部 Flash而是生成镜像后写入外部 SPI NOR 芯片。支持的板载功能与启动器板卡通过 Zephyr 的板级定义自动生成支持特性Supported Features与支持运行器Supported Runners两张表。从 mec172xmodular_assy6930.yaml 与 board.cmake 可知默认支持 GPIO、pinmux、I2C默认烧录运行器为Dediprogboard_set_flasher_ifnset(dediprog)即 Dediprog SF100 SPI 编程器烧录时使用的镜像文件名为spi_image.bin并固定使用 3.5V 电平烧录--vcc0set(SPI_IMAGE_NAME spi_image.bin) board_set_flasher_ifnset(dediprog) # --vcc0 - use 3.5V to flash board_finalize_runner_args(dediprog --spi-image${PROJECT_BINARY_DIR}/${SPI_IMAGE_NAME} --vcc0 )编程与调试完整操作流程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将dpcmdLinux或dpcmd.exeWindows所在目录加入PATH。2. 获取 MEC172x SPI 镜像生成工具克隆 MEC172x SPI Image Gen 仓库或直接下载该目录中的文件。注意Linux 与 Windows 的工具文件名不同。3. 让 Zephyr 构建系统找到镜像生成工具通过 CMake 变量MEC172X_SPI_GEN指定工具路径例如-DMEC172X_SPI_GENpath 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。仓库中同时提供了针对4MBitspi_cfg_4MBit.txt与128MBitspi_cfg_128MBit.txt两种 SPI Flash 的示例配置。如需自定义可通过MEC172X_SPI_CFG覆盖-DMEC172X_SPI_CFGpath 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 IDs 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几个关键参数的含义SPISizeMegabitsSPI Flash 容量单位 Mbit与板载 Flash 容量必须匹配BoardID平台 ID。Boot-ROM 的 PlatformID 功能默认关闭若在 OTP 中启用了 PlatformIDBoot-ROM 会将镜像的 BoardID 与 OTP 中存储的值比对不匹配则中止加载。128MBit 配置样例中该值被设为0x316ImageLocation镜像在 SPI Flash 中的起始偏移SpiFreqMHz/SpiReadCommand/SpiDriveStrengthSPI 读时序参数频率、读命令模式如 Dual/Quad、驱动强度。对比可见 4MBit 配置使用Quad读命令与驱动强度 8而 128MBit 配置使用Dual读命令与驱动强度 4FwBinFile待封装的固件文件即zephyr.binFwLoadAddress固件加载地址0xC0000UseECDSA/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 按钮后重试。从设备树看板卡的外设布局除了文档明示的跳线与烧录要点仓库设备树还揭示了更多可用的板载外设可作为后续二次开发的参考LEDled3丝印 LED1原理图 GPIO157与led2丝印 LED2原理图 GPIO153均以高电平有效方式配置并分别建立led1/led2别名I2Ci2c_smb_0端口 0SCLGPIO004/SDAGPIO003、i2c_smb_1端口 1SCLGPIO131/SDAGPIO130、i2c_smb_2端口 7即 I2C7SCLGPIO013/SDAGPIO012全部采用开漏open-drain输出eSPIespi0启用了完整 4 线 I/OIO0~IO3以及 RESET、CS、ALERT、CLK 引脚并启用了面向 host 的 eSPI 子设备kbc0键盘控制器、acpi_ec0/acpi_ec1ACPI EC、emi0eSPI 内存接口与p80bd0端口 80 调试键盘矩阵kbd0配置为 8 行 × 16 列row-size 8; col-size 16并提供了default与sleep两套引脚状态PWM / TACHOpwm0GPIO053与tach0GPIO050默认启用PS/2ps2_0使用 CLKGPIO114、DATGPIO115QSPIqspi0采用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),仅供参考