免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Zephyr 中 MAX32650EVKIT 开发板:硬件资源、设备树配置与烧录调试实战

Zephyr 中 MAX32650EVKIT 开发板:硬件资源、设备树配置与烧录调试实战 Zephyr 中 MAX32650EVKIT 开发板硬件资源、设备树配置与烧录调试实战【免费下载链接】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 仓库中max32650evkit开发板官方文档boards/adi/max32650evkit/doc/index.rst展开完整覆盖该评估套件的核心硬件规格、Zephyr 支持的外设特性、设备树DTS中的外设引脚与外部 HyperRAM 内存控制器配置以及通过 OpenOCD / J-Link 完成烧录与调试的完整流程。读完本文后你可以独立为该板编译、烧写并调试 Zephyr 固件并能读懂其 DTS 中各外设节点的使能与引脚复用逻辑。开发板概述面向电池供电应用的超低功耗平台MAX32650 评估套件EV kit是 Analog Devices 推出的平台用于评估 MAX32650 超低功耗、内存可扩展微控制器的能力该 MCU 专为高性能电池供电应用设计。Zephyr 对该板的移植运行在 MAX32650 MCU 之上板级元数据定义在 board.yml 中vendor 为adiboard 名称max32650evkit关联的 SoC 为max32650。MAX32650 MCU 核心规格官方文档列出的 MCU 关键能力如下这些规格直接决定了板上可用的外设与性能边界处理器120MHz Arm Cortex-M4带 FPUSmartDMA提供可编程数据处理的后台内存搬运振荡器120MHz 高速振荡器与 50MHz 低功耗振荡器7.3728MHz 低功耗振荡器32.768kHz 与 RTC 时钟需要外部晶振8kHz 常开超低功耗振荡器片上存储3MB 内部 Flash、1MB 内部 SRAM能效1.1V 下从 Cache 执行 104µW/MHz五种低功耗模式Active、Sleep、Background、Deep-Sleep、BackupI/O1.8V 与 3.3V I/O无需电平转换可扩展缓存式外部内存接口120MB/s HyperBus/Xccela DDR 接口用于外部 Flash/RAM 扩展的 SPIXF/SPIXR240Mbps SDHC/eMMC/SDIO/microSD 接口外设组合提供平台可扩展性16 通道 DMA三路 SPI 主60MHz/从48MHz一路 QuadSPI 主60MHz/从48MHz最多三路 4Mbaud UART带流控两路 1MHz I2C 主/从I2S 从接口四通道 7.8ksps、10-bit Delta-Sigma ADC带 PHY 的 USB 2.0 Hi-Speed 设备接口16 个脉冲列发生器六个 32-bit 定时器8mA 高驱动1-Wire 主接口Trust Protection UnitTPU安全单元模数算术加速器MAA、真随机数发生器TRNG安全非易失密钥存储SHA-256、AES-128/192/256内存解密完整性单元、安全启动 ROM板上外部器件除 MCU 外评估套件上连接了以下外部器件3.5 英寸 320 x 240 彩色 TFT 显示屏64MB HyperRAM64MB XIP Flash1MB XIP RAMUSB 2.0 Micro B 接口两个通用 LED 与两个通用按键这些器件在 Zephyr 设备树中均有对应节点下文会逐一对应。板级元数据与 Zephyr 支持特性Zephyr 的板级硬件清单文件 max32650evkit.yaml 声明了该板支持的 API 类别与存储参数这也是文档中.. zephyr:board-supported-hw::指令自动生成“Supported Features”表格的数据来源架构arm工具链zephyr、gnuarmemb支持的 APIgpio、serial、spi、i2c、dma、watchdog、counter、rtc_counter、usbd、memcram: 256、flash: 3072单位 KB即 256KB 内部 RAM 配额与 3MB 内部 Flash板级 Kconfig 定义在 Kconfig.max32650evkit其BOARD_MAX32650EVKIT选项select SOC_MAX32650把板与 SoC 配置绑定起来。默认内核配置 max32650evkit_defconfig 开启了以下功能# Enable MPU CONFIG_ARM_MPUy # Enable GPIO CONFIG_GPIOy # Console CONFIG_CONSOLEy CONFIG_UART_CONSOLEy # Enable UART CONFIG_SERIALy CONFIG_UART_INTERRUPT_DRIVENy即默认启用 ARM MPU、GPIO 驱动、UART 控制台中断驱动保证最基本的控制台交互与内存保护。设备树解析外设使能、引脚复用与外部内存控制器板级设备树 max32650evkit.dts 包含了 SoC 通用描述 dts/arm/adi/max32/max32650.dtsi 与引脚复用定义 max32650-pinctrl.dtsi并在板级文件中把所需外设从默认disabled状态使能。下面按功能分组说明。chosen 节点控制台与存储映射chosen { zephyr,console uart0; zephyr,shell-uart uart0; zephyr,sram sram4; zephyr,flash flash0; };控制台与 shell 均使用uart0默认 SRAM 使用sram4256KB 主存储区起始 0x20040000Flash 映射到flash0SoC 描述文件 max32650.dtsi 中将内部 Flash 配置为 3MBreg 0x10000000 DT_SIZE_M(3)擦除块大小 16384 字节片上 SRAM 则被划分为 sram0~sram6 共 7 个存储区合计 1MB32K 64K 32K 128K 256K 256K 256K。LED 与按键GPIO 引脚评估套件文档提到的“两个通用 LED 与两个按键”在设备树中定义为leds { compatible gpio-leds; led1: led_1 { gpios gpio2 25 GPIO_ACTIVE_HIGH; label Red LED; }; led2: led_2 { gpios gpio2 26 GPIO_ACTIVE_HIGH; label Green LED; }; }; buttons { compatible gpio-keys; pb1: pb1 { gpios gpio2 28 (GPIO_PULL_UP | GPIO_ACTIVE_LOW); label SW2; zephyr,code INPUT_KEY_0; }; pb2: pb2 { gpios gpio2 30 (GPIO_PULL_UP | GPIO_ACTIVE_LOW); label SW3; zephyr,code INPUT_KEY_1; }; }; aliases { led0 led1; led1 led2; watchdog0 wdt0; };红色 LED 接 gpio2 的 25 号脚、绿色 LED 接 26 号脚高电平点亮SW2/SW3 按键接 28/30 号脚内部上拉、低电平有效并通过zephyr,code映射为 input 子系统的INPUT_KEY_0/INPUT_KEY_1事件码。别名节点提供与官方示例如 blinky 使用led0及看门狗示例的兼容性。串口、I2C、SPI 与引脚复用板级 DTS 只使用了 UART0、I2C0 与 SPI2并通过pinctrl指定复用引脚uart0 { pinctrl-0 uart0_tx_p2_12 uart0_rx_p2_11; current-speed 115200; >hpb { pinctrl-0 hyp_cs0_p1_11 hyp_rwds_p1_14 hyp_d0_p1_12 hyp_d1_p1_15 hyp_d2_p1_19 hyp_d3_p1_20 hyp_d4_p1_13 hyp_d5_p1_16 hyp_d6_p1_18 hyp_d7_p1_21; pinctrl-names default; enable-emcc; status okay; mem0 { reg 0; base-address 0x60000000; device-type ADI_MAX32_HPB_DEV_TYPE_HYPER_RAM; /* HPB runs from the 60 MHz peripheral clock on MAX32650. * - CS high 2.5 cycles 41.7 ns * - CS setup/hold 1 cycle 16.7 ns */ read-cs-high ADI_MAX32_HPB_CS_HIGH_2_5; write-cs-high ADI_MAX32_HPB_CS_HIGH_2_5; read-cs-setup ADI_MAX32_HPB_CS_SETUP_HOLD_1; write-cs-setup ADI_MAX32_HPB_CS_SETUP_HOLD_1; read-cs-hold ADI_MAX32_HPB_CS_SETUP_HOLD_1; write-cs-hold ADI_MAX32_HPB_CS_SETUP_HOLD_1; latency-cycles ADI_MAX32_HPB_LAT_6; /* CR0 register at address 0x1000, default value is 0x8f2f * Change to 0x8f1f to reduce clock latency from 7 to 6 ... */ config-regs 0x1000; config-reg-vals 0x8f1f; }; };配置要点引脚CS0/RWDS/D0~D7 共 10 个数据与控制信号全部落在 P1 端口enable-emcc使能外部内存校准控制器时序参数HPB 运行在 MAX32650 的 60MHz 外设时钟上CS 高电平 2.5 个周期约 41.7ns、CS 建立/保持 1 个周期约 16.7ns这些数值直接由器件时序要求换算而来延迟latency-cycles设为 6 周期器件寄存器校准通过config-regs/config-reg-vals在 HyperRAM 的地址 0x1000 处写 CR0 配置寄存器将默认值 0x8f2f 改为 0x8f1f把时钟延迟从 7 周期降到 6 周期与latency-cycles保持一致设备类型ADI_MAX32_HPB_DEV_TYPE_HYPER_RAM宏定义见绑定头文件dts/bindings/memory-controller/adi-max32-hpb.yaml对应的 dt-bindings 目录 中的adi-max32-hpb.hDTS 根节点还额外声明了一块默认禁用的内存区供外部 SDRAM 场景使用sdram1: memory60000000 { compatible zephyr,memory-region, mmio-sram; reg 0x60000000 DT_SIZE_M(8); zephyr,memory-region SDRAM1; status disabled; };结合 max32650.dtsi 中clk_ipo时钟频率被配置为 120MHz高速内部振荡器、clk_iso为 50MHz低功耗内部振荡器的 SoC 时钟描述可以看出 Zephyr 在该 SoC 上完整接入了 MAX32650 的时钟体系。烧录FlashingMAX32650 通过外部调试探头连接 SWD 端口即可烧录。SWD 调试接口通过Cortex 10 针连接器 J3引出逻辑电平固定为 VDDIO1.8V。调试探头连接好主机后直接执行west flash命令即可将固件镜像写入 Flashwest flash默认调试器为 OpenOCD。该板也支持使用 Segger J-Link 配合 Segger 原生工具烧录——只需在west命令后追加--runner jlink覆盖默认 runnerJ-Link 需通过合适的转接板与线缆连接到标准的 2*5 针调试接口 J3。从 board.cmake 可以看到各 runner 的具体配置board_runner_args(jlink --deviceMAX32650 --reset-after-load) include(${ZEPHYR_BASE}/boards/common/openocd-adi-max32.boards.cmake) include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)J-Link 方式指定--deviceMAX32650并加载后复位--reset-after-loadOpenOCD 方式复用 ADI MAX32 系列公共配置 openocd-adi-max32.boards.cmake。从该文件可以看出Cortex-M4 目标默认使用 CMSIS-DAP 接口cmsis-dap.cfg与${CONFIG_SOC}.cfg即 max32650.cfg目标配置若板卡序列号可用会执行adapter serial $_ZEPHYR_BOARD_SERIAL绑定探头M4/M33 家族下额外执行allow_low_pwr_dbgMAX32660 除外因为该命令会导致部分板卡烧写后复位失败并注册max32xxx mass_erase 0作为擦除命令若用户通过MAX32_TARGET_CFG/MAX32_INTERFACE_CFG变量覆盖了默认配置则按自定义配置加载也就是说用任意 CMSIS-DAP 兼容的调试器接上 J3 即可使用默认流程烧写换 J-Link 时加--runner jlink即可两者在 board.cmake 中均已就绪。调试Debugging调试流程与烧录完全相同探头接 J3只需把west flash换成west debugwest debug进入调试会话后即可使用 GDB 或 west 调试交互命令进行断点、单步与寄存器检查。由于 OpenOCD 默认 runner 已带--target-handle_CHIPNAME.cpu调试目标会自动选中 Cortex-M4 核心。相关参考板级文档入口boards/adi/max32650evkit/doc/index.rst板级设备树boards/adi/max32650evkit/max32650evkit.dtsSoC 描述文件dts/arm/adi/max32/max32650.dtsi板级元数据boards/adi/max32650evkit/max32650evkit.yaml烧录/调试 runner 配置boards/adi/max32650evkit/board.cmake 与 boards/common/openocd-adi-max32.boards.cmakeADI 同系列开发板max32650evkit 之外的型号文档位于 boards/adi 目录下例如 max32655/max32657/max32666 等 EV 套件小结MAX32650EVKIT 是 Zephyr 支持的 ADI MAX32 系列开发板之一120MHz Cortex-M4、3MB Flash、1MB 内部 SRAM外加 HyperBus 挂载的 64MB HyperRAM 提供了“内部小存储 外部大容量可扩展存储”的典型电池供电架构。Zephyr 侧通过板级 DTS 使能 UART/I2C/SPI/DMA/GPIO/USB/看门狗/RTC 等外设用 OpenOCDCMSIS-DAP或 J-Link 两个 runner 完成烧录与调试默认配置已启用 MPU 与 UART 控制台开箱即可编译运行 Zephyr 应用。【免费下载链接】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),仅供参考
返回列表