1. 项目概述:为什么需要深究GPMC时序参数?
在嵌入式系统开发,尤其是基于TI Sitara系列处理器的项目中,与外部存储器(如NOR Flash、SRAM、FPGA配置芯片)的通信是基础且关键的一环。通用内存控制器(GPMC)作为处理器与这些外部设备之间的“交通警察”,其配置的精细程度直接决定了系统的稳定性、性能和功耗。很多工程师在初次接触GPMC时,往往只关注地址映射、数据宽度等基本配置,而对时序参数的配置感到头疼,要么直接套用参考设计,要么随意填写几个值,导致系统在低温、高温或批量生产时出现偶发性读写错误,排查起来犹如大海捞针。
实际上,GPMC的时序参数配置,本质上是在用数字逻辑去“模拟”一个符合特定存储器芯片物理电气特性的通信协议。每一个参数,如OEONTIME、WEOFFTIME,都对应着时序图上一个关键信号边沿相对于内部时钟GPMC_FCLK的位置。配置不当,轻则通信效率低下,无法发挥存储器最大带宽;重则建立/保持时间不满足,导致数据采样错误,系统无法启动或运行中崩溃。本文将从一线开发者的视角,深入剖析GPMC控制器中OE_RE、WE与GPMC_CLK这几个核心控制信号的时序参数,不仅告诉你每个寄存器位是干什么的,更会结合常见的NOR Flash和SRAM芯片手册,解释“为什么”要这么配置,并分享从实际项目中总结出的配置心得与避坑指南。
2. 核心时序参数详解:OE_RE与WE信号
OE_RE(Output Enable / Read Enable)和WE(Write Enable)是GPMC与存储器通信中最直接的两个命令信号。OE_RE拉低指示读周期开始,WE拉低指示写周期开始。它们的断言(Assertion,即变为有效电平)和取消断言(Deassertion,即恢复无效电平)时机,直接关系到地址和数据总线的稳定窗口,是时序配置的重中之重。
2.1 OE_RE信号时序参数解析
OE_RE信号的时序主要由GPMC_CONFIG4寄存器的以下几组参数控制,它们均以GPMC_FCLK的周期数为单位。
1. OEONTIME (Output Enable ON TIME)
- 寄存器位:
GPMC_CONFIG4_i[3:0](i=0~5,对应6个片选) - 定义:从访问开始时间(Start Access Time)到
OE_RE信号断言(拉低)之间的GPMC_FCLK周期数。 - 核心作用:控制地址建立时间(Address Setup Time to OE)。在
OE_RE有效前,地址总线必须已经稳定了一段时间,这个时间就是由OEONTIME来保证的。它决定了地址信号提前于读命令有效的时间。 - 配置要点:此参数仅用于读访问。其值必须大于或等于存储器芯片手册中规定的
t_{AA}(地址访问时间)或t_{OE}(输出使能有效时间)对应的时钟周期数。通常,我们需要将芯片手册中的纳秒(ns)时间,转换为GPMC_FCLK的周期数。例如,若GPMC_FCLK = 100 MHz (周期10 ns),存储器要求t_{OE} = 15 ns,则OEONTIME至少需要设置为ceil(15 ns / 10 ns) = 2个周期。
2. OEOFFTIME (Output Enable OFF TIME)
- 寄存器位:
GPMC_CONFIG4_i[12:8] - 定义:从访问开始时间到
OE_RE信号取消断言(拉高)之间的GPMC_FCLK周期数。 - 核心作用:控制地址保持时间(Address Hold Time after OE)。在
OE_RE无效后,地址总线还需要保持稳定一段时间,以确保最后一个数据被可靠读取。 - 配置要点:同样仅用于读访问。其值必须大于存储器要求的
t_{OH}(输出保持时间)。它和OEONTIME共同定义了一个读数据有效的窗口。OEOFFTIME必须大于OEONTIME。
3. OEEXTRADELAY (Output Enable Extra Delay)
- 寄存器位:
GPMC_CONFIG4_i[7] - 定义:一个使能位。当置为1时,所有控制
OE_RE信号跳变的参数(如OEONTIME、OEOFFTIME)的实际生效时间,都会额外延迟半个GPMC_FCLK周期。 - 核心作用:提供更精细的时序调整粒度。当
GPMC_CLK与GPMC_FCLK同频时,控制信号的跳变与时钟边沿可能对齐,导致建立/保持时间裕量不足。这半个周期的延迟可以将信号跳变移到时钟沿之间,从而增加时序裕量。 - 重大注意事项(避坑点):
- 信号重叠风险:启用
OEEXTRADELAY会延长OE_RE信号的有效时间。如果连续访问不同的片选(Chip Select),必须确保RDCYCLETIME(读周期时间)大于包含了这半个周期延迟的OEOFFTIME,否则上一个片选的OE_RE可能还未取消断言,下一个片选的访问就开始了,造成信号冲突。 - 计算影响:在计算
OEOFFTIME等参数时,如果启用了OEEXTRADELAY,需要意识到实际的取消断言时间 =OEOFFTIME+ 0.5个GPMC_FCLK周期。
- 信号重叠风险:启用
4. OEAADMUXONTIME/OEAADMUXOFFTIME
- 寄存器位:
GPMC_CONFIG4_i[6:4]和GPMC_CONFIG3_i[15:13] - 定义:专用于地址-地址-数据复用(AAD-Multiplexed)协议的
OE_RE第一次断言/取消断言时间。在AAD复用模式下,一次读操作中OE_RE会断言两次:第一次用于锁存高地址(MSB Address),第二次才是真正的读命令。 - 核心作用:分别控制第一次地址阶段的
OE_RE时序。 - 关键约束:
OEAADMUXOFFTIME必须小于OEONTIME。这是因为AAD协议要求,在第一次OE_RE取消断言(结束高地址传输)后,必须经过一个OE_RE为高的地址阶段(传输低地址),之后才能再次断言OE_RE开始读数据。如果OEAADMUXOFFTIME大于或等于OEONTIME,则两个OE_RE脉冲可能重叠,协议时序错误,功能将不可预测。
2.2 WE信号时序参数解析
WE信号的时序由GPMC_CONFIG4寄存器的另一组参数控制,逻辑与OE_RE类似,但专用于写操作。
1. WEONTIME (Write Enable ON TIME)
- 寄存器位:
GPMC_CONFIG4_i[19:16](i=0~3) - 定义:从访问开始时间到
WE信号断言(拉低)之间的GPMC_FCLK周期数。 - 核心作用:控制地址建立时间(Address Setup Time to WE)。确保在
WE有效、存储器开始接收数据之前,地址总线已经稳定。
2. WEOFFTIME (Write Enable OFF TIME)
- 寄存器位:
GPMC_CONFIG4_i[28:24] - 定义:从访问开始时间到
WE信号取消断言(拉高)之间的GPMC_FCLK周期数。 - 核心作用:控制数据保持时间(Data Hold Time after WE)。在
WE无效后,写入存储器的数据还需要在数据总线上保持稳定一段时间,以确保被可靠写入。它也隐含了地址的保持时间。
3. WEEXTRADELAY (Write Enable Extra Delay)
- 寄存器位:
GPMC_CONFIG4_i[23] - 定义与作用:与
OEEXTRADELAY完全类似,为WE信号的跳变提供半个GPMC_FCLK周期的延迟,用于改善写操作时的时序裕量。 - 同样的避坑点:启用后,必须确保
WRCYCLETIME(写周期时间)大于包含了延迟的WEOFFTIME,防止跨片选访问时的WE信号重叠。
实操心得:如何确定OEONTIME/OEOFFTIME的初始值?假设我们连接一颗异步SRAM,其关键时序参数如下(摘自某型号SRAM数据手册):
t_{RC}(读周期时间): 55 nst_{AA}(地址访问时间): 55 nst_{OHA}(输出保持时间): 3 nst_{OE}(输出使能访问时间): 25 nst_{OHZ}(输出禁止时间): 15 ns我们的
GPMC_FCLK配置为100 MHz (10 ns周期)。
- 计算
OEONTIME:它主要需满足t_{OE}。t_{OE}=25 ns,对应ceil(25 ns / 10 ns) = 3个周期。但OEONTIME是从访问开始算起,而t_{OE}是从OE有效算起。我们还需要考虑地址建立时间。���个保守的配置是,让OE在地址稳定后再有效。假设CSONTIME(片选有效时间)设为2,那么OEONTIME可以设为3或4,确保地址有1-2个周期的稳定时间后再发读命令。- 计算
OEOFFTIME:它必须大于OEONTIME,且整个读周期RDCYCLETIME必须大于SRAM的t_{RC}(55 ns,即6个周期)。OEOFFTIME决定了OE何时关闭,它应晚于数据读取完成的时间。通常,OEOFFTIME可以设置为比OEONTIME大1-2个周期,例如OEONTIME=3,则OEOFFTIME=5。然后我们需要用RDCYCLETIME来满足总的t_{RC}要求。- 验证:最终需要结合
CSONTIME、CSRDOFFTIME、RDACCESSTIME等参数一起绘制时序图或通过配置工具计算,确保所有建立/保持时间均满足芯片要求,并留有足够裕量(建议20%以上)。
3. GPMC_CLK时钟信号的控制与同步时序
在同步访问模式下,GPMC_CLK是输出给外部同步存储器的时钟信号,所有数据的采样都以此时钟为基准。因此,对GPMC_CLK的控制是同步接口配置的核心。
3.1 GPMC_CLK的生成与激活
1. GPMCFCLKDIVIDER (Clock Divider)
- 寄存器位:
GPMC_CONFIG1_i[1:0] - 定义:定义
GPMC_CLK相对于GPMC_FCLK的分频比。可选1、2、4、8分频。 - 核心作用:降低外部存储器的工作频率。许多同步SRAM或NOR Flash支持的最高时钟频率低于处理器的
GPMC_FCLK。通过此分频器,可以产生适合外设的时钟。例如,GPMC_FCLK = 100 MHz,设置2分频,则GPMC_CLK = 50 MHz。 - 重要特性:
GPMC_CLK被保证为50%占空比。
2. CLKACTIVATIONTIME (Clock Activation Time)
- 寄存器位:
GPMC_CONFIG1_i[26:25] - 定义:从访问开始时间到
GPMC_CLK开始输出的GPMC_FCLK周期数。可选0、1、2个周期延迟。 - 核心作用:控制时钟与控制信号之间的时序关系。在同步访问开始时,可以延迟几个
GPMC_FCLK周期再启动GPMC_CLK,这为地址、片选等控制信号在时钟有效前达到稳定提供了时间窗口。
3. 时钟的启停规则
- 激活条件:仅当进行同步读或写访问时,
GPMC_CLK才会被激活并输出。 - 停止条件:当周期时间(
RDCYCLETIME或WRCYCLETIME)完成时,GPMC_CLK停止。 - 异步模式:当访问被定义为异步模式时,
GPMC_CLK始终保持低电平。
3.2 同步时序的关键约束规则
文档中明确给出了两个至关重要的约束公式,违反它们将导致GPMC_CLK行为异常或数据捕获失败。
规则一:周期时间对齐约束
(RDCYCLETIME - CLKACTIVATIONTIME) 必须是 (GPMCFCLKDIVIDER + 1) 的整数倍。- 为什么?这是为了确保
GPMC_CLK能在正确的相位(保证50%占空比)被停止。GPMC_CLK由GPMC_FCLK分频而来,其停止点必须是一个完整GPMC_CLK周期的结束点。(RDCYCLETIME - CLKACTIVATIONTIME)代表了GPMC_CLK实际活跃的时长,这个时长必须是GPMC_CLK周期的整数倍。 - 举例:
GPMC_FCLK=100MHz,GPMCFCLKDIVIDER=1(2分频,GPMC_CLK=50MHz, 周期20 ns),CLKACTIVATIONTIME=1。假设读访问需要GPMC_CLK活跃5个周期(100 ns)。那么RDCYCLETIME需要满足:(RDCYCLETIME - 1) % (1+1) = 0,即(RDCYCLETIME - 1)是2的倍数。同时总时间RDCYCLETIME * 10 ns应大于等于100 ns + 其他控制信号时间。若RDCYCLETIME设为11,则(11-1)=10是2的倍数,且总时间110 ns > 100 ns,符合要求。
规则二:页突发访问时间对齐约束
PAGEBURSTACCESSTIME 必须是 (GPMCFCLKDIVIDER + 1) 的整数倍。- 为什么?
PAGEBURSTACCESSTIME定义了同步突发访问中,连续数据字之间的间隔。这个间隔也必须与GPMC_CLK的周期对齐,才能保证每个数据都在正确的时钟沿被采样。
避坑指南:同步模式配置顺序
- 先定时钟:首先根据存储器芯片支持的最高频率,确定
GPMCFCLKDIVIDER。- 再算周期:根据存储器的读/写周期时间
t_{RC}/t_{WC},计算所需的RDCYCLETIME/WRCYCLETIME,并必须用上述规则一进行校验和调整。- 配置激活:根据地址、控制信号的稳定需求,设置
CLKACTIVATIONTIME(通常0或1)。- 最后微调:配置
OEONTIME、WEONTIME等参数,它们现在是相对于GPMC_CLK边沿的。可能需要启用OEEXTRADELAY/WEEXTRADELAY来微调建立/保持时间。
4. 访问时间与周期时间:定义数据采样窗口
RDACCESSTIME/WRACCESSTIME和RDCYCLETIME/WRCYCLETIME这两组参数,定义了访问的核心时间窗口。
4.1 RDACCESSTIME 与 WRACCESSTIME
- 定义:
RDACCESSTIME(GPMC_CONFIG5_i[20:16]): 从访问开始到GPMC在读操作中捕获第一个数据的GPMC_FCLK边沿之间的周期数。WRACCESSTIME(GPMC_CONFIG6_i[28:24]): 从访问开始到存储器在同步写操作中捕获第一个数据的GPMC_CLK边沿之间的周期数。
- 异步 vs. 同步模式:
- 异步读:
RDACCESSTIME必须设置为大于等于存储器读访问时间t_{ACC}的GPMC_FCLK周期数(向上取整)。它直接决定了GPMC何时去采样数据总线。 - 同步读:
RDACCESSTIME定义了到第一个捕获数据GPMC_CLK上升沿的时间。通常与存储器的初始延迟(Latency)参数对应。 - 异步写:
WRACCESSTIME不被用于定义写访问时间,而是用作一个“等待无效时间窗口”(WAIT invalid timing window)。这是一个易错点!异步写的时序主要由WE信号的宽度(WEONTIME到WEOFFTIME)决定。 - 同步写:
WRACCESSTIME定义了到第一个存储器捕获数据GPMC_CLK上升沿的时间。
- 异步读:
- 与WAIT引脚协作:
RD/WRACCESSTIME可以与外部存储器的WAIT引脚配合使用,实现可变延迟。GPMC会在ACCESSTIME结束前的特定窗口内采样WAIT引脚,如果WAIT有效,则自动延长访问周期。
4.2 RDCYCLETIME 与 WRCYCLETIME
- 定义:
RDCYCLETIME(GPMC_CONFIG5_i[4:0]): 定义整个读访问周期的总时长(GPMC_FCLK周期数)。WRCYCLETIME(GPMC_CONFIG6_i[12:8]): 定义整个写访问周期的总时长。
- 核心作用:定义最晚的信号取消断言时间。这是防止信号重叠的关键。文档明确指出,
RDCYCLETIME必须大于OE_RE信号的取消断言时间(即OEOFFTIME,如果使能了OEEXTRADELAY还要加上0.5周期)。同理,WRCYCLETIME必须大于WEOFFTIME(考虑WEEXTRADELAY)。 - 与ACCESSTIME的关系:
RDCYCLETIME必须大于RDACCESSTIME。在同步读中,RDCYCLETIME需要足够长,以便GPMC用内部重定时的GPMC_CLK锁存最后一个返回的数据。
4.3 PAGEBURSTACCESSTIME
- 定义:
GPMC_CONFIG5_i[27:24],控制页读或突发访问中,连续数据字捕获之间的延迟。 - 异步页读:此参数必须设置为大于等于存储器连续读访问时间
t_{PAGE}的周期数。 - 同步突发读/写:此参数定义了突发传输中数据节拍(beat)之间的间隔。它必须遵守前述的规则二,是
(GPMCFCLKDIVIDER + 1)的整数倍。 - 不支持的模式:异步页写模式不受支持。如果配置了异步写并使能了
WRITEMULTIPLE,GPMC只会执行单次异步写访问。
5. 不同访问模式的时序配置实战
理论需要联系实际。下面我们以最常见的两种设备类型为例,拆解其配置流程。
5.1 案例一:配置异步NOR Flash(非复用模式)
假设我们使用一片16位宽的异步NOR Flash,其关键时序如下(数值为示例):
t_{RC}= 70 nst_{ACC}= 70 nst_{OE}= 25 nst_{CE}= 70 nst_{OH}= 5 nst_{WP}= 35 ns (写脉冲宽度)GPMC_FCLK= 100 MHz (10 ns)
配置步骤与计算:
确定基本时间参数(周期数):
t_{RC}(70 ns) -> 至少 7 个周期。t_{ACC}/t_{OE}(70 ns/25 ns) ->RDACCESSTIME至少 7 个周期(以满足t_{ACC})。t_{WP}(35 ns) ->WE脉冲宽度至少 4 个周期。
配置读时序:
CSONTIME= 1 (片选在访问开始后1周期有效,给地址一点建立时间)OEONTIME= 3 (访问开始后3周期发OE,满足t_{OE}=25ns,且地址已稳定2个周期)OEOFFTIME= 6 (OE在访问结束前关闭,需大于OEONTIME,且保证t_{OH})RDACCESSTIME= 8 (略大于7,提供裕量)RDCYCLETIME= 9 (必须 >OEOFFTIME=6,且满足总周期时间>=7。9个周期=90ns > 70ns)
配置写时序:
WEONTIME= 2 (地址稳定后拉低WE)WEOFFTIME= 6 (WEONTIME=2, 宽度需要4个周期,所以WEOFFTIME=2+4=6)WRACCESSTIME= 0 (异步写模式下此参数用作WAIT窗口,通常设为0或1,具体看WAIT引脚用法)WRCYCLETIME= 8 (必须 >WEOFFTIME=6,且总时间需覆盖整个写周期)
配置片选释放时间:
CSRDOFFTIME/CSWROFFTIME: 通常设置为与RDCYCLETIME/WRCYCLETIME相同或略小1个周期,确保在整个访问期间片选有效。
5.2 案例二:配置同步突发SRAM(复用地址/数据模式)
假设我们使用一片同步突发SRAM,数据总线宽度16位,地址/数据复用(ADMUX),支持最高时钟133 MHz。我们计划运行在100 MHz。
- 存储器要求:
CLK到输出有效t_{CO}= 6 ns, 输出保持t_{OH}= 2 ns, 写建立t_{DS}= 3 ns, 写保持t_{DH}= 1 ns。 GPMC_FCLK= 100 MHz (10 ns)
配置步骤与计算:
时钟配置:
GPMCFCLKDIVIDER= 0 (1分频,即GPMC_CLK=GPMC_FCLK= 100 MHz)。因为存储器支持133MHz > 100MHz。CLKACTIVATIONTIME= 1 (延迟1个FCLK周期启动时钟,让地址先稳定)。
应用同步时序约束:
- 我们需要进行突发读。假设突发长度为4,存储器初始延迟为2个时钟周期。
RDACCESSTIME=CLKACTIVATIONTIME+ 初始延迟 = 1 + 2 = 3。- 突发数据传输,每个数据间隔1个时钟周期,所以
PAGEBURSTACCESSTIME= 1 (必须为GPMCFCLKDIVIDER+1=1的倍数,成立)。 - 总读周期需要至少:1(
CLKACTIVATIONTIME) + 2(初始延迟) + 4(数据) = 7个GPMC_CLK周期。但RDCYCLETIME必须以GPMC_FCLK周期为单位,且需满足规则一:(RDCYCLETIME - CLKACTIVATIONTIME)是1的倍数。RDCYCLETIME至少为7。我们设为8以留裕量。验证:(8-1)=7是1的倍数,OK。
配置控制信号:
CSONTIME= 0 (与访问同时开始)OEONTIME= 2 (我们希望OE在第一个捕获时钟沿之前有效。第一个数据在RDACCESSTIME=3的时钟沿捕获,所以OE可以在时间点2断言)。OEOFFTIME:在突发读中,OE可以在最后一个数据被捕获后取消断言。对于4字突发,最后一个数据在时间点RDACCESSTIME + (BurstLength-1)*PAGEBURSTACCESSTIME = 3 + 3*1 = 6被捕获。OEOFFTIME可以设为7。- 检查信号重叠:
OEOFFTIME=7,RDCYCLETIME=8,满足RDCYCLETIME>OEOFFTIME。如果启用OEEXTRADELAY,则OEOFFTIME实际为7.5,RDCYCLETIME=8仍然大于它,但裕量很小。在这种情况下,可能需要将RDCYCLETIME增加到9,或者不启用OEEXTRADELAY。
启用额外延迟:由于
GPMC_CLK与GPMC_FCLK同频,控制信号跳变可能与时钟沿对齐。为了增加t_{CO}和t_{OH}的裕量,可以考虑启用OEEXTRADELAY,将OE的跳变沿移到时钟沿中间。但必须如步骤3所述,重新校验RDCYCLETIME。
6. 常见问题排查与调试技巧
在实际硬件调试中,GPMC时序问题通常表现为数据读写错误、系统启动失败或随机崩溃。以下是一些排查思路和实用技巧。
问题1:读取的数据全为0xFF或随机错误。
- 可能原因1:
OE_RE信号时序不当。OEONTIME太小,在地址稳定前就发出了读命令;或OEOFFTIME太大,在片选无效后仍在读取,此时总线可能已浮空。- 排查:用示波器或逻辑分析仪同时抓取
GPMC_CLK(同步模式)、CS、OE、ADDR、DATA总线。检查OE有效窗口是否完全落在CS有效窗口之内。检查OE有效前,地址是否已稳定(满足t_{SU});OE无效后,数据是否还保持了一段时间(满足t_{OH})。
- 排查:用示波器或逻辑分析仪同时抓取
- 可能原因2:
RDACCESSTIME设置错误。在异步模式下,此时间小于存储器的t_{ACC},GPMC在数据有效前就进行了采样。- 排查:测量从
CS或OE有效(取较晚者)到数据总线出现有效数据的时间,是否小于你配置的RDACCESSTIME对应的纳秒数。确保RDACCESSTIME时间 > 存储器的t_{ACC}。
- 排查:测量从
问题2:写入数据失败,存储器内容未改变。
- 可能原因1:
WE脉冲宽度不足。WEOFFTIME - WEONTIME对应的脉冲宽度小于存储器要求的t_{WP}(写脉冲宽度)。- 排查:测量
WE信号低电平的持续时间。将其与芯片手册中的t_{WP}最小值对比。
- 排查:测量
- 可能原因2:数据建立/保持时间不足。
WRDATAONADMUXBUS参数设置不当,导致数据在WE有效沿附近变化。- 排查:在复用模式下,检查
WRDATAONADMUXBUS,确保数据在WE有效前足够时间(t_{DS})就已稳定在总线上,并在WE无效后保持足够时间(t_{DH})。用逻辑分析仪查看数据总线相对于WE边沿的变化点。
- 排查:在复用模式下,检查
问题3:同步模式下工作不稳定,偶发错误。
- 可能原因1:违反了
GPMC_CLK周期对齐约束。(RDCYCLETIME - CLKACTIVATIONTIME)不是(GPMCFCLKDIVIDER + 1)的整数倍。- 排查:这是最隐蔽的问题之一。仔细核对计算过程。使用TI的
GPMC Timing Calculator工具(如果有)进行验证。
- 排查:这是最隐蔽的问题之一。仔细核对计算过程。使用TI的
- 可能原因2:
OEEXTRADELAY/WEEXTRADELAY导致信号重叠。启用了额外延迟,但未相应增大RDCYCLETIME/WRCYCLETIME。- 排查:检查是否在不同片选间进行背靠背(Back-to-Back)访问。如果是,测量第一个片选的
OE/WE取消断言和第二个片选的CS断言之间是否有重叠。确保RDCYCLETIME > OEOFFTIME + 0.5(如果使能延迟)。
- 排查:检查是否在不同片选间进行背靠背(Back-to-Back)访问。如果是,测量第一个片选的
问题4:使用WAIT引脚功能时访问挂起。
- 可能原因:
WRACCESSTIME在异步写模式下的误用。在异步写模式下,WRACCESSTIME不是写访问时间,而是WAIT无效窗口的结束时间。如果设置过小,GPMC可能过早采样到WAIT引脚仍为有效的状态,从而错误地延长周期。- 排查:查阅芯片手册,明确WAIT引脚在写操作时的有效/无效时序。确保
WRACCESSTIME配置正确,使得GPMC在WAIT引脚确定无效后的时间点再去采样它。
- 排查:查阅芯片手册,明确WAIT引脚在写操作时的有效/无效时序。确保
调试技巧:
- 从慢开始:初次配置时,先将所有时间参数配置得非常保守(即值设大一些),降低
GPMC_FCLK频率。确保功能基本正确。 - 逐次逼近:在功能正确的基础上,逐步收紧时序参数(减小数值),提高时钟频率,直到找到稳定工作的边界。
- 善用工具:尽可能获取或使用TI官方提供的配置计算工具或电子表格。它们能自动检查一些约束条件。
- 逻辑分析仪是关键:没有逻辑分析仪,调试GPMC���序几乎是盲人摸象。必须捕获完整的信号交互波形,将其与芯片手册的时序图和你的配置参数进行比对,这是定位问题的唯一可靠方法。重点关注建立时间(Setup)和保持时间(Hold)的违例。