公司动态
嵌入式开发基石:DM355引脚复用、复位与启动模式配置详解
1. 项目概述与核心价值在嵌入式系统尤其是像TI DM355这类高度集成的数字媒体SoC片上系统开发中硬件工程师和底层驱动开发者绕不开三个紧密耦合的核心议题引脚复用、复位机制与启动模式配置。这听起来像是枯燥的芯片手册章节但恰恰是决定你的板子能否“亮起来”、系统能否稳定运行的基石。很多项目在调试阶段卡住问题往往不是出在复杂的应用算法上而是源于对这些底层硬件机制的理解偏差或配置疏忽。引脚复用Pin Muxing绝非简单的“一根线多用”。在DM355上它是一项由系统控制模块精密管理的资源仲裁策略。芯片有限的物理引脚需要承载视频编解码、外部存储器访问、多种串行通信、通用IO等数十种功能如何让它们和平共处、按需切换就是引脚复用寄存器要解决的问题。理解其映射表是进行PCB布线和驱动开发的前提。复位Reset则像是系统的“重启按钮”但DM355给了你好几种按法有的能彻底清空一切冷启动有的则像应用崩溃后的“热重启”保留部分状态。不同的复位源如上电、看门狗、软件触发和复位类型对芯片内部各模块的影响范围截然不同。混淆它们可能会导致外设状态异常、DDR数据丢失等难以排查的软硬件交互问题。而启动模式Boot Mode配置则是系统上电后执行的第一段“引导程序”。DM355通过几根硬件配置引脚BTSEL[1:0], AECFG[3:0]的状态在复位瞬间被锁存从而决定CPU是从内部的ROM引导还是直接从外部的AEMIF存储器启动并进一步决定以何种方式NAND, MMC/SD, UART加载用户程序。这个配置错了后续的一切软件工作都是空中楼阁。本文将结合DM355的数据手册SPRS575和实际工程经验深入拆解这三者的技术细节、交互关系与实操要点。无论你是正在评估DM355平台还是正在调试一块新设计的板卡理解这些内容都能帮你避开深坑建立起对芯片行为的清晰预期。2. 引脚复用Pin Multiplexing深度解析与配置实战2.1 引脚复用的核心逻辑与寄存器架构DM355的引脚复用并非全局统一管理而是通过系统控制模块System Control Module中一组专用的寄存器进行分区控制。这种设计体现了模块化的思想将功能相近的引脚分组管理降低了配置的复杂性。主要包含以下几个寄存器PinMux0寄存器 专门负责视频输入Video In相关信号的复用。例如摄像头传感器接口的数据线、行场同步信号等可能与GPIO或其他功能复用。PinMux1寄存器 控制视频输出Video Out信号如LCD显示接口的数据线、时钟、使能等信号。PinMux2寄存器 这是异步外部存储器接口AEMIF相关引脚复用的核心。它决定了EMIF的地址线、数据线、控制线是作为存储器接口功能还是作为普通的GPIO来使用。这在启动配置和外部存储扩展时至关重要。PinMux3寄存器 管理通用输入输出GIO信号的复用。很多GPIO引脚都兼具第二甚至第三功能如UART、SPI、I2C等都需要通过此寄存器切换。PinMux4寄存器 控制SPI和MMC/SD0接口的引脚复用。配置的本质 每个复用引脚在寄存器中都有对应的位域通常2-3个比特。向这些位域写入特定的值芯片内部的模拟开关和数字路径就会被切换将物理引脚连接到目标功能模块的电路上。上电复位后这些寄存器会处于一个默认状态这个默认状态通常由芯片的固件Boot ROM根据硬件配置引脚AECFG, BTSEL的状态进行初步设置但后续完全可由软件重新配置。实操心得配置时机引脚复用寄存器的配置必须在对应外设模块被使能和初始化之前完成。一个常见的错误顺序是先初始化UART驱动再配置引脚复用为UART模式结果发现串口无法收发数据。正确的流程是系统启动早期在Bootloader或内核非常初期的阶段就根据板级硬件设计一次性或分模块地完成所有引脚的复用配置。在Linux系统中这通常在设备树Device Tree的pinctrl节点中描述由内核的pinctrl子系统在驱动探测前自动应用。2.2 AEMIF引脚复用详解以Table 3-17为例你提供的资料中的Table 3-17是理解DM355引脚复用特别是启动相关配置的关键。它描述了AECFG[3:0]这4位配置引脚如何影响AEMIF相关引脚的初始功能。我们将其翻译成更易理解的逻辑AECFG[3:0]是一个4位二进制码在复位上升沿被锁存。它决定了AEMIF接口的引脚在复位后的默认角色主要为了适配不同的外部存储器类型。AECFG[3:0]配置模式EM_A[14], EM_BA[0]EM_BA[1]EM_A[0:13]EM_D[8:15]GPIO[46:53]1101NAND Flash (8位)GPIO[54]GPIO[55]EM_A[0:13]EM_D[8:15]GPIO[46:53]1100(保留或未定义)GPIO[54]EM_BA[1]EM_A[0:13]EM_D[8:15]GPIO[46:53]1010(保留或未定义)EM_A[14]EM_BA[1]EM_A[0:13]EM_D[8:15]GPIO[46:53]10008-bit SRAMEM_A[14]EM_BA[1]EM_A[0:13]EM_D[8:15]GPIO[46:53]001016-bit SRAM/OneNANDEM_A[14]EM_BA[1]EM_A[0:13]EM_D[8:15]GPIO[46:53]0000(保留或未定义)EM_A[14]EM_BA[1]EM_A[0:13]EM_D[8:15]GPIO[46:53]关键解读与设计影响NAND模式1101的特殊性 当选择从NAND Flash启动时BTSEL[1:0]00AECFG通常需设置为1101。此时EM_A[14]和EM_BA[0]这两个引脚被复用为GPIO[54]和GPIO[55]而EM_BA[1]引脚未使用表中未列出通常也为GPIO。这是因为标准的8位NAND Flash接口不需要额外的地址线A14和Bank地址线BA0, BA1这些引脚可以节省出来用作系统状态指示如连接LED或其他功能。而EM_D[8:15]高8位数据线在8位NAND模式下是不需要的所以对应的GPIO[46:53]也得以释放。SRAM/OneNAND模式 当使用16位宽度的SRAM或OneNAND时需要完整的16位数据总线因此EM_D[8:15]被用作数据线GPIO[46:53]功能被占用。同时EM_A[14]作为地址线第14位被使用。硬件设计必须匹配 这个表直接指导你的PCB布线。如果你计划使用NAND启动那么硬件上可以将EM_A[14], EM_BA[0], EM_BA[1]以及GPIO[46:53]连接到其他器件如LED、按键、其他外设并在软件中将其配置为GPIO。反之如果你需要连接16位SRAM那么这些引脚就必须留给AEMIF不能另作他用。软件后续可覆盖 复位时的AECFG配置只是初始状态。Boot ROM或你的Bootloader在运行时完全可以通过写PinMux2寄存器来重新配置这些引脚的功能。例如即使硬件上配置为NAND模式启动完成后你也可以在软件中将GPIO[54]重新配置为EM_A[14]来扩展地址空间如果硬件也连接了的话。但硬件连接是前提软件不能无中生有。2.3 引脚复用配置的软件操作示例假设我们在Bootloader中需要将GPIO[20]和GPIO[21]配置为UART0的TX和RX功能假设其复用控制位在PinMux3寄存器中。首先我们需要查阅DM355的数据手册找到PinMux3寄存器的内存映射地址例如0x01C4 0000以及GPIO[20]和GPIO[21]对应的控制位域例如每2个比特控制一个引脚00GPIO01功能A10功能B。// 示例代码地址和位域需以实际手册为准 #define PINMUX3_BASE (volatile unsigned int *)0x01C40000 #define PINMUX3_GPIO20_21_MASK (0x3 10) // 假设GPIO20控制位在[11:10]GPIO21在[13:12] #define PINMUX3_UART0_FUNC (0x1 10) // 假设01代表UART0功能 void configure_pinmux_for_uart0(void) { volatile unsigned int *pinmux3_reg PINMUX3_BASE; unsigned int reg_val; // 1. 读取当前寄存器值 reg_val *pinmux3_reg; // 2. 清除GPIO20和GPIO21的原有配置位 reg_val ~PINMUX3_GPIO20_21_MASK; // 3. 设置GPIO20和GPIO21为UART0功能 // 注意这里需要为两个引脚都设置假设它们连续且配置值相同 reg_val | PINMUX3_UART0_FUNC; // 设置GPIO20 reg_val | (PINMUX3_UART0_FUNC 2); // 设置GPIO21左移2位到下一个控制域 // 4. 写回寄存器 *pinmux3_reg reg_val; // 5. 可选添加内存屏障确保配置生效后再操作外设 __asm__ volatile( ::: memory); }注意事项配置的原子性与顺序在实际操作中特别是像AEMIF这种涉及多个引脚、配置复杂的场景建议将整个寄存器的目标值计算好一次性写入而不是多次读-修改-写操作。多次操作在极端情况下如被中断打断可能导致引脚状态出现瞬时冲突虽然概率低但在对稳定性要求极高的场合需要避免。另外配置完引脚复用后通常还需要配置这些引脚的上/下拉电阻、驱动强度等IO属性这些在另外的寄存器中控制。3. 复位Reset机制种类、源头与影响分析复位是让系统回到一个已知、确定状态的机制。DM355的复位系统设计精细区分了不同严重程度和影响的复位类型这对于系统故障恢复、低功耗管理和调试至关重要。3.1 五种复位类型详解根据你提供的Table 3-18DM355支持五种复位我们可以将其理解为五个不同级别的“重启”复位类型触发源 (Initiator)影响范围 (Effect)类比与使用场景POR (上电复位)RESET引脚拉低且TRST引脚拉低。完全复位冷复位。复位所有模块包括存储器如内部RAM内容丢失和仿真逻辑。彻底关机再开机。适用于首次上电或需要完全清除芯片所有状态的场景。TRST测试复位参与确保了在仿真环境下也能彻底复位。Warm Reset (热复位)RESET引脚拉低且TRST引脚拉高通常由ARM仿真器发起。复位所有模块包括存储器除了ARM仿真逻辑。系统级重启但保持调试连接。当系统跑飞但需要通过仿真器JTAG保持连接进行调试时使用。内存内容会丢失。Max Reset (最大复位)ARM仿真器或看门狗定时器WDT。效果与Warm Reset相同。看门狗超时或主动触发。这是最常见的系统恢复机制。当软件死锁或异常时看门狗超时产生此复位让系统重启。仿真器也可主动发起。System Reset (系统复位)ARM仿真器。复位所有模块除了存储器和ARM仿真逻辑。它是一种软复位保持内存内容不影响时钟和电源状态。应用复位。想象成重启操作系统但不断电。当应用程序崩溃但希望保留内存中的数据如未保存的缓存进行问题分析时可使用此复位。Module Reset (模块复位)ARM软件写特定寄存器。复位特定的某个外设模块。外设重启。某个外设如UART、SPI工作异常时软件可以单独复位它而无需重启整个系统对系统其他部分无影响。3.2 复位源与系统行为外部复位引脚RESET 这是最基础的硬件复位。通常连接到一个电源监控芯片如TPS3307或手动复位按钮。当电源不稳定或按钮按下时产生低电平脉冲触发POR或Warm Reset取决于TRST状态。看门狗定时器WDT 一个至关重要的可靠性设计。软件需要定期“喂狗”清零WDT计数器。如果软件因死循环、任务阻塞等原因未能及时喂狗WDT超时就会产生一个Max Reset信号强制系统重启从软件故障中恢复。仿真器ARM Emulator 通过JTAG接口调试工具可以发起Warm Reset、Max Reset或System Reset方便开发者进行调试。软件复位 ARM核可以通过写系统控制模块中的寄存器来触发对自身或其他模块的复位。Module Reset就是典型的软件复位。复位后的默认状态 无论是POR、Warm Reset还是Max Reset之后芯片都会进入一个默认的硬件配置状态。这个状态包括PLL被旁路Bypass且关闭芯片直接使用外部输入的参考时钟如24MHz晶振。时钟系统处于最低速状态。绝大多数外设模块处于关闭或同步复位SyncRst状态。设备配置引脚BTSEL, AECFG的状态被锁存用于决定启动模式和AEMIF初始配置。随后Boot ROM代码开始执行并根据锁存的配置进一步初始化系统。实操心得复位电路设计与调试RESET引脚处理 必须连接一个可靠的上拉电阻通常10kΩ到I/O电源VDD_3V3。复位信号应干净无毛刺复位低电平脉冲宽度需满足芯片手册要求通常几十毫秒。使用专业的复位管理芯片比简单的RC电路更可靠它能监控核心电压并在其异常时果断复位。TRST引脚 在非JTAG调试场合必须通过一个下拉电阻如4.7kΩ可靠接地。如果悬空其状态不确定可能导致意外的Warm Reset行为而非期望的POR。看门狗的使用 在量产软件中务必启用看门狗。喂狗操作应放在主循环或关键任务中但要避免在长时间关中断的代码段内喂狗。可以考虑使用独立的“看门狗任务”来监控其他关键任务的心跳。调试阶段的复位 当通过JTAG连接芯片进行调试时仿真器的复位操作如点击IDE中的“Reset”通常是发起System Reset或Warm Reset。这可能会清除你正在查看的内存变量Warm Reset会。如果需要保留内存现场分析问题应使用调试器的“Halt”暂停CPU而非复位。4. 启动模式Boot Mode配置与流程全解析启动配置是DM355上电后执行的第一段“剧本”它决定了CPU从哪里、以何种方式获取并执行最初的代码。配置错误后续所有工作都无法开展。4.1 配置引脚BTSEL[1:0]与AECFG[3:0]这两个配置信息在复位信号的上升沿被芯片内部锁存之后这些引脚就会恢复为AEMIF功能EM_A[8:13]不能再用于改变启动模式。BTSEL[1:0] - 启动选择00:从ROM启动NAND模式。强制跳转到内部ROM起始地址0x00008000执行。ROM中的引导加载程序RBL会读取BOOTCFG寄存器可能由RBL根据其他条件设置然后尝试从NAND Flash加载用户引导程序UBL。01:从AEMIF启动。强制跳转到AEMIF存储空间起始地址0x02000000执行。注意这要求外部存储器如OneNAND必须连接在AEMIF的CE0片选空间并且该存储器在复位后就能被AEMIF以默认低速时序访问。AEMIF不支持直接从NAND Flash执行代码XIP所以此模式主要用于Nor Flash或OneNAND。10:从ROM启动MMC/SD模式。跳转到内部ROMRBL尝试从MMC/SD0接口加载UBL。11:从ROM启动UART模式。跳转到内部ROMRBL尝试从UART0接口加载UBL。AECFG[3:0] - AEMIF引脚配置此配置仅在BTSEL[1:0]为00NAND启动或01AEMIF启动时起作用。它决定了AEMIF相关引脚在复位后的初始功能如前文Table 3-17所示主要是为了适配NAND Flash或SRAM/OneNAND的硬件连接差异。例如当BTSEL00且AECFG1101时硬件认为连接的是8位NAND并相应地将EM_A[14], EM_BA[0]等引脚初始化为GPIO。4.2 详细启动流程与RBL行为以最常用的NAND Flash启动BTSEL00为例详细流程如下硬件动作 复位释放后ARM核的PC指针被强制设置为0x00008000内部ROM起始地址。RBL执行 ROM Boot Loader开始运行。它首先进行一些最基本的芯片初始化可能包括关闭看门狗、设置堆栈。读取BOOTCFG RBL会读取一个内部寄存器BOOTCFG这个寄存器可能由芯片出厂固化或由RBL根据GPIO状态等条件动态设置以最终确定从NAND、MMC/SD还是UART加载。但通常BTSEL引脚已经指明了主要路径。尝试NAND引导RBL根据AECFG配置初始化AEMIF控制器为NAND Flash访问模式8位宽使用EM_CE0。它会在NAND Flash的第一个块Block 0中寻找有效的UBL镜像。UBL通常有一个特定的“Magic Number”幻数头部。RBL支持ECC错误校验与纠正使用4位ECC算法。它尝试从NAND加载最多30KB的UBL代码到ARM的内部RAMAIM地址通常为0x00000000开始。如果加载成功且校验通过RBL会跳转到AIM中的UBL入口点并将控制权交给UBL。备用引导流程 如果NAND引导失败例如找不到有效的Magic NumberRBL会按照预设的备用顺序尝试其他方式。根据你提供的流程图Figure 3-6顺序是NAND - MMC/SD - USB - (重试USB) - UART - (重试UART)。在尝试备用引导时RBL会通过GPIO61引脚以不同的频率4Hz或2Hz翻转电平来指示状态这可以连接一个LED用于调试。UBL及后续 UBL是用户编写的第二级引导程序它负责更复杂的硬件初始化如设置PLL提高时钟速度、初始化DDR2 SDRAM然后从NAND、SD卡等介质加载更大的应用程序如DSP固件、Linux内核到DDR中并最终跳转执行。AEMIF启动BTSEL01流程则更直接硬件直接将PC指向0x02000000AEMIF CE0空间CPU开始从外部存储器取指执行。这就要求在AEMIF的CE0上连接支持XIP的存储器如Nor Flash或OneNAND并且该存储器中的代码必须自己负责初始化AEMIF控制器因为复位后AEMIF时序极慢约68kHz然后进行后续的系统初始化。4.3 启动模式配置的硬件设计与软件考量硬件设计BTSEL[1:0]引脚 必须通过电阻上拉或下拉到固定的电平VDD或VSS以确保复位时状态稳定。通常使用10kΩ电阻。例如要配置为NAND启动00就将两个引脚都通过电阻下拉到地。AECFG[3:0]引脚 同样需要上拉/下拉电阻配置。其电平必须与PCB上实际连接的存储器类型严格匹配。如果板上焊的是8位NAND就必须配置为1101。GPIO61Boot Status 强烈建议在PCB上将此引脚连接到一个LED串联限流电阻。这是一个极其宝贵的调试手段。上电后LED的状态常亮、常灭、闪烁直接反映了RBL的执行阶段。存储介质连接NAND Flash 必须连接到AEMIF的CE0。数据宽度为8位使用EM_D[0:7]。注意AECFG配置对EM_A[14]和EM_BA[0]引脚的影响如果硬件上这些引脚连接了NAND的R/B#或WP#等信号就需要根据AECFG配置在软件中重新映射。OneNAND/SRAM 也必须连接到CE0数据宽度为16位使用EM_D[0:15]。软件UBL/Bootloader考量时序初始化 RBL使用最保守的AEMIF时序约68kHz。你的UBL在开始与外部存储器高速通信如从NAND加载内核到DDR之前必须根据所用存储器的数据手册重新编程AEMIF的等待状态寄存器设置正确的建立、保持和选通时间以提高访问速度。引脚复用重配置 如前所述根据硬件设计你可能需要在UBL中重新配置PinMux寄存器。例如在NAND启动模式下如果硬件将EM_A[14]连接到了一个状态LED你可以在UBL中将其配置为GPIO输出并控制其亮灭。Magic Number与镜像结构 你的UBL二进制文件必须在固定位置通常是开头包含RBL能识别的Magic Number如0xA1ACED00具体值需查手册。同时UBL的大小不能超过30KB32KB IRAM减去RBL栈空间。常见问题与排查技巧实录问题板上电后毫无反应GPIO61指示灯不亮。排查首先检查电源、时钟、复位电路是否正常。用示波器测量核心电压CVDD, 1.3V、IO电压VDD, 3.3V、复位引脚RESET应为高电平、晶振输出24MHz是否起振。确认BTSEL[1:0]和AECFG[3:0]的上拉/下拉电阻焊接正确阻值符合设计10kΩ电平在复位瞬间稳定。检查TRST引脚是否已可靠下拉如果不用JTAG。如果以上均正常可能是Boot ROM损坏罕见或芯片未正确初始化检查电源时序。问题GPIO61 LED闪烁几次后常灭系统未启动。排查闪烁模式是关键。根据文档4Hz闪烁表示在尝试MMC/SD或USB引导2Hz闪烁表示在尝试UART引导。常灭表示RBL执行完毕无论成功与否。如果闪烁后常灭但系统没运行说明RBL尝试了备用引导但都失败了最后可能跳转到了一个无效地址或死循环。检查主引导介质如果配置为NAND启动检查NAND Flash是否焊接良好CE0片选信号是否正确连接。用编程器确认NAND的Block 0前几个扇区是否烧写了正确的、带有有效Magic Number的UBL镜像。检查UBL镜像确认UBL镜像大小未超限Magic Number正确并且编译链接的入口地址是ARM内部RAM的地址如0x00000000。问题系统能从NAND启动UBL但UBL在初始化DDR或切换高速时钟时死机。排查这通常是UBL代码问题或硬件参数不匹配。重点检查PLL配置 计算并设置的倍频、分频系数是否正确PLL锁定是否通过查询锁定状态位确认DDR2/mDDR初始化序列 是否严格按照存储器数据手册和DM355的DDR控制器要求按顺序、有时延要求地配置了所有模式寄存器MR和控制器寄存器时序参数tRCD, tRP, tRAS, tRFC等是否根据芯片型号和时钟速度正确计算并设置电源稳定性 DDR电源VDD_DDR, 1.8V是否干净纹波是否在允许范围内上电时序是否符合要求使用仿真器JTAG连接在UBL初始化DDR和PLL的代码前后设置断点单步调试查看寄存器配置值并测量相关时钟和电源信号。问题想切换启动模式如从NAND改为SD卡但修改BTSEL电阻后无效。排查确认是在完全断电包括所有电源轨后进行的修改。仅软件复位或热复位不会重新采样BTSEL引脚。检查修改后的电阻焊接确保与目标电平VDD或VSS连接可靠无虚焊。使用万用表在板上电瞬间或按住复位键时测量BTSEL引脚电压确认其为目标电平。5. 复位与启动后的默认模块状态及电源管理初探理解复位后芯片的默认状态对于编写正确的初始化代码至关重要。根据你提供的Table 3-20我们可以总结出一些规律AlwaysOn电源域 表中所有模块的电源域都是“AlwaysOn”这意味着在DM355上电源管理主要是通过时钟门控关闭模块时钟和睡眠模式来实现而非完全关闭模块电源。模块状态Module StateSyncRst 大多数模块在复位后处于“同步复位”状态。这意味着该模块的时钟可能还在运行但其内部逻辑被保持在复位状态需要软件将其使能Enable后才能工作。Enable 少数关键模块在复位后根据BTSEL配置直接处于“使能”状态。例如EDMA (CC, TC0, TC1) 在NAND、OneNAND、UART启动模式下是Enable的说明DMA控制器在启动过程中可能被RBL使用例如从NAND加载数据到RAM。AEMIF 在NAND、OneNAND、UART启动模式下是Enable的因为需要访问外部存储器或配置接口。UART0 仅在UART启动模式BTSEL11下为Enable其他模式下为SyncRst。TIMER0 在所有启动模式下都是Enable的因为它被RBL用于产生GPIO61的闪烁定时。ARM、System Module、BUS 这些核心模块始终是Enable的。电源管理Power Management DM355的电源管理主要通过以下方式降低功耗时钟管理 这是最主要的手段。每个模块都有独立的时钟使能位不需要时可以关闭其时钟消除动态功耗。PLL在不需要高速时钟时也可以关闭或进入旁路模式。ARM睡眠模式 ARM核支持Wait-for-InterruptWFI指令进入低功耗状态。系统睡眠模式 如Deep Sleep模式可以停止所有设备时钟并关闭内部振荡器将动态功耗降至最低同时保持寄存器和内存内容。I/O管理 可以关闭不用的USB PHY、视频DAC等模拟电路的电源。DDR管理 可以将外部DDR存储器置于自刷新Self-Refresh或掉电Power Down状态。在编写低功耗应用时需要仔细规划各模块的工作时段在不使用时及时关闭其时钟并在系统空闲时让ARM进入睡眠模式甚至让整个芯片进入Deep Sleep。同时要处理好唤醒源如定时器、外部中断、GPIO事件的设置。6. 64位Crossbar与EDMA控制器数据搬运的引擎DM355内部采用64位Crossbar交叉开关架构连接主设备如ARM, VPSS, EDMA和从设备如ARM内部RAM, DDR, 配置总线。这提供了高带宽、低延迟的内部互联允许多个主设备并发访问不同的从设备。EDMAEnhanced Direct Memory Access控制器是DM355数据搬运的核心它独立于CPU工作可以高效地在内存与外设、内存与内存之间传输数据极大减轻CPU负担对于视频、音频等大数据流处理至关重要。核心组成通道控制器CC 用户接口管理64个DMA通道和8个QDMA通道。每个通道对应一个传输请求Transfer Request由事件如外设发送完成、定时器溢出或软件触发。传输控制器TC 实际执行数据传输的引擎。DM355有两个TCTC0, TC1可以并行工作。参数RAMPaRAM 存储每个通道的传输参数源地址、目的地址、传输数量、索引等非常灵活支持乒乓缓冲、循环缓冲、通道链式触发等高级功能。同步事件 Table 3-23列出了所有64个DMA通道的默认事件映射。例如通道2和3分别映射到ASP0的发送和接收事件通道18和19映射到UART0的接收和发送事件。当这些外设产生中断事件时可以自动触发相应的DMA传输无需CPU干预。使用流程配置PaRAM 设置好一次传输的所有参数。配置通道 将通道与特定事件关联对于事件触发的DMA或设置为手动触发。使能通道/事件 当外设事件发生或软件写入触发寄存器时EDMA CC会将传输请求提交给TC。TC执行传输 从源地址读取数据写入目的地址完成后可产生中断或触发另一个通道链式。在视频处理中EDMA被大量用于将摄像头数据从视频端口搬运到DDR中的帧缓冲区或将处理后的帧从DDR搬运到显示控制器。正确配置和使用EDMA是发挥DM355媒体处理能力的关键。我个人在多个基于DM355的项目中体会到引脚复用、复位和启动配置是硬件与底层软件交汇的“握手区”。硬件工程师必须根据选定的启动介质和外围电路正确设置BTSEL和AECFG的电阻网络并规划好复用引脚的第二功能。而软件工程师则必须深刻理解这些硬件配置带来的初始状态在Bootloader中准确地完成从默认状态到目标运行状态的切换。其中任何一个环节的疏忽都可能导致令人困惑的启动失败。最好的实践是在PCB投板前硬件和软件团队就一起评审原理图特别是这些配置引脚和关键复用引脚的使用方式并形成一份明确的《启动配置与引脚复用表》作为共同遵循的文档。这样能最大程度避免后续的联调障碍。