TMS320DM643x异步EMIF接口配置:时序计算与SRAM/NAND Flash连接实战
1. 项目概述在嵌入式系统开发尤其是基于德州仪器TITMS320DM643x这类高性能数字媒体处理器DMP的项目中我们常常需要扩展外部存储器。无论是为了存储庞大的音视频处理中间数据还是为了存放启动代码和文件系统外部存储器接口External Memory Interface, EMIF都是连接芯片与外部世界的关键桥梁。而其中的异步EMIF因其灵活的可编程时序特性成为对接SRAM、NOR Flash乃至NAND Flash等异步存储器的首选方案。然而这份灵活性也带来了复杂性如何根据手头存储器的数据手册精准地配置那一连串的建立Setup、选通Strobe、保持Hold时间参数让处理器和存储器能够“握手言和”是每个嵌入式工程师都会遇到的挑战。踩过几次坑之后我意识到仅仅知道寄存器地址和字段含义是远远不够的必须深入理解EMIF控制器在每个时钟周期下的行为逻辑以及这些行为如何通过PCB上的走线最终与存储器芯片的时序要求相匹配。本文将以TMS320DM643x的异步EMIF为例抛开官方手册的平铺直叙从一线开发者的视角拆解其配置精髓、实战中的时序计算与调试技巧并分享两个经典的连接案例——异步SRAM和NAND Flash手把手带你搞定这个“既基础又关键”的外设。2. EMIF异步接口架构与核心原理拆解2.1 接口概览与信号定义TMS320DM643x的EMIF异步接口提供了一组丰富的控制信号其本质是一个高度可配置的状态机用于生成符合外部设备要求的读写时序。我们先来认识一下这些关键引脚EM_A[21:0] EM_BA[1:0]地址总线。这里有个关键点需要理解EMIF内部以32位字Word为单位寻址因此EM_A[0]输出的是字地址的最低位。当连接8位宽度的存储器时EM_BA[1:0]这两个Bank地址引脚实际上被用作字节地址的最低两位A1和A0用于在一个32位字内选择具体的字节。这是硬件自动完成的映射在软件层面我们只需要按字节或字访问对应的内存地址即可。EM_CS[5:2]片选信号低电平有效。DM643x提供了4个独立的片选空间CS2-CS5每个最大可支持16MB。这意味着你可以同时连接四块不同的存储器或外设每块都有自己独立的时序配置通过对应的AnCR寄存器这大大提升了系统设计的灵活性。EM_D[7:0]8位双向数据总线。EM_RW读写指示信号。高电平表示读周期低电平表示写周期。这个信号在整个访问周期内都保持有效比EM_OE或EM_WE的持续时间更长。EM_OE输出使能读选通低电平有效。仅在读周期的选通阶段被拉低此时外部设备应将数据放到EM_D总线上。EM_WE写使能写选通低电平有效。仅在写周期的选通阶段被拉低此时EMIF将数据驱动到EM_D总线上。EM_WAIT等待输入信号。这是一个非常重要的信号允许速度较慢的存储器通过拉低或拉高可配置此信号来请求EMIF延长选通时间直到存储器准备好数据或完成写入。这为实现与不同速度存储器的兼容提供了硬件支持。2.2 核心可编程时序参数解析异步EMIF的精髓在于其可编程的时序参数。每个片选空间对应的异步配置寄存器AnCR允许我们独立设置以下时间参数单位是EMIF的时钟周期由PLL1的CLKDIV6分频得到建立时间Setup, W_SETUP/R_SETUP从地址/片选对于Normal模式有效开始到选通信号EM_OE或EM_WE有效下降沿之间的时间。这给了存储器足够的准备时间来锁存稳定的地址。选通时间Strobe, W_STROBE/R_STROBE选通信号保持有效的持续时间。对于读操作这是EM_OE为低的时间存储器必须在此期间将有效数据放到总线上对于写操作这是EM_WE为低的时间EMIF将保持数据稳定。保持时间Hold, W_HOLD/R_HOLD从选通信号无效上升沿到地址/片选无效之间的时间。这确保了在选通信号撤销后地址和数据还能保持一段时间满足存储器的保持时间要求。周转时间Turnaround, TA在两次不同方向读后写或写后读或不同片选的访问之间EMIF自动插入的空闲周期用于防止总线冲突。特别注意连续对同一片选空间进行同方向读-读或写-写访问时不会插入TA周期这能提升连续访问的效率。这些参数在寄存器中的值 实际时钟周期数 - 1。例如若需要3个周期的建立时间则W_SETUP或R_SETUP字段应配置为2。2.3 工作模式Normal vs. Select StrobeEMIF提供了两种基本的异步访问模式区别仅在于EM_CS信号的行为Normal模式SS0EM_CS作为片选使能信号在整个访问周期SetupStrobeHold内都保持有效低电平。这是最常用的模式适用于绝大多数标准的异步SRAM和NOR Flash。Select Strobe模式SS1EM_CS的功能变为一个选通信号仅在Strobe阶段有效低电平。这种模式适用于一些将片选和写使能引脚复用的特殊存储器或者在某些需要减少信号切换噪声的应用中。选择建议除非存储器数据手册明确要求或推荐使用Select Strobe模式否则一律使用Normal模式因为其行为更符合常规认知调试起来也更直观。3. 寄存器配置详解与实战要点理解了原理我们来看如何通过寄存器将其实现。DM643x的EMIF异步部分主要涉及以下几类寄存器配置时必须格外小心。3.1 异步配置寄存器A1CR - A4CR这是最核心的寄存器每个片选空间CS2-CS5对应一个A1CR对应CS2以此类推。其字段定义是配置的基石。关键字段配置心得ASIZE总线宽度。对于DM643x的异步EMIF固定为0即8位总线。任何32位的访问都会被EMIF自动拆分成4次连续的8位访问这个过程对软件透明但会影响实际带宽。SS模式选择。如上一节所述根据存储器要求选择0Normal或1Select Strobe。EW扩展等待使能。如果你连接的存储器速度较慢其tOE输出使能有效到数据有效或tWE写脉冲宽度时间可能长于你通过R_STROBE/W_STROBE设置的最小值。此时可以启用EW并正确连接EM_WAIT引脚。当存储器需要更多时间时它通过EM_WAIT信号告知EMIFEMIF会自动延长Strobe阶段。注意启用EW时R_STROBE/W_STROBE必须设置为一个大于0的最小值这个最小值是EMIF在检测到EM_WAIT无效表示存储器已准备好后仍会保持的最短选通时间。TA周转时间。这是一个容易忽略但可能导致间歇性读写错误的参数。设置依据主要有两点一是存储器数据手册中关于总线释放时间tBUF的要求二是系统PCB上数据总线的负载情况。负载重、走线长则需要更长的TA来避免冲突。一个实用的起始值对于读后写或写后读切换建议至少设置2-3个周期。可以通过后续的读写稳定性测试来调整。3.2 异步等待周期配置寄存器AWCCR这个寄存器主要用于配置EM_WAIT信号的行为。WP0等待信号极性。0表示低电平有效存储器忙时拉低EM_WAIT1表示高电平有效。这需要根据你使用的存储器的READY/BUSY引脚的电平特性来设定。MEWC最大扩展等待周期。这是一个安全机制。假设你的存储器因故障一直拉低EM_WAITEMIF不可能无限等待。MEWC定义了等待超时时间超时周期数 (MEWC 1) * 16。超时后EMIF会强制结束当前周期并可能产生中断如果使能了。设置建议根据存储器手册中可能的最大忙时间如NAND Flash的页编程典型时间加上足够余量来计算。例如某Flash最大编程时间为200usEMIF时钟为100MHz周期10ns则至少需要200us / 10ns 20000个周期。MEWC应设置为ceil(20000 / 16) - 1 1249。3.3 中断相关寄存器EIRR, EIMR, EIMSR, EIMCREMIF提供了两个主要的中断源异步超时中断当使能EW且等待时间超过MEWC设置值时触发。等待信号边沿中断EM_WAIT信号上出现指定的边沿上升沿或下降沿取决于极性时触发。实战建议在调试阶段可以暂时使能异步超时中断。如果程序运行中意外进入此中断说明你设置的R_STROBE/W_STROBEMEWC仍然不能满足存储器的速度要求或者EM_WAIT信号连接/配置有误。这是一个非常有效的调试手段。3.4 配置流程与注意事项初始化顺序配置EMIF寄存器前确保EMIF时钟CLKDIV6已经正确初始化并稳定。通常先在PLL控制器中配置好系统时钟和分频。静态配置绝对不要在EMIF正在进行异步访问时即总线忙时修改AnCR或AWCCR寄存器。否则可能导致不可预知的总线冲突和访问错误。配置应在系统初始化阶段任何外部存储器访问发生之前完成。引脚复用DM643x的引脚是复用的。必须通过引脚复用控制寄存器将相关引脚的功能设置为EMIF而不是其他外设如GPIO、UART等。这是硬件连接正确但软件无法访问存储器的常见原因之一。上拉电阻数据手册提到EM_CS[5:2]内部有下拉电阻。为确保复位后芯片处于未选中状态强烈建议在EM_CS[3],EM_CS[4],EM_CS[5]外部增加一个上拉电阻例如4.7kΩ或10kΩ。对于EM_CS[2]如果复位时AEM[2:0]配置不为0也需要外部上拉。4. 时序计算与电路设计实战理解了寄存器配置下一步就是将理论参数转化为实际电路和代码。这中间的关键是时序计算。4.1 时序分析模型EMIF与存储器之间的通信是否成功取决于EMIF输出的时序能否满足存储器输入的时序要求同时存储器输出的时序也能满足EMIF的输入要求。我们需要建立两个检查EMIF作为驱动端写操作检查EMIF输出的地址/数据建立保持时间、写脉冲宽度等是否大于等于存储器要求的最小值。EMIF作为接收端读操作检查存储器输出的数据有效时间、保持时间等是否大于等于EMIF要求的最小值。计算时必须考虑PCB走线带来的延迟T_pcb。延迟会使信号到达芯片引脚的时间晚于控制器输出时间。通常我们需要获取或估算信号在PCB上的传播延迟约150ps/inch量级。关键公式以读周期为例Normal模式EMIF输出到存储器的时序检查地址建立/保持时间实际建立时间 EMIF_CLK * (R_SETUP 1) - T_pcb(地址线)实际保持时间 EMIF_CLK * (R_HOLD 1) T_pcb(地址线)实际选通OE宽度 EMIF_CLK * (R_STROBE 1)必须满足实际建立时间 存储器t_{SA}实际保持时间 存储器t_{HA}实际OE宽度 存储器t_{OE}。存储器输出到EMIF的时序检查数据建立/保持时间数据有效窗口相对于EMIF采样点EMIF在EM_OE上升沿即Strobe结束时刻采样数据。存储器数据在OE无效后还能保持多久t_{OH}以及OE有效后多久数据有效t_{OE}。考虑PCB延迟后EMIF引脚上看到的数据有效时间会变短保持时间会变长。必须满足(实际OE宽度 - T_pcb) 存储器t_{OE}确保数据在采样前有效且存储器t_{OH} T_pcb EMIF要求的数据保持时间通常为0。4.2 连接异步SRAM实战以IS61WV20488BLL为例假设我们要连接一块256K x 8bit的异步SRAM IS61WV20488BLL。其关键时序参数如下假设EMIF时钟为100MHz周期10nst_{SA}(地址建立时间): 0 nst_{HA}(地址保持时间): 2 nst_{DOE}(OE有效到数据输出): 10 nst_{OH}(OE无效后数据保持): 2 nst_{WE}(写脉冲宽度): 8 nst_{SD}(数据建立时间): 6 nst_{HD}(数据保持时间): 2 ns步骤1确定工作模式该SRAM是标准器件使用Normal模式SS0。步骤2计算读时序参数R_SETUPSRAM要求t_{SA}为0但为了稳定我们通常给1-2个周期余量。设R_SETUP 1(2个周期20ns)。20ns 0ns满足。R_STROBE关键参数。必须满足EMIF_CLK * (R_STROBE1) t_{DOE}。t_{DOE}10ns所以(R_STROBE1) 10ns / 10ns 1。同时为了给数据采样留出稳定窗口通常设置R_STROBE使OE宽度大于t_{DOE}。设R_STROBE 2(3个周期30ns)。30ns 10ns满足。R_HOLD必须满足EMIF_CLK * (R_HOLD1) t_{HA}。t_{HA}2ns所以(R_HOLD1) 0.2最小为1。设R_HOLD 1(2个周期20ns)。20ns 2ns满足。检查数据保持EMIF在OE上升沿采样。SRAM的t_{OH}2ns意味着OE变高后数据至少保持2ns。只要我们的R_HOLD周期内地址保持稳定我们设置了20ns且PCB延迟不大这个条件很容易满足。步骤3计算写时序参数W_SETUP需满足地址和数据建立时间。t_{SA}0ns,t_{SD}6ns。取较大者6ns。(W_SETUP1) 6ns/10ns 0.6最小为1。设W_SETUP 1(2周期20ns)。20ns 6ns满足。W_STROBE必须满足EMIF_CLK * (W_STROBE1) t_{WE}。t_{WE}8ns所以(W_STROBE1) 0.8最小为1。设W_STROBE 2(3周期30ns)。30ns 8ns满足。W_HOLD需满足地址和数据保持时间。t_{HA}2ns,t_{HD}2ns。(W_HOLD1) 2ns/10ns0.2最小为1。设W_HOLD 1(2周期20ns)。20ns 2ns满足。步骤4配置TA假设系统只有此SRAM且读写操作不频繁交叉。设置TA 1(2个周期)提供基本的读写方向切换保护。步骤5寄存器配置值假设使用CS2空间则配置A1CR寄存器SS 0 (Normal Mode) EW 0 (禁用扩展等待) W_SETUP 1 W_STROBE 2 W_HOLD 1 R_SETUP 1 R_STROBE 2 R_HOLD 1 TA 1 ASIZE 0 (8-bit)换算成十六进制写入即可。AWCCR在此例中无需配置EW0。4.3 连接NAND Flash实战以HY27UA081G1M为例NAND Flash接口与SRAM略有不同。它复用数据总线来传输命令、地址和数据主要通过CLE命令锁存使能、ALE地址锁存使能和WE写使能信号来控制操作。DM643x的EMIF通过将EM_CS、EM_A等信号映射到这些控制引脚来模拟NAND Flash接口。关键配置点引脚映射需要将EMIF的特定引脚连接到NAND Flash的CLE、ALE、WE、RE上。这通常通过地址线的高位来实现例如将某根地址线连接到CLE另一根连接到ALE。访问时通过向特定的“地址”写入数据实质是使能对应的地址线来产生CLE或ALE脉冲。NAND Flash控制寄存器NANDFCR此寄存器用于使能NAND Flash模式下的硬件ECC纠错码计算。ECC是NAND Flash存储的必备功能用于纠正位错误。DM643x的EMIF可以在数据传输时自动计算512字节数据的ECC值大大减轻CPU负担。使用扩展等待EWNAND Flash的页编程和块擦除操作耗时很长几十到几百微秒。在发送编程0x10或擦除0x60命令后需要轮询状态字读0x70命令直到操作完成。此时可以将Flash的R/BReady/Busy引脚连接到EMIF的EM_WAIT引脚并启用EW功能。当Flash忙时R/B为低假设低有效EM_WAIT有效EMIF的读操作会一直等待直到R/B变高就绪。这样软件只需要发起一次读状态字的操作EMIF硬件会自动等待CPU可以在此期间执行其他任务提高了效率。配置流程简述根据硬件连接确定CLE、ALE对应的“命令地址”和“地址地址”。像配置普通异步存储器一样根据NAND Flash数据手册的时序图主要是t_{WP},t_{WH},t_{RP},t_{REH}等配置对应片选空间的AnCR寄存器W_SETUP,W_STROBE,W_HOLD,R_SETUP,R_STROBE,R_HOLD。NAND Flash的读写周期通常比SRAM慢。在NANDFCR寄存器中使能ECC计算设置ECC_EN位并选择正确的ECC地址范围ECC_ADDR。如果需要使用硬件等待功能配置AWCCR寄存器设置WP0极性和MEWC超时值并在AnCR中使能EW位。编写NAND Flash的底层驱动时对命令、地址、数据的写入实际上就是向特定的“地址”由CLE/ALE映射决定写入相应的字节。5. 调试技巧与常见问题排查即使计算无误实际硬件调试中也可能遇到问题。以下是一些实战中总结的技巧和常见问题的排查思路。5.1 调试工具与方法逻辑分析仪/示波器这是调试EMIF时序的终极武器。抓取EM_CS,EM_OE/WE,EM_RW,EM_A[0],EM_D[0]等关键信号的波形与数据手册的时序图和你的配置进行比对。重点关注Setup、Strobe、Hold时间是否与配置值相符信号边沿是否干净有无过冲或振铃。软件读写测试编写简单的测试程序向外部存储器固定地址写入特定的数据模式如0xAA, 0x55, 0x00, 0xFF等然后读回比较。可以先进行单一地址连续读写再进行跨地址遍历读写以区分是时序问题还是地址线连接问题。内存填充测试用DMAEDMA或CPU快速填充一大段外部内存再读回校验。这可以测试在高带宽访问下的稳定性有助于发现TA时间不足导致的总线冲突问题。5.2 常见问题速查表现象可能原因排查思路与解决方案单次读写正常连续/随机读写出错1.TA周转时间设置过短。2.PCB总线负载过重信号完整性差。3.电源噪声或去耦不足。1.增加TA值例如从1个周期加到3-4个。这是最常见的原因。2. 用示波器观察数据线和地址线看信号边沿是否陡峭有无振铃。考虑增加串联阻尼电阻如22Ω-33Ω。3. 检查存储器电源引脚处的去耦电容0.1uF和10uF是否靠近芯片放置并焊接良好。完全无法读写读回数据全为0或0xFF1.引脚复用未配置EMIF功能未启用。2.片选信号EM_CS连接或极性错误。3.存储器电源或使能信号未接好。4.AnCR寄存器根本未配置复位后全为0时序极短。1. 首先检查系统引脚复用控制寄存器确保相关引脚已设置为EMIF功能。2. 用示波器检查EM_CS在访问期间是否有低电平脉冲。检查硬件连接。3. 用万用表测量存储器VCC和GND。检查存储器的OE/WE引脚是否已正确上拉或下拉如果需要。4. 在调试器中确认已写入AnCR寄存器的值是否正确。写入成功但读回数据是上次写入的值或随机值1.读时序不满足特别是Strobe时间tOE太短存储器来不及输出数据。2.EM_OE信号连接错误或损坏。3. 对于NAND Flash命令序列发送错误。1.显著增加R_STROBE值例如增加到10个周期以上看是否恢复正常。这是最直接的判断方法。2. 用示波器对比EM_OE和存储器的OE引脚波形看是否一致。3. 仔细核对NAND Flash的命令周期命令-地址-数据代码确保CLE和ALE信号在正确的时间产生。使用EW扩展等待时访问卡死或超时1.EM_WAIT信号极性WP0配置错误。2.EM_WAIT引脚未连接或连接错误。3.MEWC设置过小在正常操作期间就超时了。4. 存储器本身故障READY/BUSY信号异常。1. 确认存储器READY/BUSY引脚的有效电平并相应设置AWCCR的WP0位。2. 用示波器检查EM_WAIT引脚在访问期间的电平变化看是否与存储器状态同步。3.大幅增加MEWC值或先禁用EW用软件延时轮询方式测试存储器基本功能。4. 单独测试存储器芯片。32位访问如int型结果错误理解错误EMIF数据总线只有8位。任何32位访问都会被拆成4次8位访问。这是正常现象。软件应意识到访问的是8位外部设备。对于需要连续存储32位数据的情况应使用memcpy或EDMA进行字节搬运或者直接在软件中处理字节序。5.3 性能优化建议最大化EMIF时钟在满足所有时序裕量的前提下尽量提高EMIF的输入时钟频率通过PLL配置这是提升外部存储器带宽最直接有效的方法。最小化必要延时在满足存储器时序参数的最小值并留有一定裕量建议20%-50%的前提下尽量减小R_SETUP/W_SETUP、R_STROBE/W_STROBE、R_HOLD/W_HOLD和TA的值。每个多余的时钟周期都会降低有效带宽。利用EDMA进行批量传输对于大数据块的搬运如图像数据使用EDMA控制器而非CPU进行访问可以解放CPU并且EDMA的优先级通常可配置为高于CPU减少访问冲突。谨慎使用EW虽然EW方便但在等待期间EMIF总线是被占用的。如果系统对实时性要求高可以考虑用软件查询代替硬件等待在等待期间CPU可以处理其他任务或进入低功耗模式。配置TMS320DM643x的EMIF异步接口是一个从数据手册理论参数到实际硬件波形反复对照、调试和优化的过程。核心在于深刻理解“Setup-Strobe-Hold”这个基本时序模型并熟练运用逻辑分析仪进行验证。从简单的SRAM入手成功配置并稳定运行会为后续连接更复杂的NAND Flash打下坚实的基础。记住留足时序裕量是系统稳定的前提尤其是在初次调试和产品样机阶段。

相关新闻