深入解析TMS320F2837xS EMIF异步读写时序与优先级仲裁机制

📅 2026/7/22 7:50:09
深入解析TMS320F2837xS EMIF异步读写时序与优先级仲裁机制
1. 项目概述EMIF异步读写操作的核心价值在嵌入式系统开发尤其是基于TI C2000系列DSP如TMS320F2837xS的工业控制、电机驱动或汽车电子项目中外部存储器接口EMIF是连接微控制器与外部大容量、非易失性存储器的桥梁。当片上Flash和RAM的容量不足以支撑复杂的算法或海量的数据缓冲区时EMIF就成了扩展系统能力的“生命线”。然而与同步动态RAMSDRAM那种由时钟严格同步的访问不同异步存储器如NOR Flash、异步SRAM、FPGA配置接口的访问更像是一场需要精心编排的“握手”仪式。没有统一的时钟节拍每一次读写都依赖于一系列精确的时序参数地址何时有效片选何时拉低读写使能信号要持续多久数据在哪个时刻稳定这些问题就是EMIF异步操作要解决的核心。很多工程师在初次配置EMIF时往往对着数据手册里一长串的Setup、Strobe、Hold参数感到头疼配置不当的直接后果就是系统不稳定、数据读写错误甚至根本无法启动。其根本原因在于没有真正理解这些时序参数在硬件引脚上的具体表现以及EMIF内部状态机是如何根据这些参数来驱动引脚完成一次完整访问的。本文将以TMS320F2837xS的EMIF模块为例抛开晦涩的理论直接从芯片手册的时序图和寄存器描述入手深入解析Normal Mode和Select Strobe Mode下异步读写的每一个时钟周期里发生了什么。更重要的是我们会探讨EMIF如何通过优先级仲裁机制在多个访问请求者如CPU、DMA之间做出抉择以及如何利用EM1WAIT信号与低速存储器进行“对话”。理解这些你不仅能正确配置参数更能从容应对调试中遇到的时序问题真正驾驭这个强大的外部接口。2. EMIF异步操作基础与模式解析在深入时序细节之前我们必须先建立两个核心认知EMIF与外部异步设备通信的基本“语言”是什么以及它提供的两种主要“方言”Normal Mode和Select Strobe Mode有何区别。这决定了你如何连接硬件和配置软件。2.1 异步访问的基本“握手”协议异步访问顾名思义不依赖于与存储器共享的时钟信号。它的通信基于一个简单的“请求-应答”式握手核心控制信号包括EM1CS[n] (Chip Select)片选信号。当它有效低电平时表示EMIF选中了该存储器芯片后续的地址和命令对该芯片有效。它是访问的“总开关”。EM1A/EM1BA (Address Bus)地址总线。输出要访问的存储器位置。EM1D (Data Bus)数据总线。在写操作时输出数据在读操作时输入数据。这是一个双向总线。EM1OE (Output Enable)输出使能。在读操作时有效低电平通知存储器将数据驱动到数据总线上。EM1WE (Write Enable)写使能。在写操作时有效低电平通知存储器锁存当前数据总线上的数据。EM1DQM (Data Mask/Byte Enable)数据掩码/字节使能。在字节寻址的存储器中用于选择访问数据总线的哪些字节例如高字节或低字节。一次完整的异步访问周期被EMIF划分为三个明确的阶段由寄存器参数控制其时长Setup Period (建立时间)在地址、片选等控制信号有效之前EMIF需要等待的时钟周期数。这给了外部设备一个准备时间确保当地址稳定时设备已经准备好接收命令。Strobe Period (选通时间)核心操作阶段。对于读操作EM1OE有效存储器在此期间将数据驱动到总线上对于写操作EM1WE有效数据在此期间被输出并保持稳定供存储器锁存。这是数据实际被传输的窗口。Hold Period (保持时间)在控制信号如EM1WE/EM1OE无效后地址和数据信号继续保持有效的时钟周期数。这确保了存储器有足够的时间在控制信号撤销前可靠地完成数据的锁存或释放总线。此外在两个不同方向的访问如一次读操作后紧接一次写操作之间EMIF会自动插入一个Turnaround Period (转向时间)。这是因为数据总线需要时间从输入方向切换到输出方向或反之防止总线冲突。2.2 Normal Mode 与 Select Strobe Mode 的本质区别TMS320F2837xS的EMIF提供了两种异步操作模式通过配置寄存器ASYNC_CSn_CR中的SS位来选择。它们最根本的区别在于EM1CS片选信号的行为模式这直接影响了硬件连接和时序设计。Normal Mode (SS 0)片选常有效模式这是更常见、更直观的模式。在此模式下EM1CS信号的行为像一个“使能”信号。一旦一次访问操作开始进入Setup周期EM1CS就会被拉低并且在整个访问周期包括Setup、Strobe、Hold内保持有效直到本次请求的所有访问周期都完成。如果一次请求需要多个访问周期例如用8位总线传输一个32位字EM1CS会在连续的周期中保持低电平。这种模式的优点是控制简单EM1CS在整个事务期间都指示芯片被选中。其EM1DQM引脚在Normal Mode下固定作为字节使能功能。Select Strobe Mode (SS 1)片选脉冲模式此模式得名于EM1CS信号的行为它仅在每次访问周期的Strobe Period内有效拉低。在Setup和Hold周期EM1CS都是无效的高电平。这意味着EM1CS更像是一个与EM1OE读或EM1WE写同步的脉冲信号。这种模式常用于那些CS引脚在内部与OE/WE引脚进行“与”逻辑的存储器或者需要CS作为精确触发信号的场合。在Select Strobe Mode下EM1DQM引脚同样作为字节使能。选择建议选择哪种模式首要依据是外部存储器芯片的数据手册。仔细查看其读/写周期时序图看CS信号是需要在整个周期有效还是仅在OE/WE有效期间有效。大多数标准的异步SRAM和NOR Flash支持Normal Mode。如果数据手册明确要求CS与WE同步或者你发现使用Normal Mode时数据不稳定可以尝试切换到Select Strobe Mode。硬件设计时如果无法确定可以将存储器的CS引脚同时连接到EMIF的EM1CS和EM1WE通过逻辑门以兼容两种模式但这会增加电路复杂度。3. 异步读写操作时序的逐周期剖析理解了模式和基本信号后我们进入最核心的部分在一个EM1CLK时钟周期里每一个引脚是如何动作的。我们结合芯片手册中的时序图和表格以一次最基本的单周期访问为例进行拆解。请记住所有时间参数W_SETUP, W_STROBE, W_HOLD, R_SETUP, R_STROBE, R_HOLD, TA都在ASYNC_CSn_CR寄存器中配置。3.1 Normal Mode 写操作时序详解假设我们配置W_SETUP 2,W_STROBE 3,W_HOLD 2TA 1注意即使TA0实际也会插入2个周期延迟。阶段一Turnaround Period (转向周期)EMIF内部仲裁确定当前写请求是最高优先级任务。EMIF等待TA字段配置的周期数本例为1个周期。但这里有一个极易忽略的硬性规定即使TA被编程为0EMIF也会在两次访问之间自动插入至少2个周期的延迟。这是总线方向切换所需的最小安全时间配置时务必考虑。在Turnaround周期结束时EMIF会再次检查该写操作是否仍是最高优先级。如果是进入Setup Period如果不是例如被更高优先级的刷新或读请求抢占则终止本次操作。这个“二次确认”机制保证了实时性要更高的请求能被及时响应。阶段二Setup Period (建立周期) - 时钟周期 T1, T2T1起始边沿根据W_SETUP2Setup Period开始持续2个时钟周期。地址总线(EM1A/EM1BA)变为有效输出目标地址。数据总线(EM1D)变为有效输出要写入的数据。EM1CS片选信号拉低如果前一个操作未使其保持低电平选中芯片。EM1OE输出使能在整个写操作期间被驱动为高电平无效这是写操作的一个固定特征。T2结束边沿Setup Period结束。阶段三Strobe Period (选通周期) - 时钟周期 T3, T4, T5T3起始边沿根据W_STROBE3Strobe Period开始持续3个时钟周期。EM1WE写使能信号拉低。这个下降沿通知外部存储器“数据已在总线上准备好请锁存”。EM1DQM字节使能信号变为有效指示哪些字节的数据是有效的例如对于16位总线EM1DQM0对应低字节EM1DQM1对应高字节。T5结束边沿Strobe结束的上升沿EM1WE写使能信号拉高。这个上升沿通常被存储器用作锁存数据的最终触发边沿。EM1DQM字节使能信号变为无效。EM1WAIT信号采样如果使能了扩展等待模式EW1EMIF会在此刻采样EM1WAIT引脚。若为有效电平根据WPn配置则Strobe Period会被延长插入额外的等待周期直到EM1WAIT无效或达到MAX_EXT_WAIT限制。阶段四Hold Period (保持周期) - 时钟周期 T6, T7T6, T7根据W_HOLD2Hold Period持续2个时钟周期。在此期间地址和数据总线继续保持有效确保存储器有足够时间在EM1WE无效后完成内部数据锁存。T7结束边沿Hold结束地址总线(EM1A/EM1BA)变为无效三态或驱动为默认值。数据总线(EM1D)变为无效。EM1CS片选信号拉高如果当前请求的所有访问周期都已完成。如果一次请求需要多个访问周期如字访问拆分为多个字节访问EM1CS会保持低电平EMIF会直接重新进入Setup Period开始下一个周期而不会插入Turnaround延迟。3.2 Select Strobe Mode 读操作时序详解假设配置R_SETUP 2,R_STROBE 3,R_HOLD 2。阶段一Turnaround Period与写操作类似经历TA周期和优先级二次确认。阶段二Setup Period - 时钟周期 T1, T2T1起始边沿根据R_SETUP2Setup Period开始。地址总线(EM1A/EM1BA)变为有效。EM1DQM字节使能信号变为有效。注意在Select Strobe Mode下EM1DQM在Setup期就有效了这比Normal Mode早。EM1CS保持高电平这是与Normal Mode的关键区别。EM1WE在整个读操作期间被驱动为高电平。阶段三Strobe Period - 时钟周期 T3, T4, T5T3起始边沿根据R_STROBE3Strobe Period开始。EM1CS片选信号和EM1OE输出使能信号同时拉低。这个“同步拉低”是Select Strobe Mode的典型特征它共同作用以启动存储器的数据输出。T5结束边沿Strobe结束的上升沿EM1CS和EM1OE同时拉高。EMIF在此时钟上升沿采样数据总线(EM1D)上的值。这是读操作捕获数据的关键时刻同样会采样EM1WAIT以决定是否延长Strobe。阶段四Hold Period - 时钟周期 T6, T7T7结束边沿地址总线(EM1A/EM1BA)变为无效。EM1DQM字节使能信号变为无效。EM1CS在Strobe结束时已拉高此处无变化。时序配置经验这些参数的单位是EM1CLK的周期数。因此EM1CLK的频率直接决定了每个阶段的绝对时间。例如EM1CLK100MHz周期为10ns。W_STROBE3意味着Strobe Period为30ns。你必须确保这个时间大于等于存储器数据手册要求的tWP写使能脉冲宽度和tACC地址访问时间等参数并留有一定裕量。通常Setup和Hold时间可以配置得较小如1-2个周期而Strobe时间需要根据存储器速度仔细计算。使用示波器或逻辑分析仪抓取实际波形进行验证是调试EMIF时序不可或缺的一步。4. EM1WAIT扩展等待机制与超时处理外部存储器的速度可能千差万别尤其是像NOR Flash这类进行写操作或擦除操作时需要比标准读操作长得多的时间。EMIF的固定Strobe周期可能无法满足。这时EM1WAIT引脚和扩展等待模式就派上了用场。4.1 扩展等待模式的工作原理扩展等待模式是一种由外部设备主动控制访问周期的机制。其工作流程如下使能通过设置ASYNC_CSn_CR寄存器的EW位为1来使能对应片选空间的扩展等待模式。触发在Strobe Period的最后一个时钟上升沿即标准Strobe结束的时刻EMIF会采样EM1WAIT引脚的电平。等待如果EM1WAIT被采样为有效电平有效极性由AWCC寄存器的WPn位配置1高电平有效0低电平有效则EMIF不会结束Strobe Period而是插入一个额外的等待周期并在下一个时钟上升沿再次采样EM1WAIT。退出此过程一直持续直到EM1WAIT被采样为无效电平或者达到了最大扩展等待计数AWCC寄存器中的MAX_EXT_WAIT字段。一旦条件满足EMIF立即结束Strobe Period进入Hold Period。4.2 关键配置与限制极性配置(WPn)必须根据外部设备READY/BUSY或WAIT引脚的有效电平来正确设置WPn位实现“无胶合”连接。例如很多Flash的RY/BY引脚在忙时为低电平就应配置WPn0低电平有效。超时保护(MAX_EXT_WAIT)这是一个至关重要的安全机制。它定义了EMIF在EM1WAIT信号始终有效的情况下最多愿意等待多少个EM1CLK周期。防止因外部设备故障永远拉低WAIT导致EMIF和整个系统挂起。当计数器超时EMIF会强制结束当前访问周期并可以产生一个异步超时中断如果使能通知软件处理异常。时序约束手册中明确提到为使EMIF能可靠采样到EM1WAIT信号在扩展等待模式下Setup周期与Strobe周期之和必须大于4即W_SETUP W_STROBE 4且R_SETUP R_STROBE 4。这是因为EMIF需要一定的内部信号建立时间。违反此约束可能导致EM1WAIT信号被忽略。4.3 应用场景与调试技巧Flash编程/擦除这是最典型的应用。在对NOR Flash进行字编程或扇区擦除时Flash内部操作需要几十微秒甚至几毫秒。在此期间Flash会拉低其RY/BY引脚连接到EM1WAIT。EMIF的写周期因此被自动延长直到Flash操作完成释放WAIT信号。软件无需轮询状态寄存器大大提高了效率。连接低速外设将EMIF模拟为异步总线连接低速的CPLD、FPGA或并行接口的ADC/DAC时EM1WAIT可以让外设有充足的时间准备或处理数据。调试技巧逻辑分析仪是关键同时抓取EM1CLK、EM1CS、EM1WE/EM1OE、EM1WAIT和地址数据线。你可以清晰地看Strobe周期是如何被EM1WAIT拉长的。超时中断是保险丝务必使能异步超时中断AT_MASK_SET并在中断服务程序中记录错误、进行系统恢复或报警。这能有效捕获硬件连接错误或设备故障。计算最大等待时间MAX_EXT_WAIT决定了你能支持多慢的设备。例如EM1CLK100MHzMAX_EXT_WAIT1000则最大可扩展的Strobe时间为10μs。如果你的Flash写操作需要100μs这个配置就不够需要降低EM1CLK频率或选择支持更长等待时间的型号如果支持。5. 优先级仲裁机制与系统级考量EMIF并非孤立工作在复杂的SoC中CPU、DMA控制器等多个主设备都可能同时发起访问请求。同时EMIF还需管理SDRAM的自动刷新。这就需要一套严格的内部优先级仲裁机制来决定下一个执行谁的任务。5.1 内部优先级金字塔根据手册描述EMIF内部优先级从高到低严格排序如下设备复位或SDRAM配置寄存器写操作最高优先级立即触发SDRAM初始化序列。刷新紧急度达到“必须”(Refresh Must)如果SDRAM刷新计数器表明再不刷新就会丢失数据EMIF会连续执行多个自动刷新周期直到紧急度降至“释放”(Refresh Release)级别。SDRAM或异步读请求读操作优先级高于写操作。这是为了减少CPU或DMA因等待数据而产生的停滞优化系统性能。刷新紧急度达到“需要”(Refresh Need)执行一次SDRAM自动刷新。SDRAM或异步写请求。刷新紧急度达到“可以”(Refresh May)或“释放”(Refresh Release)执行一次SDRAM自动刷新。进入自刷新状态如果SDRAM配置寄存器(SDRAM_CR)的SR位被置1。仲裁流程EMIF完成一个操作后会立即回到这个列表的顶部第1条开始判断选择当前优先级最高的任务执行。这意味着读操作总是优先于写操作被服务。在数据采集系统频繁DMA读与日志存储系统间歇性写共存的应用中这种策略有利于保证数据流的实时性。5.2 异步请求时长限制一个容易被忽视的陷阱当系统同时连接SDRAM和异步存储器时手册第24.2.14.1节指出了一个关键限制一个异步请求可能包含多个访问周期的总耗时不能超过两个值中的较小者tRAS (通常~120μs)这是SDRAM行有效命令(ACTV)到预充电命令(PRE)之间的最大允许时间。tRefresh × 11 (通常~172.7μs)这是避免SDRAM刷新违规的时间窗11个刷新周期。为什么有这个限制因为EMIF是单一时序引擎在处理一个长的异步请求时它无法被中断去服务SDRAM的刷新或行管理命令。如果异步请求耗时过长可能导致SDRAM数据丢失。如何应对量化请求时间一个异步请求的最大耗时 (单次访问周期数) × (单个周期时间)。单个周期时间 ≈(Setup Strobe Hold 2) × EM1CLK周期。考虑最坏情况如果使能了扩展等待还需加上MAX_EXT_WAIT所允许的最大额外时间。控制请求大小EMIF单次请求最大为16个字32字节。如果你通过一个DMA通道传输大量数据它会被拆分成多个16字的请求。每个请求完成后EMIF会重新仲裁从而给SDRAM刷新留出机会。因此避免使用CPU进行超长的memcpy式循环访问而应使用DMA并合理设置DMA传输量。优化时序参数在满足存储器时序要求的前提下尽可能减少Setup、Strobe、Hold的配置值。监控与设计在系统设计阶段就要估算最坏情况下的异步访问时间确保其小于上述限制。在复杂应用中可以考虑使用EM1WAIT超时中断作为监控机制。6. 数据总线保持Parking与低功耗状态6.1 数据总线保持行为EMIF有一个称为“数据总线保持”Data Bus Parking的特性当EMIF空闲时它会持续驱动数据总线保持上一次写操作的数据值。这样做的目的是防止数据总线浮空导致输入引脚产生功耗或收到噪声干扰。只有当EMIF发起一个读操作时它才会停止驱动数据总线变为高阻态以便外部存储器能够驱动数据。读操作完成后EMIF会立即重新驱动Park数据总线。一个重要例外当EMIF处于自刷新状态时如果进行异步读操作读操作完成后EMIF不会重新驱动数据总线而是将其置为高阻态。这可能导致总线浮空。因此手册强烈不建议在自刷新状态下进行异步读操作。如果必须这样做必须在硬件上为没有内部上拉的16根数据总线引脚添加外部上拉电阻例如10kΩ以确保电平稳定。6.2 低功耗模式管理EMIF支持两种主要的低功耗模式以降低系统功耗自刷新模式 (Self-Refresh)通过设置SDRAM_CR的SR位EMIF将SDRAM置于自刷新状态。此时SDRAM使用内部时钟进行刷新EMIF和SDRAM接口的大部分时钟可以关闭功耗显著降低。这是最常用的SDRAM保持数据低功耗状态。掉电模式 (Power-Down)EMIF将EM1SDCKE信号拉低使SDRAM进入掉电模式。当需要刷新或有访问请求时EM1SDCKE会被重新拉高。此模式功耗低于活跃状态但高于自刷新。最重要的实践要点如果希望通过全局时钟模块(GCM)完全关闭EMIF控制器的输入时钟以达到最大省电效果必须先将SDRAM置于自刷新模式。否则关闭时钟会导致SDRAM失去刷新数据丢失。此外如果外部存储器需要持续时钟某些特殊情况则不能关闭VCLK3时钟域。7. 中断与错误处理EMIF提供了一个中断信号给CPU用于处理特定事件这对于构建健壮的系统至关重要。7.1 中断源与使能EMIF可产生三种中断等待上升沿中断 (Wait Rise)当检测到EM1WAIT引脚上出现上升沿时触发。这可用于通知软件一个由EM1WAIT延长的操作如Flash编程已经完成。注意此中断与WPnEM1WAIT极性配置无关仅检测边沿。异步超时中断 (Asynchronous Timeout)在扩展等待模式下如果EM1WAIT信号在MAX_EXT_WAIT个周期后仍未无效则触发此中断。这是硬件故障如设备损坏、连接断开的重要指示。行捕获中断 (Line Trap)当EMIF收到一个不支持的寻址模式它只支持线性递增和缓存行回绕的访问请求时触发。这通常意味着软件或DMA配置错误访问了非法地址或使用了不支持的突发类型。中断使能流程每个中断都必须单独使能才会送达CPU。通过写INT_MSK_SET寄存器的WR_MASK_SET、AT_MASK_SET或LT_MASK_SET位为1来使能对应中断。中断状态由INT_RAW原始状态无论是否使能和INT_MSK已屏蔽状态仅当中断使能且条件发生时置位寄存器反映。通过向INT_RAW寄存器的对应位写1来清除中断标志同时也会清除INT_MSK中的对应位。通过写INT_MSK_CLR寄存器的对应位为1来禁用中断。7.2 中断服务例程设计建议在中断服务程序(ISR)中你应该立即读取并保存INT_RAW寄存器值以确定中断源。根据中断源采取行动Wait Rise可以设置一个标志通知主程序异步操作完成可以进行下一步如验证写入的数据。Asynchronous Timeout这是一个严重错误。应记录错误信息可能的话尝试复位外部设备或切换到安全状态。务必检查硬件连接和MAX_EXT_WAIT配置。Line Trap检查软件中产生该内存访问的代码或DMA配置修正寻址错误。向INT_RAW的相应位写1以清除中断。如果使能了多个中断在ISR入口处需要判断是哪个中断触发可以通过查询INT_MSK寄存器来确定已使能且活跃的中断。理解并妥善处理这些中断能将潜在的运行时错误转化为可管控的系统事件极大地增强嵌入式系统的可靠性。尤其是在使用扩展等待模式与低速或不稳定存储器通信时超时中断是必不可少的守护者。