ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

深入 Zephyr 的 SmartFusion2 移植:Microchip M2S010 MKR Kit 开发板支持包全解析

深入 Zephyr 的 SmartFusion2 移植:Microchip M2S010 MKR Kit 开发板支持包全解析 深入 Zephyr 的 SmartFusion2 移植Microchip M2S010 MKR Kit 开发板支持包全解析【免费下载链接】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/zephyrMicrochip M2S010-MKR-KIT 是一块基于 SmartFusion2 M2S010 器件的 FPGA 开发套件其内部集成了一颗 ARM Cortex-M3 硬核子系统MSS。本篇文章以 Zephyr 仓库中的官方板级支持文档为骨架结合仓库内的板级 devicetree、SoC 初始化源码、OpenOCD 调试配置与时钟驱动实现系统讲解如何在 Zephyr 中为这块FPGA MCU混合架构板卡完成构建、时钟配置、烧录调试与引脚复用开发帮助你快速上手这块板子或为后续把更多 SmartFusion2 外设移植进 Zephyr 铺平道路。开发板与移植目标概览Zephyr 仓库为这块板子建立的板级目标是m2s010_mkr_kit/m2s010。其中m2s010_mkr_kit是板卡名m2s010是板卡搭载的 SoCSmartFusion2 M2S010。板级支持的核心描述位于 boards/microchip/m2s010_mkr_kit/m2s010_mkr_kit_m2s010.yaml从中可以读出板级的基本画像archarmCortex-M3ram64 KBflash256 KBeNVM 嵌入式非易失存储器supportedgpio、serialtoolchainzephyrtestingignore_tags排除了bluetooth与net相关测试从源码结构看这反映了当前移植尚未启用无线与网络功能板卡的厂商元数据vendor: microchip、SoC 列表等在 boards/microchip/m2s010_mkr_kit/board.yml 中声明。板级 devicetree 文件 boards/microchip/m2s010_mkr_kit/m2s010_mkr_kit_m2s010.dts 引用了 SoC 级 devicetree 描述文件 dts/arm/microchip/smartfusion2/m2s010.dtsi后者位于dts/arm/microchip/smartfusion2/目录下。板级 devicetree 的chosen节点定义了系统的关键挂载点chosen { zephyr,console uart0; zephyr,shell-uart uart0; zephyr,sram sram0; zephyr,flash flash0; zephyr,flash-controller flash; };即控制台与 Shell 均走 MSS UART0SRAM 与 Flash 分别指向 SoC dtsi 中定义的sram0与flash0。构建应用在 Zephyr 中为m2s010_mkr_kit/m2s010目标构建应用与其它板卡完全一致使用标准的west build流程west build -b m2s010_mkr_kit/m2s010 应用目录板级的默认 Kconfig 配置位于 boards/microchip/m2s010_mkr_kit/m2s010_mkr_kit_m2s010_defconfig它奠定了最小可用系统CONFIG_SERIALy CONFIG_UART_NS16550y CONFIG_CONSOLEy CONFIG_UART_CONSOLEy CONFIG_CLOCK_CONTROLy CONFIG_GPIOy CONFIG_SYS_CLOCK_TICKS_PER_SEC100各配置项的实际含义如下CONFIG_UART_NS16550y启用 ns16550 通用 UART 驱动。MSS UART0 在 dtsi 中的compatible ns16550见 m2s010.dtsi因此板级通过该驱动直接驱动 MSS UART0无需厂商专用串口驱动。CONFIG_UART_CONSOLEy把 Zephyr 控制台输出绑定到 UART。CONFIG_CLOCK_CONTROLy启用时钟控制子系统供 SmartFusion2 专用 clock-controller 节点microchip,smartfusion2-clock使用该节点负责向 UART 提供外设时钟。CONFIG_GPIOy启用 GPIO 驱动驱动板载 LED0。CONFIG_SYS_CLOCK_TICKS_PER_SEC100系统节拍 100 Hz。时钟配置硬件优先软件描述这是 SmartFusion2 移植中最重要的一个设计约束Zephyr 不会编程 MSS 时钟树。CPU 时钟与外设时钟必须已经在 SmartFusion2 硬件设计中配置好例如在使用 MSS/Libero 配置构建板卡镜像时完成。Zephyr 中的 devicetree 仅仅是对真实硬件时钟的软件描述。软件可见时钟频率的推导在 Zephyr 侧软件可见的 CPU 频率取自 devicetree 的 CPU 节点cpu0 { clock-frequency ...; };该值随后被用于推导出两个关键量CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC系统硬件周期计数基准SystemCoreClock变量供 SmartFusion2 SoC 端口使用。在 soc/microchip/smartfusion2/m2s010/soc.c 中可以找到这一推导的源码证据#define SMARTFUSION2_CPU_CLOCK_FREQ DT_PROP(DT_PATH(cpus, cpu_0), clock_frequency) BUILD_ASSERT(SMARTFUSION2_CPU_CLOCK_FREQ DT_PROP_BY_IDX(DT_NODELABEL(clkc), clock_frequencies, SMARTFUSION2_CLOCK_CPU), cpu0 clock-frequency must match the SmartFusion2 clock controller CPU output); uint32_t SystemCoreClock SMARTFUSION2_CPU_CLOCK_FREQ;值得注意的细节是soc.c用BUILD_ASSERT在编译期强制校验cpu0.clock-frequency必须与 clock-controller 节点clkc的clock-frequencies数组第一个元素CPU 输出一致。这意味着修改任何一个节点都必须同步修改另一个否则编译直接失败从源头上杜绝了描述不一致。SmartFusion2 专用时钟控制器节点SmartFusion2 专用的 clock-controller 节点compatible microchip,smartfusion2-clock当前只用于 UART 时钟。在 m2s010.dtsi 中其默认定义为clkc: clock-controller { compatible microchip,smartfusion2-clock; #clock-cells 1; clock-frequencies 100000000 50000000; clock-output-names cpu, mss-peripheral; };clock-frequencies数组的两个元素分别对应 CPU 输出100 MHz与 MSS 外设输出50 MHz。UART0/UART1 通过clocks clkc SMARTFUSION2_CLOCK_MSS_PERIPHERAL引用外设时钟输出。该时钟驱动的实现位于 drivers/clock_control/clock_control_smartfusion2.c。从源码结构看这是一个描述性驱动on/off/get_status/init均为空操作或直接返回开启状态核心逻辑只在get_rate——它把clkc节点的clock-frequencies属性读入rates数组按时钟 ID 索引返回对应频率clkid rate_count时返回-EINVAL。也就是说Zephyr 侧不进行任何实际的 PLL/分频器编程只负责把硬件设计中已经确定的频率讲清楚。其余外设SPI、I2C 等在 dtsi 中仍使用各自的本地频率属性例如clock-frequency 50000000或100000并不经过clkc。通过应用 overlay 覆盖时钟描述如果硬件时钟配置发生变化必须同步更新 devicetree 以匹配真实板卡。例如应用可以使用 overlay 覆盖 CPU 与外设时钟的描述值cpu0 { clock-frequency 80000000; }; clkc { clock-frequencies 80000000 40000000; };注意devicetree 值描述的是真实硬件时钟。仅修改 Zephyr 中的这些值并不会重新编程 SmartFusion2 的时钟硬件必须同时在硬件设计侧完成时钟配置。从源码层面看soc.c中的BUILD_ASSERT会强制保证cpu0与clkc两个节点描述一致。板卡默认值m2s010_mkr_kit_m2s010.dts为 CPU 100 MHz、MSS 外设 50 MHz注释明确要求必须与 SmartFusion2 MSS 设计中配置的时钟匹配。编程与调试OpenOCD CMSIS-DAP板卡使用 OpenOCD runner 完成烧录与调试runner 配置来自 boards/microchip/m2s010_mkr_kit/board.cmake 与 boards/microchip/m2s010_mkr_kit/support/openocd.cfg。board.cmake的核心内容board_runner_args(openocd --config${CMAKE_CURRENT_LIST_DIR}/support/openocd.cfg) board_set_flasher_ifnset(openocd) board_set_debugger_ifnset(openocd) include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)它把自定义的support/openocd.cfg传给 OpenOCD runner并同时设定烧录器与调试器均为 OpenOCDifnset表示未显式指定时兜底。support/openocd.cfg的关键配置source [find interface/cmsis-dap.cfg] transport select swd source [find target/swj-dp.tcl] # 默认 target 名 m2s010可被 -c set CHIPNAME ... 覆盖 # 默认 CPUTAPID 0x2ba01477适配 SmartFusion2 Cortex-M3 adapter speed 1000 swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID target create $_TARGETNAME cortex_m -endian $_ENDIAN -chain-position $_TARGETNAME $_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size 0x1000 -work-area-backup 0 reset_config srst_nogate cortex_m reset_config sysresetreq要点解析通过 CMSIS-DAP 接口FT4232H JTAG 桥接入传输协议选择 SWDtarget 为cortex_mCortex-M3DAP ID 期望值0x2ba01477可被 OpenOCD 的-c参数覆盖工作区work-area落在0x20000000即 SRAM0 基址大小 4 KB复位策略使用srst_nogatesysresetreq。主机环境准备好 CMSIS-DAP/OpenOCD 后烧录与调试命令为west flash --runner openocd west debug --runner openocd已支持的硬件资源与外设状态已验证的平台模块当前板级支持包已建模并通过验证的平台模块如下ARM Cortex-M3 CPUNVIC 中断控制器256 KB 嵌入式非易失存储器eNVM用于代码存储64 KB SRAMMSS UART0作为 Zephyr 控制台MSS GPIO带一颗用户 LEDGPIO0 引脚 0这些在板级 devicetree 中的体现uart0与gpio0均被置为status okayleds节点用gpio-ledscompatible 声明了led0绑定到gpio0的 pin 0GPIO_ACTIVE_HIGH。SoC 侧soc.c 的soc_early_init_hook会执行两类早期初始化一是通过系统寄存器MSSDDR_FACC1_CR使能 DDR 时钟smartfusion2_init二是根据 devicetree 中已启用的外设节点逐一清除对应软复位位smartfusion2_release_peripheral_resets覆盖 watchdog、PDMA、timer、UART0/1、SPI0/1、I2C0/1、CAN、GPIO、以太网 MAC、USB 等。接口到驱动/组件的映射接口控制器驱动/组件NVICon-chipnested vector interrupt controllerSYSTICKon-chipsystickUARTMSS UART0ns16550GPIOMSS GPIOgpioFLASHeNVMsoc-nv-flash已枚举但未启用的外设devicetree 还枚举了更多 SmartFusion2 外设块以便 Zephyr 驱动逐批上游后可以增量启用SPI0 和 SPI1microchip,mpfs-spi默认 50 MHzI2C0 和 I2C1microchip,mpfs-i2c默认 100 kHz各带 MAIN/ALERT/SUS 三路中断PDMAtimers 和 watchdogCAN 和 RTC这些节点在 m2s010.dtsi 中均已就位例如spi040001000、i2c040002000、spi140011000、i2c140012000、f2h_irqctrl等但默认status disabled直到匹配的 Zephyr 驱动可用并在该板卡上验证后才启用。这也解释了board.yml中testing.ignore_tags排除蓝牙与网络测试的原因——对应驱动/硬件链路尚未打通。引脚与接口映射以下表格总结了从随套件附带的DIGIKEY MAKER KIT REVA1_0_20170606.pdf原理图中恢复的板级连线。信号名采用原理图网络名与 SmartFusion2 封装球号。用户 LED 与按键板级功能SmartFusion2 信号备注led0DDRIO47PB0在 Zephyr 中暴露为 LED0LED1DDRIO47NB0板载红色 LEDLED2 / LED3DDRIO44PB0和DDRIO44NB08-LED 排组中的中间一对LED4DDRIO43PB0板载红色 LEDLED5DDRIO43NB0板载红色 LEDLED6DDRIO37PB0板载红色 LEDLED7DDRIO37NB0板载红色 LEDUSER_PB1DDRIO59PB0/GB0用户按键 SW1USER_PB2DDRIO63PB0用户按键 SW2SF2_RST_N专用复位网络复位按键 SW3原理图中分立 LED 标注为 D2~D9。当前 Zephyr 启用的 LED 对应LED0网络它路由到DDRIO47PB0。调试、时钟与控制台路由功能SmartFusion2 信号外部器件主振荡器XTLOSC_MAIN_XTAL/EXTAL32.768 kHz 晶振辅助振荡器XTLOSC_AUX_XTAL/EXTAL原理图中 DNI不贴装JTAG 选择JTAGSEL排针/跳线网络JTAG TDOJTAG_TDO/M3_TDO/M3_SWOFT4232H JTAG 桥JTAG TCKJTAG_TCK/M3_TCKFT4232H JTAG 桥JTAG TRSTJTAG_TRSTB/M3_TRSTBFT4232H JTAG 桥JTAG TMS / SWDIOJTAG_TMS/M3_TMS/M3_SWDIOFT4232H JTAG 桥JTAG TDIJTAG_TDI/M3_TDIFT4232H JTAG 桥MSS UART TXUART_TXD_OUTFT4232H USB UARTMSS UART RXUART_RXD_INFT4232H USB UARTUSB UART TX 网络USB_UART_TXD路由到 FT4232HUSB UART RX 网络USB_UART_RXD路由到 FT4232H板上 SPI Flash 与光传感器外设信号SmartFusion2 信号连接的器件SPI_0_SS0MSIO13NB2 / GPIO_7_AAT25SF161 CSSPI_0_SDIMSIO12NB2 / GPIO_5_AAT25SF161 SISPI_0_SDOMSIO13PB2 / GPIO_6_AAT25SF161 SOSPI_0_CLKMSIO12PB2AT25SF161 SCKSPI_0_WP_NMSIO2PB2 / USB_STP_BAT25SF161 WP#SPI_0_HOLD_NMSIO2NB2 / USB_NXT_BAT25SF161 HOLD#LIGHT_SDAMSIO4NB2 / USB_DATA3_BLTR-329ALS SDALIGHT_SCLMSIO4PB2 / USB_DATA2_BLTR-329ALS SCL可选 ESP8266 焊盘原理图中包含一个标注为未贴装的可选 ESP8266 模块焊盘。其走线在扩展板级支持时依然有用ESP8266 信号SmartFusion2 信号备注MOD1_TXMSIO1PB2 / USB_XCLK_BESP8266 TXOMOD1_RXMSIO1NB2 / USB_DIR_BESP8266 RXIMOD1_CEMSIO3NB2 / USB_DATA1_BESP8266 CHPDMOD1_RSTMSIO3PB2 / USB_DATA0_BESP8266 复位MOD1_GPIO2MSIO0NB2 / USB_DATA7_BESP8266 GPIO2MOD1_GPIO0MSIO5NB2 / USB_DATA5_BESP8266 GPIO0备用走线MSIO5PB2 / USB_DATA4_B标注为BANK2_UNUSED1备用走线MSIO6PB2 / USB_DATA6_B标注为BANK2_UNUSED2可选 ESP-WROOM-32 排针原理图第 6 页还暴露了一个未贴装的 ESP-WROOM-32 / WiFi-BT-BLE 排针通路位于 bank 7排针/网络SmartFusion2 信号备注USB_UART_TXDMSIO64NB7模块 UARTUSB_UART_RXDMSIO64PB7模块 UARTBT_TXMSIO67NB7模块串口BT_RXMSIO67PB7模块串口BT_BOOTMSIO71NB7启动引导BT_IO34MSIO71PB7GPIOBT_IO35MSIO72NB7GPIOBT_IO18MSIO73NB7GPIOBT_IO22MSIO76NB7GPIOBT_IO23MSIO77NB7GPIOBT_ENMSIO79NB7使能BT_IO2MSIO79PB7/GB1GPIOJ12 pin 1ESP32_SCSSPI 片选J12 pin 2ESP32_SCKSPI 时钟J12 pin 3ESP32_SDOSPI MISOJ12 pin 4ESP32_SDISPI MOSI以太网 PHY 布线VSC8541VSC8541 PHY 直接连接到 SmartFusion2 的 fabric bank 4 与 bank 6。原理图页面中可明确恢复以下信号分配PHY/GMII 信号SmartFusion2 信号BankCLK_50MHZ_SF2MSIOD84PB6/CCC_NE1_CLKI2bank 6GMII_TX_CLKMSIOD85PB6/CCC_NE1_CLKI1bank 6GMII_MDIOMSIOD90NB6bank 6GMII_MDCMSIOD90PB6bank 6GMII_TXD7MSIOD93NB6bank 6GMII_TXD6MSIOD93PB6bank 6GMII_TXD5MSIOD96PB6bank 6GMII_TXD4MSIOD96NB6bank 6GMII_TXD3MSIOD98NB6bank 6GMII_TXD2MSIOD99PB6bank 6GMII_TXD1MSIOD99NB6bank 6GMII_GTX_CLKMSIO102NB4/CCC_NE1_CLKI0bank 4GMII_RXD7MSIO113NB4bank 4GMII_RXD6MSIO113PB4bank 4GMII_RX_DVMSIO105NB4bank 4GMII_RX_CLKMSIO105PB4/CCC_NE0_CLKI0bank 4GMII_RXD1MSIO106NB4bank 4GMII_RXD0MSIO106PB4bank 4GMII_RXD3MSIO108NB4bank 4剩余的 VSC8541 接收与状态网络同样出现在该原理图页面但只有上表列出的分配能够以高置信度从机器文本提取中恢复。在向上游提交以太网支持之前需要对照原始原理图 PDF 完整校验一次 GMII 信号矩阵。延伸阅读指引官方文档中还推荐了若干 Microchip 资料便于扩展或向上游提交板级支持时查阅注意这些文档均为 Microchip 官网资料正文不再贴出链接板卡文档M2S010-MKR-KIT 快速入门指南对板卡 bring-up、连接器概览与套件内容最有帮助。SoC 文档IGLOO 2 FPGA 与 SmartFusion 2 SoC FPGA 数据手册DS00004750是封装选项、存储器容量、硬 IP 清单与电气特性的首选顶层参考SmartFusion2 与 IGLOO2 编程用户指南UG0451是 flash 编程、器件配置流程、启动/编程模式与调试相关设置的最佳参考。在仓库内部继续深入阅读的路径建议如下SoC 级外设描述dts/arm/microchip/smartfusion2/m2s010.dtsiSoC 早期初始化与软复位释放逻辑soc/microchip/smartfusion2/m2s010/soc.cSmartFusion2 时钟控制驱动drivers/clock_control/clock_control_smartfusion2.c板级默认配置boards/microchip/m2s010_mkr_kit/m2s010_mkr_kit_m2s010_defconfig板级 devicetreeboards/microchip/m2s010_mkr_kit/m2s010_mkr_kit_m2s010.dtsOpenOCD 烧录/调试配置boards/microchip/m2s010_mkr_kit/support/openocd.cfg总结M2S010 MKR Kit 的 Zephyr 移植呈现出FPGA 硬件设计定时钟、Zephyr 只做描述与消费的清晰分工时钟频率由 MSS/Libero 硬件设计决定devicetree 与BUILD_ASSERT从编译期保证软件描述与硬件一致烧录调试链路通过 CMSIS-DAP OpenOCD 的 SWD 通路完成当前已验证的 UARTns16550与 GPIO 构成了最小可用的控制台与 LED 开发环境而 SPI、I2C、PDMA、定时器、看门狗、CAN、RTC 以及原理图中暴露的 AT25SF161、LTR-329ALS、VSC8541 等外设则为后续驱动的增量移植预留了完整的地图。【免费下载链接】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),仅供参考
返回列表