TM4C129 EPI主机总线模式配置:iRDY信号与PSRAM CR寄存器详解 1. 项目概述与核心价值在嵌入式系统开发尤其是基于TI Tiva C系列微控制器的应用中外部存储器接口EPI的性能和稳定性直接决定了整个系统的数据吞吐能力和响应速度。很多开发者初次接触EPI时往往会被其复杂的寄存器配置和时序图所困扰尤其是在连接PSRAM这类具有特定访问协议的存储器时一个配置不当就可能导致数据读写错误、系统崩溃甚至硬件损坏。我曾在多个高速数据采集和图形显示的项目中深度使用TM4C129的EPI模块连接过不同型号的PSRAM和异步SRAM期间踩过的坑、调通的时序今天就来系统地梳理一下特别是其中两个关键但容易混淆的功能iRDY信号流控和PSRAM配置寄存器的操作。简单来说EPI主机总线模式就像一个高度可编程的“交通指挥官”它负责在MCU内核和外部存储器之间调度数据流。而iRDY信号就是这个指挥官手中的“红绿灯”它由外部存储器如PSRAM驱动告诉MCU“我现在忙数据还没准备好请你等一下。” 理解并正确配置这个“红绿灯”的响应时机IRDYDLY是避免总线访问冲突、确保数据完整性的第一步。另一方面PSRAM不像普通SRAM那样即插即用它内部有一个配置寄存器CR你需要通过EPI模块像“第一次握手”一样把正确的时序参数如等待周期、突发长度写入这个CRPSRAM才能按照你期望的节奏工作。很多时序不稳定、间歇性读写失败的问题根源都出在这两个环节的配置失配上。本文将抛开数据手册中零散的描述以一个实际驱动16位PSRAM的项目为例带你从电路连接、寄存器位域含义、时序波形分析到代码实操完整走通EPI主机总线模式的配置流程。无论你是正在调试一块新的核心板还是希望优化现有系统的存储性能这篇文章提供的思路和代码片段都能直接拿来参考。2. EPI主机总线模式与iRDY信号深度解析2.1 EPI主机总线模式基础框架Tiva TM4C129的EPI模块支持多种工作模式而我们连接PSRAM、SRAM等存储器件时通常使用其主机总线Host-Bus模式具体来说是16位地址数据复用ADMUX子模式。在这个模式下EPI的引脚被复用以减少MCU引脚占用同一组物理引脚在地址周期输出地址在数据周期传输数据。这就需要一根额外的地址锁存使能ALE信号线来通知外部锁存器通常是一片74系列锁存芯片在何时锁存地址。选择这个模式而非非复用模式主要是为了在有限的引脚资源下扩展更大的寻址空间。TM4C129的EPI在Host-Bus 16 ADMUX模式下可以输出最多20位地址A[19:0]和16位数据D[15:0]从而能访问1MB的外部存储空间。这对于需要大容量帧缓冲区的显示屏应用或大量数据缓存的应用至关重要。2.2 iRDY信号硬件流控的核心机制iRDY信号在PSRAM器件上通常标注为WAIT或RDY是PSRAM等异步存储器提供的一种硬件流控机制。它的本质是一个输入到MCU的握手信号。当PSRAM因为内部操作如行地址激活、预充电特别是自动刷新无法立即响应读写请求时它会将iRDY信号拉低通知EPI控制器“请暂停你的访问我还没准备好。”EPI模块内部有一个状态机来管理总线事务。当EPIHBnCFG寄存器中的RDYEN位被使能后EPI会在每个EPI时钟EPICLK的上升沿采样iRDY引脚的状态。一旦采样到iRDY为低电平EPI会立即“冻结”其内部状态机暂停当前进行中的访问。所有相关的控制信号如CSn, OEn, WRn和地址/数据总线都会保持当前状态直到iRDY被PSRAM释放变为高电平EPI状态机才继续运行。实操心得使能RDYEN是连接PSRAM的必须步骤。如果不使能EPI会无视PSRAM的忙状态强行按照预设的固定等待周期进行访问在PSRAM执行刷新操作时进行读写必然导致数据错误。我曾在一个早期版本中漏配此位系统在高温下运行一段时间后就会出现零星的数据校验错误排查良久才发现是刷新冲突导致的。2.3 IRDYDLY精细化时序调优的关键理解了iRDY的作用下一个问题就是EPI应该在检测到iRDY变低后立即暂停还是可以“预判”一下稍等一两个周期再暂停这就是IRDYDLYInterrupt Ready Delay配置位的意义。它位于EPIHBnTIME寄存器中是一个2位的字段可以配置为1、2或3个EPI时钟周期。这个“延迟”并非指iRDY信号生效的延迟而是指从EPI采样到iRDY变低到EPI实际暂停总线访问之间的内部流水线延迟。你可以把它想象成刹车系统的反应时间。配置不同的IRDYDLY值会影响总线访问被“卡住”的精确时间点。为什么需要这个延迟这主要与外部电路的信号建立/保持时间以及PSRAM自身的WAIT信号有效窗口有关。如果IRDYDLY设置得过小如01代表1个周期延迟EPI的反应会非常灵敏但可能因为PCB走线延迟或信号抖动在iRDY信号还未完全稳定时就被采样导致不必要的短暂停顿。如果设置得过大如11代表3个周期延迟则可能在PSRAM已经发出等待请求后EPI还多进行了1-2个周期的无效操作浪费了总线带宽在高速访问时可能引发时序违例。配置建议IRDYDLY 01 (1周期)适用于信号质量非常好、走线短且PSRAM的WAIT信号建立时间很快的系统。追求极限性能时可以考虑但稳定性风险稍高。IRDYDLY 10 (2周期)这是最常用、最稳健的设置。它为信号传播和稳定留出了足够余量在绝大多数应用场景下都能可靠工作。IRDYDLY 11 (3周期)适用于信号完整性较差、有较长走线或较大容性负载的板级设计。以牺牲少许性能换取更高的稳定性。2.4 多设备共享iRDY总线与极性配置一个EPI接口可以连接多个PSRAM或其他支持iRDY的设备。为了节省引脚这些设备的WAIT引脚可以通过一个上拉电阻连接到一起再共同连接到MCU的iRDY输入引脚如EPI0S32形成一条“线与”Wire-AND总线。这样任何一个设备忙都会将整条线拉低通知MCU等待。这里有一个至关重要的细节所有连接到同一iRDY总线上的设备其WAIT信号的极性必须一致。大多数PSRAM的WAIT信号是低电平有效。因此我们需要通过EPIHBnCFG寄存器中的IRDYINV位来配置EPI模块对iRDY信号的采样逻辑。IRDYINV 0表示iRDY低电平有效常规配置。IRDYINV 1表示iRDY高电平有效。必须确保IRDYINV位的配置与所有连接的PSRAM的WAIT信号有效极性相匹配。同时PSRAM自身的配置寄存器CR中通常也有一个位例如CR[10]用来配置其WAIT输出信号的极性。必须保证EPI的IRDYINV和PSRAM CR中的极性配置位设置相同。极性反了流控就完全失效了会导致灾难性后果。3. PSRAM配置寄存器CR读写机制详解3.1 为何需要配置PSRAM的CRPSRAM伪静态随机存储器内部结构类似于DRAM需要定期刷新但其接口做得像SRAM一样简单。为了兼顾性能和兼容性PSRAM芯片内部通常有一个或多个配置寄存器Configuration Register, CR。通过CR我们可以设置其工作模式例如等待状态模式固定延迟还是可变延迟由WAIT引脚控制。突发长度连续读写时每次给出一个地址后内部能连续输出多少个数据。输出驱动强度。WAIT信号极性如前所述。在硬件上电复位后PSRAM通常处于一个默认的、保守的慢速模式。如果不通过CR将其配置为适合我们系统总线时序的高速模式如使能可变延迟突发模式其访问性能会大打折扣无法发挥EPI高速接口的优势。3.2 EPI与PSRAM CR的通信协议EPI模块为PSRAM CR的读写提供了专门的硬件支持。核心寄存器是EPIHBPSRAM。你可以把它看作一个数据中转站写CR时你将想要写入PSRAM CR的值共22位对应CR[21:0]先编程到EPIHBPSRAM寄存器中。然后通过设置对应片选配置寄存器如EPIHB16CFG中的WRCRE位来发起一次“特殊的写操作”。此时EPI会通过CREConfiguration Register Enable信号通知PSRAM并将EPIHBPSRAM中的数据通过数据线D[20:0]发送出去写入PSRAM的CR。读CR时你将想要读取的CR地址对于某些PSRAM可能需要指定CR内部地址写入EPIHBPSRAM寄存器的CR[19:18]位。然后设置RDCRE位发起一次“特殊的读操作”。PSRAM会将其CR当前的值通过数据线返回并锁存到EPIHBPSRAM寄存器的CR[15:0]位中。关键限制CR的读写操作只能在EPI工作于异步模式下进行。在同步模式下通常用于SDRAMCRE信号的行为是未定义的强行操作会导致错误。因此标准的配置流程是先以异步模式配置PSRAM的CR然后再根据需要切换到同步模式如果PSRAM支持且项目需要。3.3 PSRAM CR关键位域配置指南根据数据手册以下是对EPIHBPSRAM寄存器中几个关键位的配置说明这些配置必须与EPI主机总线的时序设置相匹配CR[19:18] 0x2这个值通常是一个“命令字”告诉PSRAM接下来的操作是针对其配置寄存器。具体值需查阅你所使用的PSRAM芯片数据手册0x2是一个常见值。CR[15] 0x1使能异步访问模式。这是我们使用EPI Host-Bus模式的基础。CR[14]此位控制PSRAM是否使用其WAITiRDY引脚来管理传输延迟。0使用iRDY信号。强烈推荐。这样PSRAM可以根据自身状态动态插入等待周期最灵活高效。1不使用iRDY信号使用固定的延迟。不推荐除非有特殊原因。CR[13:11]这三位配置PSRAM内部的读/写等待状态。这里是最容易出错的地方这三位设置的值必须与你在EPI的EPIHB16CFG和EPIHB16TIME寄存器中为对应片选设置的RDWS/WRWS等待状态数完全匹配。例如如果你设置EPI的固定读等待状态为4个时钟周期那么CR[13:11]也需要编程为对应的编码例如010b。不匹配会导致PSRAM和EPI对“数据何时有效”的认知不同必然导致读写错误。具体编码需查PSRAM手册。CR[10]配置PSRAM的WAIT输出信号极性。必须与EPI的IRDYINV位设置一致。CR[8] 0x1配置适当的等待配置。通常需要置1以使能完整的等待状态控制逻辑。CR[2:0] 0x7在EPI的PSRAM模式下访问是连续的突发访问。此值常用来设置最大的突发长度例如8个字以匹配EPI的突发优化特性。避坑指南CR配置的原子性。数据手册特别强调在PSRAM初始化后如果需要重新编程CR必须等待前一次传输无论是数据读写还是CR配置彻底完成才能开始新的CR配置序列。在代码中这意味着在设置WRCRE或RDCRE位后需要轮询一个标志位或等待足够的时间确保操作完成然后再进行下一步。我曾因为连续快速写入两个不同的CR值而导致PSRAM工作异常问题就是出在这里。4. EPI连接PSRAM的完整配置流程与代码实现下面我将结合一个实际的场景——为TM4C129DNCPDT配置一个16位、1MB的PSRAM假设型号为APS6404L详细展示从硬件连接到软件初始化的全过程。4.1 硬件连接与引脚映射首先根据数据手册的“Host-Bus 16-bit Muxed Interface”章节和芯片引脚定义完成原理图连接。以下是一个简化的连接表TM4C129 EPI 信号引脚名称 (示例)连接至 PSRAM (APS6404L)说明EPI0S0 - EPI0S15PE0 - PE7, PD0 - PD7DQ[15:0]16位数据总线低16位EPI0S16 - EPI0S31具体引脚需查表A[19:0]20位地址总线与数据复用EPI0S30PF3ALE地址锁存使能接74LVC16373锁存器使能端EPI0S28PF1OE# (输出使能)读选通EPI0S29PF2WE# (写使能)写选通EPI0S26PF0CS# (片选0)芯片选择低有效EPI0S32PK7WAIT/RDY关键PSRAM的等待信号需上拉--VCC, GND, VDDQ电源和地注意去耦电容注意事项地址锁存器由于是地址数据复用必须使用一片锁存器如74LVC16373。EPI的A[19:0]输出到锁存器输入锁存器输出接到PSRAM的地址引脚。ALE信号连接锁存器的锁存使能端。iRDY/WAIT引脚上拉PSRAM的WAIT引脚是开漏输出必须连接一个上拉电阻通常4.7kΩ - 10kΩ到VCC。信号完整性对于高速操作EPI时钟20MHz需要注意数据/地址走线的等长和阻抗控制减少反射和串扰。4.2 软件初始化步骤与代码解析以下是基于TivaWare驱动库的初始化代码并附有详细注释。#include stdint.h #include stdbool.h #include inc/hw_memmap.h #include inc/hw_types.h #include driverlib/epi.h #include driverlib/sysctl.h #include driverlib/gpio.h #define EPI_CLOCK_FREQ_HZ 50000000 // 假设EPI模块时钟为50MHz #define PSRAM_BASE_ADDRESS 0x60000000 // CS0n对应的外部存储空间基地址 void EPI_PSRAM_Init(void) { uint32_t ui32EPIClock; uint32_t ui32Temp; // 步骤1: 使能EPI和GPIO端口时钟 SysCtlPeripheralEnable(SYSCTL_PERIPH_EPI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // 假设部分EPI引脚在PA, 根据实际连接修改 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK); // iRDY引脚在PK // 等待外设就绪 while(!SysCtlPeripheralReady(SYSCTL_PERIPH_EPI0)); // 步骤2: 配置EPI引脚复用功能 // 具体引脚配置请根据你的硬件连接查阅数据手册的“Pin Mux”表格 // 例如配置PE0-PE7, PD0-PD7为EPI数据/地址线PF0-PF3为控制线PK7为iRDY输入 GPIOPinConfigure(GPIO_PK7_EPI0S32); // iRDY GPIOPinTypeEPI(GPIO_PORTK_BASE, GPIO_PIN_7); // ... 配置其他EPI引脚 ... // 步骤3: 配置EPI工作在Host-Bus 16位复用地址数据模式 ui32EPIClock SysCtlClockGet(); // 获取系统时钟 // 设置EPI时钟分频目标EPI时钟为50MHz。使用整数分频模式。 // EPI时钟 系统时钟 / (2 * (COUNT0 1))。假设系统时钟120MHzCOUNT01 120/(2*2)30MHz。这里需要计算。 // 为简化我们直接设置一个值。实际应根据系统时钟和目标EPI时钟计算。 EPIDivideSet(EPI0_BASE, ui32EPIClock, EPI_CLOCK_FREQ_HZ); // 禁用EPI模块以便配置 EPIDisable(EPI0_BASE); // 关键配置选择Host-Bus 16位复用模式 (MODE 0x13) // 同时必须将INTDIV置1使用整数分频模式这是Host-Bus模式的要求。 EPIModeSet(EPI0_BASE, EPI_MODE_HB16); // 更精细的模式配置需要通过EPIConfigHB16函数或直接写寄存器完成 // 我们使用直接寄存器访问来精确控制 // 步骤4: 配置Host-Bus 16位通用参数 (针对CS0n) // 首先为了安全地配置PSRAM的CR我们需要先将EPI时钟门控关闭进入异步配置模式 HWREG(EPI0_BASE EPI_O_HB16CFG) ~(EPI_HB16CFG_CLKGATE | EPI_HB16CFG_CLKGATEI); // 配置EPIHB16CFG寄存器 ui32Temp HWREG(EPI0_BASE EPI_O_HB16CFG); ui32Temp ~0xFF; // 清除MODE等低位字段 ui32Temp | EPI_HB16CFG_MODE_ADMUX; // 地址数据复用模式 (0x0) ui32Temp | EPI_HB16CFG_ALEHIGH; // ALE高电平有效 (根据锁存器极性调整) ui32Temp | EPI_HB16CFG_RDYEN; // **使能iRDY信号监控** ui32Temp | EPI_HB16CFG_WRWS_2; // 示例写等待状态设置为2个EPI时钟 (需匹配PSRAM CR) ui32Temp | EPI_HB16CFG_RDWS_2; // 示例读等待状态设置为2个EPI时钟 (需匹配PSRAM CR) // IRDYINV位取决于PSRAM的WAIT极性假设低有效则设为0默认 HWREG(EPI0_BASE EPI_O_HB16CFG) ui32Temp; // 步骤5: 配置EPIHB16TIME寄存器设置IRDYDLY等精细时序 ui32Temp 0; ui32Temp | (0x2 EPI_HB16TIME_IRDYDLY_S); // 设置IRDYDLY 2个时钟周期 (推荐值) // 设置RDWSM和WRWSM位与EPIHB16CFG中的RDWS/WRWS共同决定精确等待周期数 // 例如若RDWS2, RDWSM0查表可知读等待为4个EPI时钟。需与PSRAM CR[13:11]匹配。 ui32Temp | (0x0 EPI_HB16TIME_RDWSM_S); // 假设RDWSM0 ui32Temp | (0x0 EPI_HB16TIME_WRWSM_S); // 假设WRWSM0 HWREG(EPI0_BASE EPI_O_HB16TIME) ui32Temp; // 步骤6: 准备并写入PSRAM配置寄存器(CR) // 首先配置EPIHBPSRAM寄存器 ui32Temp 0; ui32Temp | (0x2 18); // CR[19:18] 0x2 (CR访问命令字具体查PSRAM手册) ui32Temp | (0x1 15); // CR[15] 1 (使能异步访问) ui32Temp | (0x0 14); // CR[14] 0 (使用iRDY信号) // CR[13:11] ? 需要根据EPI等待状态设置。假设我们设置的是4个时钟等待。 // 查PSRAM手册4个时钟等待对应的编码可能是010b。 ui32Temp | (0x2 11); // CR[13:11] 010b (示例) // CR[10] 0 (WAIT信号低有效)与EPI的IRDYINV0匹配 ui32Temp | (0x0 10); ui32Temp | (0x1 8); // CR[8] 1 (使能等待配置) ui32Temp | (0x7 0); // CR[2:0] 0x7 (设置突发长度例如8字突发) HWREG(EPI0_BASE EPI_O_HBPSRAM) ui32Temp; // 步骤7: 发起CR写操作 // 设置WRCRE位启动从EPIHBPSRAM到PSRAM CR的传输 HWREG(EPI0_BASE EPI_O_HB16CFG) | EPI_HB16CFG_WRCRE; // 等待WRCRE位自动清除表示传输完成 while(HWREG(EPI0_BASE EPI_O_HB16CFG) EPI_HB16CFG_WRCRE); // 步骤8: (可选) 验证CR是否写入成功 - 发起CR读操作 // 先设置要读的CR地址如果需要到EPIHBPSRAM的地址位 ui32Temp HWREG(EPI0_BASE EPI_O_HBPSRAM); ui32Temp ~(0x3 18); // 清除原有地址 ui32Temp | (0x2 18); // 再次设置CR[19:18]0x2 (读命令) HWREG(EPI0_BASE EPI_O_HBPSRAM) ui32Temp; // 设置RDCRE位启动读操作 HWREG(EPI0_BASE EPI_O_HB16CFG) | EPI_HB16CFG_RDCRE; while(HWREG(EPI0_BASE EPI_O_HB16CFG) EPI_HB16CFG_RDCRE); // 读取返回的CR值 ui32Temp HWREG(EPI0_BASE EPI_O_HBPSRAM); uint16_t usPSRAM_CR ui32Temp 0xFFFF; // CR值在低16位 // 可以比较usPSRAM_CR与预期值进行验证 // 步骤9: 重新使能EPI时钟门控退出异步配置模式进入正常工作模式 HWREG(EPI0_BASE EPI_O_HB16CFG) | (EPI_HB16CFG_CLKGATE | EPI_HB16CFG_CLKGATEI); // 步骤10: 可选使能突发(BURST)模式以提升连续访问性能 // 注意BURST位与等待状态配置位(RDWS/WRWS)不能同时设置需先清除等待状态位或根据模式选择 // 对于PSRAM突发模式通常使用可变延迟(iRDY)因此固定等待状态可能设为0然后使能BURST。 ui32Temp HWREG(EPI0_BASE EPI_O_HB16CFG); ui32Temp ~(EPI_HB16CFG_WRWS_M | EPI_HB16CFG_RDWS_M); // 清除固定等待状态设置 ui32Temp | EPI_HB16CFG_BURST; // 使能突发模式 HWREG(EPI0_BASE EPI_O_HB16CFG) ui32Temp; // 步骤11: 使能EPI模块 EPIEnable(EPI0_BASE); // 至此PSRAM已初始化完毕可以像访问普通内存一样访问0x60000000开始的地址了。 }4.3 关键时序波形分析与验证配置完成后最好能用逻辑分析仪或示波器抓取关键信号波形进行验证。主要关注以下几点ALE与地址/数据时序在地址周期ALE有效上升沿或下降沿取决于ALEHIGH配置地址信号应稳定在总线上。在数据周期ALE无效数据信号应稳定。iRDY信号行为在PSRAM访问期间观察iRDYWAIT信号。在PSRAM就绪时它应为高电平当PSRAM忙如刷新时应拉低。EPI的CSn、OEn等信号应在iRDY低电平期间保持延长。突发读写波形如果使能了BURST模式进行一次多字读写如*(uint32_t*)addr 0x12345678;观察是否在给出一个地址后连续产生了多个数据周期且CSn在整个突发期间保持有效。5. 常见问题排查与调试技巧在实际项目中配置EPI和PSRAM很少能一次成功。以下是我总结的常见问题及排查思路5.1 问题读写PSRAM数据全为0或0xFF或不稳定。排查思路1检查物理连接和电源用万用表检查所有数据线、地址线、控制线与PSRAM和锁存器的连接是否牢固有无短路/断路。测量PSRAM的VCC和VDDQ电压是否稳定且在规格书范围内。检查所有去耦电容通常每个电源引脚一个0.1uF是否焊接良好。排查思路2检查控制信号基本时序使用示波器单步执行一条写内存指令如*((volatile uint16_t*)0x60000000) 0xAA55;。观察CSn、ALE、WRn信号是否有有效跳变。如果CSn根本没拉低检查片选配置CSCFG和地址映射是否正确。观察ALE锁存边沿时刻地址线A[19:0]上是否有正确的地址输出应该是0x00000。观察WRn有效期间数据线D[15:0]上是否有0xAA55。排查思路3重点检查iRDY和CR配置iRDY未使能或极性错误如果RDYEN未使能或IRDYINV/PSRAM CR极性配反PSRAM的等待请求会被忽略。在逻辑分析仪上你会看到即使PSRAM拉低了WAITEPI的控制信号依然按固定周期结束可能导致在PSRAM输出无效数据时进行读取。确保RDYEN1且EPI与PSRAM的WAIT极性设置一致。CR配置不匹配这是最隐蔽的问题。如果PSRAM CR中设置的等待状态数CR[13:11]与EPI寄存器RDWS/WRWS及RDWSM/WRWSM中设置的不一致双方对“数据有效窗口”的认知就错位了。务必根据PSRAM数据手册的“AC Timing Characteristics”章节和EPI的时钟频率计算出所需的等待周期数并确保两端配置的编码完全对应。可以尝试将两边的等待周期都设为一个较大的保守值如7个周期进行测试。CR写入失败确保在写CR前关闭了EPI时钟门控CLKGATE0并在写完成后等待WRCRE位清零。可以通过读回CR值来验证。5.2 问题系统运行一段时间后访问PSRAM偶尔出错。排查思路刷新冲突与iRDY响应PSRAM内部需要定期自动新。如果一次读写操作恰好撞上了刷新周期PSRAM会通过拉低iRDY来插入等待。问题可能出在IRDYDLY设置不当。如果IRDYDLY设置得太小在iRDY信号因PCB噪声或振铃产生毛刺时EPI可能误采样到低电平插入不必要的等待打乱时序。如果IRDYDLY设置得太大在PSRAM刚拉低iRDY时EPI可能还在推进状态机导致在PSRAM准备好之前就试图读取数据。建议将IRDYDLY设置为210b这是一个在稳定性和性能间较好的平衡点。同时检查PCB上iRDY信号线的走线尽量短并远离噪声源可考虑串联一个小电阻如22欧姆阻尼反射。5.3 问题使能突发(BURST)模式后性能没有提升甚至出错。排查思路理解PSRAM突发模式下的等待状态数据手册明确指出在PSRAM突发模式下RDWS/WRWS定义的等待状态仅针对突发中的第一个访问。后续的访问都是单周期访问。这意味着如果你按照非突发模式的固定延迟来配置CR那么突发中第二个及以后的访问会因等待状态不足而失败。解决方案在PSRAM突发模式下必须使用可变延迟模式即依靠iRDY信号。在CR配置中确保CR[14]0使用iRDY并且将CR[13:11]设置为与EPI中为第一个访问所配置的等待状态相匹配的值。EPI侧的RDWS/WRWS也应设置为这个“首字延迟”值。突发中后续字的时序完全由iRDY信号动态控制。5.4 调试技巧使用内存测试算法编写一个简单的内存测试函数如Walking Bit走位、Address Test地址线测试、Data Bus Test数据总线测试等对PSRAM地址空间进行循环测试。一旦出错立刻记录出错地址和写入/读出的数据。通过分析错误模式如总是某一位出错、某个地址段出错可以反向推断是数据线连接问题、地址线连接问题还是控制时序问题。