Part Number:TMS320DM8148
调了几天还是不知道是啥问题导致这样的?所以想请教一下!谢谢!
FPGA发aa递增数据,GPMC读取正确。但是发ff00和0000循环发,GPMC读取就不正确,很奇怪!是不是我GPMC时序配置不对?
GPMC_CONFIG2_1 0x00001F00;
GPMC_CONFIG3_1 0x00000200;
GPMC_CONFIG4_1 0x00001F0E;
GPMC_CONFIG5_1 0x010F001F;
GPMC_CONFIG6_1 0x00000000;
Chris Meng:
你好,
建议你先不用EDMA,用cpu直接读取数据,排除EDMA配置的问题。
clk的极性FPGA和GPMC是否有正确匹配?
,
Gao Hu:
我用FPGA SignalTap捕捉了一下CS nAVD OE时序波形,发现数据递增的发的时候,时序对,数据也对,如下:
但是若ff00 0000这样循环发,时序就有脉冲干扰,数据就不对,如下:
,
Chris Meng:
你好,
是否有单独的FPGA板(不和DM8148连接),可以先验证一下输出时序?看是否是本身时序有问题,还是DM8148的干扰?
,
Gao Hu:
我是GPMC输出时序进FPGA,然后FPGA根据时序放数据到GPMC[0]~GPMC[15]数据线上,如下:
是单独的FPGA板,如下连接:
,
Chris Meng:
你好,
断开FPGA板,单独测试GPMC的时序是否正常?
,
Gao Hu:
你好,
我想问下下图这种现象是程序时序没编写好,还是说是时序信号受到干扰引起的
知道这个我就知道排查的方向了
,
Chris Meng:
你好,
很难判断。你可以先让GPMC向外发送数据,看时序是否正常。先不连FPGA,如果没有问题,连上FPGA再看信号。
,
Gao Hu:
我连上FPGA用示波器看了下信号,如下,图一是25M时钟(100M四分频,示波器最大只能测到60M频率信号)和nAVD信号,图二是时钟25M时钟(100M四分频)和OE信号,如下:
发现示波器没有这种干扰脉冲,用FPGA SignalTap捕捉CS nAVD OE时序波形,发00ff 0000依次这样发,发现有干扰脉冲(如下图),示波器没有,就怀疑可能是SignalTap捕捉bug。
现在的现象就是很奇怪,递增发数据,比如1 2 3 4 5 。。。或者2 4 6 8 10。。。,1 3 4 6 7 9.。。。这样,GPMC数据读取都是正确的, FPGA SignalTap捕捉CS nAVD OE时序波形,都没有脉冲干扰,示波器看也没有。但是数据变化比较大的发,比如 0000 ffff 0000 ffff 。。。这样,就会出现GPMC读取有的是e000 ff80 等会出现这样一些错误的数据,FPGA SignalTap捕捉CS nAVD OE时序波形会看到有脉冲干扰,但是示波器看没有(不知道是不是示波器测量频率有限捕捉不到),如果示波器捕捉的时序是正确的的,FPGA SignalTap捕捉有bug,那我就怀疑是我的程序时序配置有问题,导致数据变化大的发会出错。但是很奇怪,为什么变化不大的数发,就不会有错误,变化大的发,就会出现数据读取错误,麻烦能不能看下我时序配置,是不是我哪里没配置好!谢谢!
#define GPMC_CONFIG1_i 0x60801200 // burst,sync,8words,16bit,NOR FLASH like,Address and data multiplexed,100M#define GPMC_CONFIG2_i 0x00000500 // CSRDOFFTIME=5cy CSONTIME =0cy #define GPMC_CONFIG3_i 0x00000200 // ADVRDOFFTIME = 2cy ADVONTIME=0 That ADV TIME no used is to read datas without address.#define GPMC_CONFIG4_i 0x00000503 // OEOFFTIME=5cy OEEXTRADELAY OEONTIME=3cy PAGEBURSTACCESSTIME = 1cy(if 0 slow speed) #define GPMC_CONFIG5_i 0x01040005 // PAGEBURSTACCESSTIME = 1cy(if 0 slow speed) RDACCESSTIME=4cy RDCYCLETIME=5cy#define GPMC_CONFIG6_i 0x00000000 //CYCLE2CYCLEDELAY=0cy #define GPMC_CONFIG7_i 0x00000F42 // set up CONFIG7 and enable cs3,16M, baseAdd 0x02
下图是配置后,递增发数据FPGA SignalTap捕捉到的,上图是发FF00 0000 ff00 0000捕捉到的。
,
Chris Meng:
你好,
你是否有尝试测量过板上的电源,在有问题和没有问题的时候,信号质量如何?
,
Chris Meng:
你好,
关于时序,我还是建议你尝试使用GPMC输出看看。
,
Gao Hu:
你好,
我们用高频示波器查看信号,不连FPGA看GPMC输出时序和连FPGA看GPMC输出时序,如下:
上图是OE信号,黄线是没有连FPGA,蓝线是连FPGA
上图是nAVD信号,黄线是不连FPGA的,另一种颜色线是连FPGA的
好像信号没有受到FPGA干扰,可能应该是程序时序配置问题,或者其他没想到的错误原因。但是程序时序问题,为啥会出现FPGA发的数据数据值前后变化不大,比如递增加一或加二发,GPMC读取正确。数据前后变化大了就读取不对,比如0000 ffff?这可能是啥原因呢?从来没遇到过
,
Chris Meng:
Gao Hu 说:上图是OE信号
OE的脉冲有宽有窄,这是符合你的预期的么?
之前提到的电源,是否有检测?
,
Gao Hu:
你好,
我用高频示波器仔细捕捉了下没有接FPGA的时序波形,如下:
蓝线是100M时钟,黄线是片选cs,红线是OE读使能(低电平效),和时序配置好像一样(如下)。我想问下GPMC数据线上是GPMC时钟低电平改变数据,高电平读数据吗?谢谢!
#define GPMC_CONFIG1_i 0x60801200 // burst,sync,8words,16bit,NOR FLASH like,Address and data multiplexed,100M#define GPMC_CONFIG2_i 0x00000500 // CSRDOFFTIME=5cy CSONTIME =0cy #define GPMC_CONFIG3_i 0x00000200 // ADVRDOFFTIME = 2cy ADVONTIME=0 That ADV TIME no used is to read datas without address.#define GPMC_CONFIG4_i 0x00000503 // OEOFFTIME=5cy OEEXTRADELAY OEONTIME=3cy PAGEBURSTACCESSTIME = 1cy(if 0 slow speed) #define GPMC_CONFIG5_i 0x01040005 // PAGEBURSTACCESSTIME = 1cy(if 0 slow speed) RDACCESSTIME=4cy RDCYCLETIME=5cy#define GPMC_CONFIG6_i 0x00000000 //CYCLE2CYCLEDELAY=0cy #define GPMC_CONFIG7_i 0x00000F42 // set up CONFIG7 and enable cs3,16M, baseAdd 0x02
,
Gao Hu:
你好,
我还有个疑问,为啥cs拉高每四个循环周期拉高一次,正常应该一个循环周期拉高一下吧?
,
Chris Meng:
Gao Hu 说:我想问下GPMC数据线上是GPMC时钟低电平改变数据,高电平读数据吗?
从TRM里同步的时序图看,时钟上升沿采集数据。
,
Chris Meng:
Gao Hu 说:为啥cs拉高每四个循环周期拉高一次
请问是否使用burst mode,是否有使用edma?
,
Gao Hu:
使用了 burst mode 和 edma
,
Chris Meng:
你好,
TRM里,你可以找到下面的时序。
,
Gao Hu:
接上FPGA后,测时序发现,发递增数据0100 0200 0300 0400.。。。时序如下图,gpmc读取数据正确:
发ff00 0000 ff00 0000。。。这样发的时候,时序如下,gpmc读取数据有错误:
时钟信号不规律了,似乎受到了干扰。
,
Chris Meng:
你好,
之前提到的电源,在上面两种情况下是否有测量?
,
Gao Hu:
你好,
我们换了FPGA板子时钟正常了,没有干扰了。
但发现每个OE拉低期间多了半个时钟周期,如下图红色箭头所指:
导致OE刚拉低时,会读16位数据线上的原始电平状态的无效数据(下图ff ff 16位无效数据)(因为我们FPGA是GPMC时钟下降沿触发放数据到16位数据线上):
所以我们想,OE下拉时,刚好时钟也是下降沿,这样就可以放我们自己数据读进,这个可以改吗?我尝试OE高电平加宽半个时钟没成功?
另外请问下,GPMC是时钟低电平改变数据,高电平读数据吧?
谢谢!
,
Chris Meng:
你好,
你的示波器图里为什么高低点评上都有纹波,是接地不好么?红色的线是OE么?
你是否有尝试调整RDACCESSTIME?
,
Gao Hu:
你好,
红色线是OE。我想改成GPMC时钟下降沿的时候OE拉低,不知道行不行?
我尝试改变RDACCESSTIME,好像只能改变一个时钟周期,还是回到了时钟上升沿OE拉低。
我有尝试使用如下寄存器配置:
或者:
移动半个时钟周期达到时钟下降沿时OE刚好拉低,但遗憾时序没啥改变,似乎置位配置这个地方没啥效果。
不知道是不是GPMC固定是时钟上升沿,OE电平状态改变?
,
Chris Meng:
你好,
RDACCESSTIME的解释是Delay between start cycle time and first data valid。这个信号和OE没有直接关系,你的FPGA应该参考这个信号来提供数据。
,
Gao Hu:
你好,
非常感谢,已经解决了!
还有一个小小问题,
请问下,比如我想读100字节数据,如果配置成16bit模式的话,gpmc应该发出50个有效读时钟(一个时钟读16bit,即两字节),那gpmc发出这50个有效读时钟是在哪个寄存器里配置呢?没太弄懂在哪里配置
,
Chris Meng:
你好,
使能时钟输出(配置相关频率)你通过GPMC读取(同步模式),应该就会自动根据你读取数据的多少来输出时钟的,这个不需要配置。