多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Zephyr 在 NXP MIMXRT685-EVK 上的开发指南:CM33 主核、HiFi 4 DSP 与音频方案全解析

Zephyr 在 NXP MIMXRT685-EVK 上的开发指南:CM33 主核、HiFi 4 DSP 与音频方案全解析 操作系统嵌入式RTOS物联网【免费下载链接】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点击查看免费下载MIMXRT685-EVK 是 NXP 面向 32 位沉浸式音频与语音用户界面场景推出的 crossover MCU 评估板搭载 Cortex-M33 主核与 Cadence Tensilica HiFi 4 音频 DSP 双核架构。本文以 Zephyr 仓库中 boards/nxp/mimxrt685_evk/doc/index.rst 为骨架结合板级源码DTS、Kconfig、pinctrl、init.c与开发实践系统讲解该板卡的硬件资源、引脚功能、Zephyr 支持特性、烧录调试流程以及 HiFi 4 DSP 双核开发的完整方案。读完本文你将能够独立完成 mimxrt685_evk 上 CM33 应用与 HiFi 4 DSP 工程的构建、烧录、调试并理解其音频子系统的底层配置逻辑。NXP MIMXRT685-EVK 开发板实物板载 Cortex-M33 主核与 HiFi 4 音频 DSP、Octal SPI Flash、PSRAM、SD 卡槽及丰富音频外设。板卡概览面向语音交互的 crossover MCUi.MX RT600 是专为 32 位沉浸式音频播放与语音用户界面VUI应用设计的 crossover MCU 家族。它将高性能 Cadence Tensilica HiFi 4 音频 DSP 与新一代 Cortex-M33 核结合为语音辅助端节点提供了安全、低功耗的嵌入式处理平台。芯片内部提供最高 4.5 MB 片上 SRAM并通过多个高带宽接口如带实时解密引擎的 Octal/Quad SPI 接口访问片外 Flash。MIMXRT685-EVK 的完整硬件配置如下主控MIMXRT685SFVKB Cortex-M33300 MHz128 KB TCM核处理器配 Cadence Xtensa HiFi4 DSP调试板载高速 USB Link2 调试探针支持 CMSIS-DAP 协议仅支持 Cortex M33 调试连接高速 USB 端口micro A/B 连接器支持主机或设备功能UART、I2C、SPI 端口桥接到板载调试探针存储512 MB Macronix Octal SPI Flash1.8 V 工作电压4.5 MB Apmemory PSRAM全尺寸 SD 卡槽SDIO电源NXP PCA9420UK PMIC人机接口用户 LED、复位键与用户按键扩展Arduino 与 PMod/Host 扩展连接器传感器NXP FXOS8700CQ 加速度计音频立体声音频编解码器line in/out 与驻极体麦克风双路 NXP TFA9894 数字功放可选外部 5V 供电驱动高功率扬声器支持通过 12-pin 排针接入最多八路板载数字麦克风板载两路 DMIC官方参考文档i.MX RT685 Datasheet/Reference Manual、MIMXRT685-EVK User Guide/Schematics 等可访问 NXP 官网获取这里不再赘述。Zephyr 支持特性与板级工程结构NXP 将 MIMXRT685-EVK 视为 i.MX RT6xx 系列 MCU 的 superset 板卡并以此板卡作为 Zephyr Full Platform Support 的焦点优先为其使能新的 Zephyr 特性从而带动整个 RT6xx 家族。与之非常相似的姊妹板卡是mimxrt595_evk该板可能已支持一些可复用到 mimxrt685_evk 的额外特性。板卡支持特性可通过zephyr:board-supported-hw指令自动生成对应 board.yml 声明socs: mimxrt685s。从 Zephyr 仓库中的板级源码可以确认的实际支持情况包括板级工程boards/nxp/mimxrt685_evk/ 下同时提供 CM33 与 HiFi 4 两套目标mimxrt685_evk/mimxrt685s/cm33基于 mimxrt685_evk_mimxrt685s_cm33.dts 与同名 defconfigmimxrt685_evk/mimxrt685s/hifi4基于 mimxrt685_evk_mimxrt685s_hifi4.dts 与同名 defconfigSoC 选择Kconfig.mimxrt685_evk 通过SOC_PART_NUMBER_MIMXRT685SFVKB、SOC_MIMXRT685S_CM33、SOC_MIMXRT685S_HIFI4完成板级到 SoC 的绑定。CM33 默认配置mimxrt685_evk_mimxrt685s_cm33_defconfig启用 Console/UART 串口、中断驱动 UART、GPIO并默认开启 TrustZone-MCONFIG_TRUSTED_EXECUTION_SECUREy、ARM MPU 与硬件栈保护。默认时钟Kconfig.defconfig 配置外部晶振XTAL_SYS_CLK_HZ24000000、SYSOSC_SETTLING_US260若未使用 MCUboot 则自动使能NXP_IMXRT_BOOT_HEADER。设备树别名CM33 DTS 中定义sw0/sw1、led0~led2、usart-0、pwm-0、watchdog0、accel0/magn0、sdhc0、dmic0、mbox等标准别名方便应用直接引用。连接与 IO引脚功能对照表MIMXRT685 SoC 通过 IOCON 寄存器配置引脚功能。板级引脚复用pinmux由 mimxrt685_evk-pinctrl.dtsi 统一声明该文件由gen_board_pinctrl.py从 NXP 的 MIMXRT685-EVK.mex 工程生成引脚功能映射如下引脚功能用途PIO0_2USARTUSART RXPIO0_1USARTUSART TXPIO0_14GPIOGREEN LEDPIO1_1GPIOSW0PIO0_17I2CI2C SDAPIO0_18I2CI2C SCLPIO1_5GPIOFXOS8700 TRIGGERPIO1_5SPISPI MOSIPIO1_4SPISPI MISOPIO1_3SPISPI SCKPIO1_6SPISPI SSELPIO0_23I2SI2S DATAOUTPIO0_22I2SI2S TX WSPIO0_21I2SI2S TX SCKPIO0_9I2SI2S DATAINPIO0_29USARTUSART TXPIO0_30USARTUSART RXPIO1_11FLEXSPI0B_DATA0OctalSPI FlashPIO1_12FLEXSPI0B_DATA1OctalSPI FlashPIO1_13FLEXSPI0B_DATA2OctalSPI FlashPIO1_14FLEXSPI0B_DATA3OctalSPI FlashPIO1_29FLEXSPI0B_SCLKOctalSPI FlashPIO2_12PIO2_12OctalSPI FlashPIO2_17FLEXSPI0B_DATA4OctalSPI FlashPIO2_18FLEXSPI0B_DATA5OctalSPI FlashPIO2_19FLEXSPI0B_SS0_NOctalSPI FlashPIO2_22FLEXSPI0B_DATA6OctalSPI FlashPIO2_23FLEXSPI0B_DATA7OctalSPI FlashPIO0_27SCT0_OUT7PWMPIO1_30SD0_CLKSD 卡PIO1_31SD0_CMDSD 卡PIO2_0SD0_D0SD 卡PIO2_1SD0_D1SD 卡PIO2_2SD0_D2SD 卡PIO2_3SD0_D3SD 卡PIO2_4SD0_WR_PRTSD 卡PIO2_9SD0_CDSD 卡PIO2_10SD0_RSTSD 卡从 pinctrl 源码可以进一步看出板级外设的接线细节控制台 USARTflexcomm0FC0_RXD_SDA_MOSI_DATA_PIO0_2RX使能 input与FC0_TXD_SCL_MISO_WS_PIO0_1TX对应文档表中的 PIO0_2/PIO0_1。I2Cflexcomm2接 Arduino 与 FXOS8700FC2_CTS_SDA_SSEL0_PIO0_17/FC2_RTS_SCL_SSEL1_PIO0_18配置了bias-pull-up、开漏drive-open-drain与高驱动强度即表格中的 PIO0_17/PIO0_18。SPIflexcomm5接 ArduinoSCKPIO1_3、MISOPIO1_4、MOSIPIO1_5、SSEL0PIO1_6。I2S接收通道 flexcomm1DATAPIO0_9与发送通道 flexcomm3SCKPIO0_21、WSPIO0_22、DATAOUTPIO0_23外加 MCLKPIO1_10为音频编解码器提供双通道信号。Octal SPI FlashFLEXSPI0B 的 8 根数据线DATA0-7、SCLK、SS0_N 以及 GPIO PIO2_12 全部用于板载 Macronix Octal Flash。SCTimer PWMSCT0_OUT7_PIO0_27对应文档中的 PWM 引脚此外SCT0_OUT0_PIO0_14、SCT0_OUT6_PIO0_26/31分别映射绿色、蓝色、红色 PWM LED。SD 卡usdhc0CLKPIO1_30、CMDPIO1_31、D0-D3PIO2_0~3并含写保护PIO2_4、卡检测PIO2_9与复位PIO2_10信号。I3C 总线i3c0SCLPIO2_29、SDAPIO2_30、PURPIO2_31板上 WM8904 音频编解码器挂接在此总线地址 0x1a。DMICDMIC0_DATA2_3_PIO2_21、DMIC0_DATA0_1_PIO2_20、DMIC0_CLK0_1_PIO2_16用于板载数字麦克风。ADC 方面pinctrl 注释给出了完整的 ADC 通道对照表例如 PIO0_5/CH0A 对应 Schematic 的 ADC0_0Arduino J30.1、PIO0_6/CH0B 对应 ADC0_8J30.2、PIO0_19/CH2A 对应 ADC0_2J30.3、PIO0_20/CH2B 对应 ADC0_10J30.4等0A~5A 通道可与 0B~5B 配对构成差分输入。系统时钟与串口配置MIMXRT685-EVK 默认使用OS Event timeros_timer作为系统时钟源。这一配置体现在 CM33 设备树中os_timer { status okay; wakeup-source; };设备树中的注释明确说明若需切换到 SYSTICK 定时器只需将os_timer替换为systick即可为不同内核 tick 策略提供了灵活切换的入口。串口方面MIMXRT685 SoC 提供 8 个 FLEXCOMM 接口板级默认将flexcomm0配置为 USART 控制台其余接口按需分配给 I2C/SPI/I2S 等外设。控制台配置示例如下flexcomm0 { compatible nxp,lpc-usart; status okay; current-speed 115200; pinctrl-0 pinmux_flexcomm0_usart; pinctrl-names default; dmas dma0 0, dma0 1; dma-names rx, tx; };设备树中通过zephyr,console、zephyr,shell-uart、zephyr,uart-mcumgr均指向 flexcomm0串口同时承担控制台、shell 与 mcumgr 通道职责。CM33 与 HiFi 4 两个域共用该 FLEXCOMM0 控制台引脚PIO0_1/PIO0_2。烧录与调试三种调试探针方案烧录与调试应用前需要先配置调试探针。本板默认使用LPC-Link2板载 Link2 调试探针支持三种工作模式对应zephyr:board-supported-runners声明的 runner方案一LinkServer CMSIS-DAP默认安装 LinkServer 调试主机工具linkserver-debug-host-tools并确保其在 PATH 中。LinkServer 兼容板载调试器的默认 CMSIS-DAP 固件。确认跳线 JP17、JP18、JP19 均已安装默认已装。linkserver是本板的默认 runner直接执行west flash west debug方案二LPCLink2 板载 J-Link安装 J-Link 调试主机工具jlink-debug-host-tools并加入 PATH。安装跳线 JP17、JP18、JP19默认已装将 SWD 信号连接至板载调试电路。按 LPC-Link2 J-Link 板载调试探针的说明烧写 J-Link 固件并确保固件为最新版本。west flash -r jlink west debug -r jlink方案三外部 J-Link 探针安装 J-Link 调试主机工具并加入 PATH。移除跳线 J17、J18、J19默认已装以断开板载调试电路对 SWD 信号的影响。将 J-Link 探针连接到 J2 10-pin 调试排针。west flash -r jlink west debug -r jlink配置串口终端与控制台参数将 USB 线从 PC 连接到板卡 J16 接口使用任意串口终端minicom、putty 等并设置以下参数波特率115200数据位8校验位None停止位1这与设备树中 flexcomm0 的current-speed 115200一致。板载调试探针会把 UART/I2C/SPI 桥接为 USB 虚拟串口因此 J16 一根 USB 线即可同时完成供电、调试与串口通信。烧录与调试 Hello World 示例以hello_world示例演示完整流程默认使用 LinkServerwest build -b mimxrt685_evk/mimxrt685s/cm33 samples/hello_world west flash打开串口终端复位板卡按 RESET 按键终端应输出***** Booting Zephyr OS v1.14.0 ***** Hello World! mimxrt685_evk调试流程相同将flash目标替换为debugwest build -b mimxrt685_evk/mimxrt685s/cm33 samples/hello_world west debug在调试器中单步执行应用终端同样会出现上述输出示例中展示了zephyr-v2.3.0版本号输出实际输出取决于所用 Zephyr 版本。常见问题调试探针连接失败如果调试探针连接失败并出现以下错误通常是 Flash 中残留的镜像干扰所致Remote debugging using :2331 Remote communication error. Target disconnected.: Connection reset by peer. monitor command not supported by this target. monitor command not supported by this target. You cant do that when your target is exec (gdb) Could not connect to target. Please check power, connection and settings.修复步骤将 SW5 DIP 开关拨到ON-ON-ON阻止从 Flash 启动。按 SW3 复位。重新运行west debug或west flash烧录一个已知可用的 Zephyr 应用例如 Hello World。将 SW5 DIP 开关拨回ON-OFF-ON恢复从 Flash 启动。按 SW3 复位完成修复。HiFi 4 DSP 核双核音频开发实战i.MX RT685 中实例化的 Cadence HiFi 4 DSP 核在 Zephyr 中得到完整支持可搭配专有 Xtensa 工具链早期包中的xcc、较新版本中的xt-clang以及 Zephyr SDK 中的xtensa-nxp_rt600_adsp_zephyr-elfGCC 变体使用。构建 HiFi 4 工程GCCZephyr SDK无需特殊配置直接使用 SDK 自带的 Xtensa GCC 变体。专有 Xtensa 工具链需要设置XTENSA_CORE、XTENSA_TOOLCHAIN_PATH、TOOLCHAIN_VER按安装版本并将ZEPHYR_TOOLCHAIN_VARIANT设为xcc或xt-clang。构建命令目标板为mimxrt685_evk/mimxrt685s/hifi4west build -b mimxrt685_evk/mimxrt685s/hifi4 samples/hello_world从 mimxrt685_evk_mimxrt685s_hifi4_defconfig 可以看到 HiFi 4 域的差异化配置启用CONFIG_GEN_ISR_TABLES、关闭CONFIG_GEN_IRQ_VECTOR_TABLE、使用CONFIG_XTENSA_SMALL_VECTOR_TABLE_ENTRY小向量表项并关闭CONFIG_NXP_IMXRT_BOOT_HEADERDSP 核不需要 boot header。HiFi 4 域设备树 mimxrt685_evk_mimxrt685s_hifi4.dts 复用同一套 LED/按键/串口并使用独立的 DMA1 通道驱动 I2S 与 flexcomm0 控制台。调试 HiFi 4调试可直接使用 J-Link GDB Server配合xt-gdb专有 Xtensa 工具链或gdbZephyr SDK连接。若需与 CM33 核同步联调可使用xt-ocd守护进程实现 HiFi 4 与 CM33 的协同调试详见 NXP 的 RT600 Dual-Core Communication and Debugging 应用笔记。初始化与启动机制由于 HiFi 4 DSP 被定位为次级核secondary core必须显式初始化后才能工作。这一职责由实例化在 RT685 CM33 域中的nxp_rtxxx_adsp_ctrl驱动承担驱动初始化时会完成电源域与时钟设置足以支持调试器连接在 AMP非对称多处理系统中该驱动还负责代码加载与运行控制run control。在 CM33 域中hifi4/init.c 通过board_early_init_hook()完成音频相关初始化当 flexcomm1 与 flexcomm3 均以nxp,lpc-i2s兼容且启用 I2S 时代码会通过 SYSCTL1 的SHAREDCTRLSET/FCCTRLSEL寄存器配置 Flexcomm 之间的共享时钟/数据通路——既支持CONFIG_I2S_TEST_SEPARATE_DEVICES下的 I2S 内部回环测试也支持面向 WM8904 编解码器的双工音频配置为开发者在 DSP 侧调试 I2S 音频链路提供了硬件级的验证基础。深入板级资源Flash、PSRAM、SD 卡与 PMICOctal SPI Flash 与分区布局设备树中flexspi节点挂接 Macronix MX25UM51345G Octal SPI Flash64 MB工作于 OPI STR 模式Kconfig.defconfig中FLASH_MCUX_FLEXSPI_MX25UM51345G_OPI_STR为默认选项最高 SPI 频率 120 MHz。Flash 分区如下分区大小需与 4 KB 扇区对齐分区标签地址大小boot_partitionmcuboot0x00000000128 KBslot0_partitionimage-00x000200003 MBslot1_partitionimage-10x003200003 MBstorage_partitionstorage0x0062000058 MB - 128 KB该布局直接支持 MCUboot 双镜像A/B升级方案zephyr,code-partition指向 slot0。PSRAM、SD 卡与 PMIC4.5 MB PSRAM 提供大容量 RAM 扩展设备树注释提示若不使用 USB 并需要额外 MPU 区域可禁用sram1节点。SD 卡通过usdhc0接口工作设备树中为兼容 1.8V SD 卡设置了no-1-8-v禁用 1.8V 协商、pwr-gpiosPIO2_10与cd-gpiosPIO2_9卡检测。NXP PCA9420 PMIC 通过独立 I2Cpmic_i2c访问设备树默认使能 BUCK1/BUCK2 与 LDO1/LDO2 的regulator-boot-on。USB 与音频外设USB 高速设备控制器usbhs使能并通过usbphy配置校准参数tx-d-cal、tx-cal-45-dp-ohms等。音频链路完整WM8904 编解码器I3C 地址 0x1a提供 MCLK 时钟DMIC0/PDMC0/PDMC1 配置了增益与 DC 截止频率如gainshift 3、dc-cutoff 155hz支撑从数字麦克风采集到编解码输出的全链路音频处理这正是 HiFi 4 DSP 的核心应用场景。小结MIMXRT685-EVK 在 Zephyr 中同时具备 CM33 主核与 HiFi 4 DSP 双目标支持CM33 侧提供 TrustZone-M、MPU 硬件栈保护与完整外设串口、I2C/SPI/I2S、Octal SPI Flash、SD 卡、USB、ADC、音频编解码HiFi 4 侧通过nxp_rtxxx_adsp_ctrl实现次级核的电源/时钟初始化与 AMP 代码加载。默认 LinkServer runner 与west flash/west debug命令提供了开箱即用的开发体验遇到 Flash 残留导致的连接失败时可按 SW5 拨码方案修复。对语音交互、音频编解码与双核异构开发感兴趣的开发者可进一步参考姊妹板卡 mimxrt595_evk 与 NXP 官方文档将本文的板级配置与 Zephyr 驱动源码结合快速搭建完整的音频应用原型。赞分享操作系统嵌入式RTOS物联网【免费下载链接】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 在 NXP MIMXRT1160-EVK 上的双核开发指南架构、构建、烧录与调试Zephyr 在 NXP MIMXRT1160 EVK 上的双核开发指南架构、构建、烧录与调试 本篇技术指南以 Zephyr RTOS 中 mimxrt116操作系统嵌入式RTOS物联网Zephyr 在 NXP i.MX95 EVK 上的多核启动与调试实战指南Zephyr 在 NXP i.MX95 EVK 上的多核启动与调试实战指南 本文以 boards/nxp/imx95_evk/doc/index.rst htt操作系统嵌入式RTOS物联网Zephyr 下 NXP MIMXRT685-AUD-EVK 开发板支持指南硬件资源、板级配置与烧录调试实战Zephyr 下 NXP MIMXRT685 AUD EVK 开发板支持指南硬件资源、板级配置与烧录调试实战 MIMXRT685 AUD EVK 是 Zeph操作系统嵌入式RTOS物联网创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表