GPMC时序配置深度解析:从理论到实践,确保外部存储器稳定通信
1. GPMC时序配置:从理论到实践的深度解析
在嵌入式系统开发中,尤其是涉及到高速数据采集、实时控制或者需要大容量外部存储的场景,处理器与外部存储器(如NOR Flash、NAND Flash、异步SRAM)之间的通信可靠性是项目成败的关键。很多工程师在初期可能会觉得,只要地址、数据线连对了,程序就能跑起来。但真正到了量产阶段,或者环境温度发生变化时,各种偶发的数据错误、系统死机问题就会接踵而至,其根源往往就出在时序配置这个“隐形杀手”上。
我处理过不少因为时序配置不当导致的棘手问题,比如在高温下NOR Flash读取偶尔出错,或者当系统负载变化时NAND的写入失败。追根溯源,都是因为对通用存储器控制器(GPMC)的时序参数理解不够深入,配置时只是照搬参考代码或粗略估算,没有根据具体的存储器手册进行精准计算和验证。今天,我们就以TI AM62L处理器的GPMC模块为例,彻底拆解其核心时序参数,特别是从最基础的读写周期时间(RDCYCLETIME/WRCYCLETIME)到灵活的WAIT信号控制,手把手带你掌握让外部存储器接口既稳定又高效的配置方法论。
2. GPMC时序模型与核心参数总览
在深入每个参数之前,我们必须建立一个清晰的时序模型概念。你可以把GPMC与外部存储器的通信,想象成两个人之间严谨的对话。处理器(GPMC)是发起方,存储器是接收方(或数据提供方)。每一次“对话”(即一次访问周期)都必须遵循严格的协议:什么时候发出邀请(片选有效),什么时候说出地址(地址建立),什么时候要求对方回答(读使能有效)或给出数据(写使能有效),以及这次对话持续多久(周期时间)。任何一个环节的时间点错位,都可能导致通信失败。
GPMC为了实现与各种速度、各种协议存储器的兼容,将一次访问周期分解成了多个可独立编程的时间段,每个时间段都以GPMC_FCLK(功能时钟)的周期数为单位。这些参数大致可以分为三类:
- 周期时间参数:定义整个访问的“总时长”,是其他所有信号动作的时间边界。主要包括
RDCYCLETIME(读周期时间)和WRCYCLETIME(写周期时间)。 - 控制信号时序参数:定义各个控制信号(如nCS, nADV/ALE, nOE/RE, nWE)何时有效(Assert)和何时无效(Deassert)。例如
CSONTIME,CSRDOFFTIME,OEONTIME等。 - 数据访问与等待参数:定义处理器何时采样数据(
RDACCESSTIME),以及如何利用存储器的WAIT信号进行动态流控(WAITMONITORINGTIME等)。
所有这些参数都围绕一个共同的参考点:访问开始时间(Start Access Time)。这是一个由GPMC内部确定的、一个访问周期开始的基准时刻,通常对应着地址线开始变得有效的那个GPMC_FCLK时钟沿。理解这一点至关重要,因为所有参数的计时都是从这个点开始算起的。
2.1 核心寄存器组与参数粒度
AM62L的GPMC为每个片选(Chip-Select)提供了7个主要的配置寄存器(CONFIG1_i到CONFIG7_i,其中i=0~3对应CS0~CS3),用来存放上述时序参数。在配置时,有两个全局性的设置会影响所有时间参数的计算:
TIMEPARAGRANULARITY(
GPMC_CONFIG1_i[4]):这个位决定了大多数时间参数的单位是1个还是2个GPMC_FCLK周期。当设置为0时,粒度是1个周期;设置为1时,粒度是2个周期。这主要是为了兼容那些时序要求是时钟周期整数倍的老式存储器。在计算时,务必先确认此位的设置,否则所有参数值都会差一倍。GPMCFCLKDIVIDER(
GPMC_CONFIG1_i[1:0]):这个字段决定了输出给同步存储器的时钟GPMC_CLKOUT的频率。GPMC_CLKOUT = GPMC_FCLK / (Divider + 1),其中Divider可为0,1,2,3,对应1、2、3、4分频。这直接影响同步模式下的所有时序计算,因为存储器的动作是以GPMC_CLKOUT为基准的,而GPMC自身的配置参数仍以GPMC_FCLK为基准。
3. 读写周期时间:一切时序的基石
RDCYCLETIME和WRCYCLETIME是整个时序配置的“总闸门”。它们定义了从访问开始,到整个读或写操作必须完成的最长时间。这两个参数位于GPMC_CONFIG5_i寄存器中。
3.1 参数定义与强制解除断言机制
RDCYCLETIME(GPMC_CONFIG5_i[4:0]): 定义了读访问周期的总时长(以GPMC_FCLK周期计,并考虑粒度)。WRCYCLETIME(GPMC_CONFIG5_i[12:8]): 定义了写访问周期的总时长。
这两个参数有一个非常关键且有时会被忽略的作用:强制解除断言(Forced Deassertion)。当RDCYCLETIME或WRCYCLETIME结束时,如果某些控制信号(如nCS, nADV, nOE, nWE)根据其各自的*OFFTIME参数还没有到解除断言的时间,GPMC会强制将它们拉回到无效状态(复位值)。这个机制确保了访问周期不会无限制地延长,是防止总线挂起的安全网。
那么,什么情况下不会强制解除断言呢?当存在一个到相同或不同片选的流水线(Pipelined)访问请求时。如果后一个请求的断言时间参数(*ONTIME)为0,那么当前正在有效的控制信号可以保持有效,直接服务于下一个访问。这样做避免了信号线上不必要的毛刺(Glitch),对于提升背靠背(Back-to-Back)访问的效率至关重要。这对于BE(字节使能)信号尤其有用,可以避免在流水线请求间产生无效的跳变。
3.2 周期时间的计算与配置要点
配置周期时间的首要原则是:它必须大于或等于该次访问中,最后一个动作完成所需的时间。
对于一个读周期,最后一个动作通常是GPMC在RDACCESSTIME时刻采样数据,并需要一定的保持时间。因此,RDCYCLETIME必须满足:RDCYCLETIME >= RDACCESSTIME + 数据保持时间(通常为0或1个周期)
对于一个写周期,最后一个动作是存储器在WEOFFTIME之后锁存数据,因此:WRCYCLETIME >= WEOFFTIME
实操心得一:周期时间的“松弛”设置在实际项目中,我通常会先根据存储器数据手册(Datasheet)计算出一个理论最小值,然后在此基础上增加1到2个GPMC_FCLK周期的余量。这个余量被称为“松弛(Slack)”,用于抵消PCB走线延迟、信号完整性抖动以及温度电压变化带来的影响。在可靠性要求高的工业产品中,这点余量是值得的。当然,在极端追求带宽的场景下,你需要通过示波器测量眼图来精确收紧这个时间。
注意事项:空闲周期与时钟停止如果需要在连续访问之间插入空闲周期(通过CYCLE2CYCLESAMECSEN或CYCLE2CYCLEDIFFCSEN使能,并由CYCLE2CYCLEDELAY设置周期数),那么在空闲周期内,所有控制信号都会被强制设置为无效状态。同时,在异步访问模式下,GPMC_CLKOUT始终保持低电平;在同步访问模式下,GPMC_CLKOUT会在周期时间结束时停止,并在访问间隙保持为低。这里有一个坑:如果GPMC_CLKOUT在周期时间结束时正好为高电平(由于分频比导致),为了满足50%占空比停止的要求,你必须适当延长RDCYCLETIME或WRCYCLETIME的值,直到GPMC_CLKOUT变为低电平再结束周期。手册中的CAUTION部分明确指出了这一点。
4. 精细化的控制信号时序配置
周期时间画出了时间框,而控制信号时序则决定了框内每一个动作的精确节奏。GPMC为每个主要控制信号都提供了独立的断言和解除断言时间控制。
4.1 片选信号nCS的时序控制
片选信号是存储器操作的“开关”,其时序至关重要。
CSONTIME(GPMC_CONFIG2_i[3:0]): 从访问开始到nCS有效的延迟。这常用于满足存储器对“地址建立到片选有效”的时间要求(t_AS)。CSRDOFFTIME(GPMC_CONFIG2_i[12:8]): 读访问时,从访问开始到nCS无效的延迟。这定义了片选无效后,地址需要保持的时间(t_AH)。CSWROFFTIME(GPMC_CONFIG2_i[20:16]): 写访问时,从访问开始到nCS无效的延迟。
关键参数:CSEXTRADELAY(GPMC_CONFIG2_i[7])这是一个非常实用的“微调”功能。当此位置1时,所有nCS信号的边沿(包括由CSONTIME、CSRDOFFTIME、CSWROFFTIME控制的边沿)都会额外延迟半个GPMC_FCLK周期。它的核心价值在于:当GPMC_CLKOUT与GPMC_FCLK同频时,为控制信号相对于时钟边沿的建立(Setup)和保持(Hold)时间提供了更精细的调整能力。例如,如果你发现数据在时钟沿采样不稳定,尝试开启这个半周期延迟,可能会改善时序裕量。
警告:使用CSEXTRADELAY时必须谨慎!因为它延迟了nCS的解除断言,你必须确保RDCYCLETIME/WRCYCLETIME大于这个被延迟后的解除断言时间。否则,在流水线访问不同片选时,可能会导致前一个片选还未完全无效,后一个片选就已有效,造成信号重叠和总线冲突。
4.2 地址有效/锁存使能信号nADV/ALE
对于需要地址锁存的设备(如许多NOR Flash和NAND Flash),nADV(地址有效)或ALE(地址锁存使能)信号是关键。
ADVONTIME/ADVRDOFFTIME/ADVWROFFTIME: 控制nADV/ALE的时序,逻辑与nCS类似。ADVEXTRADELAY: 与CSEXTRADELAY作用相同,但作用于nADV/ALE信号。
针对AAD复用模式的特殊参数在地址-地址-数据复用模式(常用于某些NAND Flash)下,一次传输需要两个地址阶段。GPMC为此提供了独立的时序参数:
ADVAADMUXONTIME:控制第一个地址阶段nADV的断言时间。ADVAADMUXRDOFFTIME/ADVAADMUXWROFFTIME:分别控制读和写时第一个地址阶段nADV的解除断言时间。
重要规则:ADVAADMUXxxOFFTIME必须设置为小于或等于对应的ADVxxOFFTIME。如果两个阶段之间不需要nADV产生一个高脉冲(同步模式下的典型情况),可以将它们设置为与ADVONTIME相同的值,这样nADV会持续保持有效。
4.3 输出使能nOE与写使能nWE
OEONTIME/OEOFFTIME: 仅用于读访问,控制nOE(输出使能)或nRE(读使能)的时序。OEONTIME定义了地址建立到读命令有效的时间,OEOFFTIME则关系到读命令无效后地址/数据的保持时间。WEONTIME/WEOFFTIME: 仅用于写访问,控制nWE(写使能)的时序。WEONTIME和WEOFFTIME必须满足存储器数据手册中对写脉冲宽度(t_WP)的要求。OEEXTRADELAY/WEEXTRADELAY: 分别为nOE和nWE提供半个GPMC_FCLK周期的微调延迟,用途和注意事项与CSEXTRADELAY相同。
对于AAD复用模式下的nOE:
OEAADMUXONTIME/OEAADMUXOFFTIME用于控制第一个地址阶段(此时nOE为低,表示传输的是地址)的nOE时序。- 必须确保
OEAADMUXOFFTIME<OEONTIME。这是因为在AAD协议中,在两个地址阶段之间,nOE必须有一个从低到高再变低的跳变来区分它们。如果两者相等,则无法产生这个必要的脉冲。
5. 数据访问时间与页突发访问时间
这是时序配置中直接关系到数据能否被正确采样的部分。
5.1 读/写访问时间 (RDACCESSTIME/WRACCESSTIME)
RDACCESSTIME(GPMC_CONFIG5_i[20:16]): 定义了从访问开始,到GPMC采样第一个数据的GPMC_FCLK上升沿之间的周期数。- 异步读模式:此参数必须设置为大于等于存储器数据手册中
t_ACC(读取访问时间)的GPMC_FCLK周期数(向上取整)。这是最核心的计算之一。 - 同步读模式:它定义了到第一个用于数据采样的
GPMC_CLKOUT上升沿对应的GPMC_FCLK周期。此时,RDCYCLETIME必须大于RDACCESSTIME,以确保GPMC有足够的时间用内部重定时的时钟锁存最后一个返回的数据。
- 异步读模式:此参数必须设置为大于等于存储器数据手册中
WRACCESSTIME(GPMC_CONFIG6_i[28:24]): 在同步写模式下,它定义了从访问开始到存储器用于捕获第一个数据的GPMC_CLKOUT上升沿的周期数。在异步写模式下,此参数不用于定义写访问时间,而是用作一个“等待无效时间窗口”,我们将在WAIT信号部分详细解释。
5.2 页突发访问时间 (PAGEBURSTACCESSTIME)
PAGEBURSTACCESSTIME(GPMC_CONFIG5_i[27:24]): 此参数控制页模式(异步)或突发模式(同步)下,连续数据字(Word)之间的间隔。- 异步页读模式:它定义了两次数据采样之间的延迟,其值应大于等于存储器的页模式访问时间(如
t_PACC)。 - 同步突发读/写模式:它定义了突发传输中连续数据节拍(Beat)之间的间隔。
- 异步页读模式:它定义了两次数据采样之间的延迟,其值应大于等于存储器的页模式访问时间(如
一个关键的计算规则:为了确保GPMC_CLKOUT的时钟周期完整,(RDCYCLETIME - CLKACTIVATIONTIME)和PAGEBURSTACCESSTIME的值必须是(GPMCFCLKDIVIDER + 1)的整数倍。这是因为GPMC_CLKOUT是由GPMC_FCLK分频得来的,数据采样边沿需要对齐到GPMC_CLKOUT的完整周期。
6. WAIT信号:动态时序控制的灵魂
WAIT信号是GPMC与慢速存储器协同工作的“握手”机制。它允许存储器主动告诉GPMC:“我还没准备好,请再等一下”。这极大地增强了接口的灵活性和对低速设备的兼容性。
6.1 WAIT信号监控原理
GPMC通过GPMC_WAIT引脚监控外部存储器的准备状态。其工作流程如下:
- GPMC启动一次访问。
- 在预定的采样点(由
WAITMONITORINGTIME等参数决定)之前,GPMC会检测GPMC_WAIT引脚的电平。 - 如果
WAIT信号为有效(低电平),表示存储器未就绪,GPMC会插入等待周期(Wait State),并持续检测,直到WAIT变为无效(高电平)。 WAIT无效后,GPMC在下一个合适的时钟沿完成数据采样或驱动。
6.2 关键配置参数与模式
WAITMONITORINGTIME: 此参数定义了GPMC开始监控WAIT引脚的时间点(从访问开始算起)。它必须设置得足够早,以便在数据采样发生前就能捕获到存储器的“未就绪”状态。WAITREADMONITORING/WAITWRITEMONITORING: 这两个位分别独立启用读和写访问时的WAIT引脚监控功能。
WAIT信号与访问时间的协同RDACCESSTIME、WRACCESSTIME和PAGEBURSTACCESSTIME这三个参数,在与WAIT信号结合使用时,定义了一个“时间窗口”:
- GPMC会在这个“访问时间”参数定义的时刻之前(具体提前量由
WAITMONITORINGTIME决定)去采样WAIT信号。 - 如果
WAIT有效,则GPMC会暂停内部计时器,不断插入等待周期,直到WAIT无效。然后,从WAIT无效的那个周期开始,再经过原本RDACCESSTIME等参数规定的延迟后,才进行数据操作。 - 对于异步写:
WRACCESSTIME本身不定义写数据时间,而是定义了这个“等待无效时间窗口”的结束点。GPMC需要确保在WRACCESSTIME结束前至少2个GPMC_CLKOUT周期,WAIT引脚已经处于稳定有效的状态(高电平,表示准备好),否则可能会出错。
6.3 实操中的WAIT信号使用技巧
技巧一:应对低速存储器的法宝当你使用的存储器(尤其是老式NOR Flash或低速SRAM)的读访问时间(t_ACC)长于你系统期望的最小周期时,WAIT信号是唯一的选择。你可以将RDACCESSTIME设置为一个较小的值(比如最小值),然后依靠存储器拉低WAIT线来延长实际访问时间。这样,在访问快速存储器时不会损失性能,在访问慢速存储器时又能保证正确性。
技巧二:硬件连接与上拉GPMC_WAIT引脚通常需要连接一个上拉电阻(例如10kΩ)。这样,当目标存储器不支持或未启用WAIT功能时,该引脚始终为高(就绪状态),不会影响访问。对于支持WAIT的存储器,其WAIT/RY/BY#引脚通常是开漏输出,必须依靠这个上拉电阻才能产生高电平。
踩过的坑:WAIT监控时间设置过晚在一次调试中,系统读取NAND Flash ID正常,但读取数据经常出错。用逻辑分析仪抓取波形发现,NAND Flash的R/B#引脚(作为WAIT)很早就变高了,但GPMC似乎没“看到”。最终发现是WAITMONITORINGTIME设置得太晚,GPMC在开始监控WAIT状态时,存储器的忙状态已经结束了,但监控窗口可能已经错过。将WAITMONITORINGTIME适当提前后问题解决。教训:WAITMONITORINGTIME一定要早于存储器可能拉低WAIT信号的最早时间点,并留出足够余量。
7. 同步与异步访问模式下的时序配置差异
理解同步和异步模式的根本区别,是正确配置时序的前提。
7.1 异步模式特点
- 无
GPMC_CLKOUT:GPMC_CLKOUT时钟不对外提供,保持低电平。所有时序都以GPMC_FCLK为绝对时间基准。 - 控制信号直接控制:nOE、nWE等信号直接作为存储器的读/写触发边沿。
- 时序计算相对直接:主要关心信号之间的相对延迟(如nCS有效到nWE有效的延迟
t_CSW,nWE的脉冲宽度t_WP),并将其转换为GPMC_FCLK周期数。 - 页模式支持:支持异步页读(Page Read),通过
PAGEBURSTACCESSTIME控制页内连续读的速率。
7.2 同步模式特点
- 有时钟
GPMC_CLKOUT:GPMC会向存储器提供时钟,所有数据在时钟边沿采样。 - 时钟激活延迟:
CLKACTIVATIONTIME参数定义了从访问开始到GPMC_CLKOUT开始输出的延迟。 - 时序围绕时钟展开:
RDACCESSTIME、WRACCESSTIME等参数现在定义的是相对于GPMC_CLKOUT边沿的时间。计算时需要考虑GPMC_FCLK与GPMC_CLKOUT的分频关系。 - 支持突发(Burst)传输:可以连续传输多个数据,提升带宽。
- 对建立/保持时间要求更严:需要仔细配置
CSEXTRADELAY、ADVEXTRADELAY等参数,确保控制信号(nCS, nADV)相对于GPMC_CLKOUT有足够的建立和保持时间。
配置选择建议:
- 对于低速的NOR Flash、SRAM,异步模式简单可靠。
- 对于需要较高带宽,或存储器本身是同步器件(如同步突发SRAM,某些高速NAND),应选择同步模式。
- 特别注意:AM62L GPMC的异步模式不支持页写(Page Write)。即使使能了
WRITEMULTIPLE,如果WRITETYPE是异步的,GPMC也只会执行单次写操作。
8. 实战:为一个异步NOR Flash配置时序
假设我们要为一片典型的16位宽、异步页模式NOR Flash(型号假设为 M29W160)配置GPMC时序。我们从其数据手册中提取关键时序参数(数值为举例):
t_ACC(读访问时间): 90nst_CE(片选到输出有效): 90nst_OE(输出使能到输出有效): 35nst_OH(输出保持时间): 15nst_WP(写脉冲宽度): 50nst_AS(地址建立到写使能有效): 15nst_AH(写使能无效后地址保持时间): 15ns
系统条件:GPMC_FCLK = 100 MHz (周期 T = 10ns),TIMEPARAGRANULARITY = 0(粒度1周期)。
步骤1:确定基本时间单位1个GPMC_FCLK周期 = 10ns。我们将所有时间参数转换为周期数,并向上取整。
步骤2:计算读时序关键参数
RDACCESSTIME:必须 >=t_ACC/ T = 90ns / 10ns = 9个周期。我们设置为10,留出余量。CSONTIME:地址建立到nCS有效的时间。通常可以设为0或1。设为1个周期(10ns),满足t_AS。CSRDOFFTIME:读访问nCS无效时间。它必须晚于数据被采样之后。至少为RDACCESSTIME+ 数据保持时间。数据保持t_OH需要1.5个周期,向上取整为2。所以CSRDOFFTIME >= 10 + 2 = 12。我们设为13。OEONTIME:地址建立到nOE有效的时间。它必须 >=t_CE-t_OE?不,更关键的是要保证nOE有效前,地址已稳定足够久。通常OEONTIME可以等于或略大于CSONTIME。我们设为2个周期(20ns),这远大于t_AS(15ns)。OEOFFTIME:nOE无效时间。它必须早于nCS无效,且满足t_OH。我们可以设OEOFFTIME = RDACCESSTIME + 1 = 11(在采样后1个周期关闭nOE)。RDCYCLETIME:总读周期时间。必须大于CSRDOFFTIME。我们设为CSRDOFFTIME + 1 = 14个周期。
步骤3:计算写时序关键参数
WEONTIME:地址建立到nWE有效的时间。必须 >=t_AS/ T = 1.5 -> 2个周期。WEOFFTIME:nWE无效时间。必须满足写脉冲宽度t_WP。WEOFFTIME - WEONTIME >= t_WP / T = 5个周期。如果我们设WEONTIME=2, 那么WEOFFTIME >= 7。我们设为8。CSWROFFTIME:写访问nCS无效时间。必须晚于WEOFFTIME,且满足t_AH。设CSWROFFTIME = WEOFFTIME + 2 = 10。WRCYCLETIME:总写周期时间。必须大于CSWROFFTIME。设为CSWROFFTIME + 1 = 11。
步骤4:配置页模式(如果需要)如果使用页读模式,需要配置PAGEBURSTACCESSTIME。假设Flash的页模式访问时间t_PACC = 25ns。则PAGEBURSTACCESSTIME >= 25ns / 10ns = 2.5 -> 3个周期。
步骤5:寄存器值汇总(CS0为例)将上述周期数转换为寄存器字段值(注意有些字段位宽可能只有4位或5位,需确保值在范围内):
GPMC_CONFIG5:RDCYCLETIME = 14,WRCYCLETIME = 11,RDACCESSTIME = 10,PAGEBURSTACCESSTIME = 3GPMC_CONFIG2:CSONTIME = 1,CSRDOFFTIME = 13,CSWROFFTIME = 10GPMC_CONFIG4:OEONTIME = 2,OEOFFTIME = 11,WEONTIME = 2,WEOFFTIME = 8GPMC_CONFIG1: 设置READTYPE=0(异步读),WRITETYPE=0(异步写),TIMEPARAGRANULARITY=0。
最后验证:用逻辑分析仪或示波器抓取实际波形,测量关键的t_ACC、t_WP等时间,与Flash数据手册对比,确保有足够的建立、保持时间裕量(通常建议>20%)。如果没有仪器,可以通过编写内存测试程序(如 walking 1/0, checkerboard等)进行长时间压力测试,确保数据可靠性。
9. 常见问题排查与调试技巧
即使按照手册计算配置,实际硬件上仍可能出问题。以下是几个常见故障点和排查思路:
问题1:读取数据全为0xFF或随机错误。
- 可能原因1:时序过于紧张,建立/保持时间不足。这是最常见的原因。特别是
RDACCESSTIME设置过小,GPMC在数据稳定前就进行了采样。- 排查:增大
RDACCESSTIME和RDCYCLETIME。检查OEONTIME是否足够,确保nOE有效前地址已稳定。
- 排查:增大
- 可能原因2:WAIT信号功能异常。如果使能了WAIT监控,但WAIT引脚始终为高(未连接或上拉太强),而
RDACCESSTIME又设得太短,则会导致采样过早。- 排查:测量
GPMC_WAIT引脚波形,确认其在访问期间能被存储器正确拉低。检查WAITMONITORINGTIME设置是否合理。
- 排查:测量
- 可能原因3:硬件连接问题。数据线、地址线虚焊或短路。
- 排查:检查PCB焊接,测量信号线连通性。确认存储器供电电压和电流正常。
问题2:写入失败,数据未被存储。
- 可能原因1:写使能脉冲宽度
t_WP不足。WEOFFTIME - WEONTIME计算值小于存储器要求的t_WP。- 排查:增大
WEOFFTIME或减小WEONTIME,以增加nWE的有效脉冲宽度。用示波器测量nWE的实际低电平时间。
- 排查:增大
- 可能原因2:写保护(WP#)引脚未正确处理。某些Flash有写保护引脚,需要拉高才能写入。
- 排查:检查硬件原理图,确认写保护引脚电平。
- 可能原因3:异步模式下达成了页写条件。如前所述,AM62L GPMC异步模式不支持页写。如果软件发起了连续写操作,可能会被GPMC拆分成多个单次写,但若时序配置是按页写假设的,则可能出错。
- 排查:确认
WRITETYPE为异步时,WRITEMULTIPLE位是否被错误使能。或者考虑改用同步模式进行连续写。
- 排查:确认
问题3:背靠背访问时发生数据冲突或总线错误。
- 可能原因:控制信号重叠。当使能了
CSEXTRADELAY、ADVEXTRADELAY等延迟,但RDCYCLETIME/WRCYCLETIME设置得不够大,导致前一个访问的信号还没无效,后一个访问的信号就已有效。- 排查:检查所有带
*EXTRADELAY的位。确保周期时间参数大于所有控制信号的解除断言时间(包括额外的半周期延迟)。可以尝试暂时关闭*EXTRADELAY功能进行测试。
- 排查:检查所有带
- 可能原因:
CYCLE2CYCLEDELAY设置过小或未使能。如果需要在不同片选或相同片选的访问间插入空闲周期,但没有正确配置,也可能导致冲突。- 排查:根据存储器要求,合理配置
CYCLE2CYCLESAMECSEN、CYCLE2CYCLEDIFFCSEN和CYCLE2CYCLEDELAY。
- 排查:根据存储器要求,合理配置
调试技巧:利用GPMC调试功能AM62L GPMC可能提供了一些调试寄存器或状态位(具体请查阅TRM),可以查看当前访问状态、错误标志等。在软件中,在GPMC访问前后加入打印或点灯代码,可以帮助定位是配置问题还是访问流程问题。
终极工具:逻辑分析仪一个支持高速采样的逻辑分析仪是调试GPMC时序不可或缺的工具。通过抓取GPMC_FCLK、GPMC_CLKOUT、nCS、nOE、nWE、ADDR、DATA、WAIT 等所有相关信号,你可以直观地看到每个信号边沿的相对位置,精确测量出t_ACC、t_WP等时间,并与数据手册及你的配置计算值进行比对。这是验证时序配置是否正确的黄金标准。
