TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320DM8148: GPMC同步sync,地址数据复用NOR FLASH like,Address and data multiplexed,burst读方式配置+DMA的GPMC驱动读取FPGA数据答疑

Part Number:TMS320DM8148

我配置GPMC为同步sync,地址数据复用NOR FLASH like,Address and data multiplexed,burst读方式。下面是我配置的:
我是参考TI文档时序配置,如下:
然后我配置的如下:
#define GPMC_CONFIG1_i 0x61801200 // burst,sync,16words,16bit, ,NOR FLASH like,Address and data multiplexed
#define GPMC_CONFIG2_i 0x00001000  // CSRDOFFTIME=17cy     
#define GPMC_CONFIG3_i 0x00000200  // ADVRDOFFTIME = 2cy ADVONTIME=0
#define GPMC_CONFIG4_i 0x0000108d  // OEOFFTIME=17cy  OEEXTRADELAY   OEONTIME=14cy
#define GPMC_CONFIG5_i 0x010F0010 // PAGEBURSTACCESSTIME = 1cy   RDACCESSTIME=16cy   RDCYCLETIME=17cy
#define GPMC_CONFIG6_i 0x00000000  //CYCLE2CYCLEDELAY=0cy   
#define GPMC_CONFIG7_i 0x00000F42  // set up CONFIG7 and enable cs3,16M, baseAdd 0x02
我有点不明白的是为啥我RDACCESSTIME=16cy  RDCYCLETIME=17cy OEOFFTIME=17cy   CSRDOFFTIME=17cy     能连续读16 worlds数据每个循环,不会丢?
但是我配置成RDACCESSTIME=16cy  RDCYCLETIME=32cy OEOFFTIME=32cy   CSRDOFFTIME=32cy又会读16 worlds丢16 worlds?
配置成上面那种时序后
但是发现如下问题:

调了几天还是不知道是啥问题导致这样的?所以想请教一下!谢谢!
我是FPGA这边接收GPMC发送配置的这种时序,然后根据时序放数据,GPMC这边是GPMC驱动+DMA方式加速读取数据。

FPGA发aa递增数据,GPMC读取正确。但是发ff00和0000循环发,GPMC读取就不正确,很奇怪!是不是我GPMC时序配置不对?
另外我如果时序配置成这样,如下:
       GPMC_CONFIG1_1               0x61801200;
       GPMC_CONFIG2_1               0x00001F00;
       GPMC_CONFIG3_1               0x00000200;
       GPMC_CONFIG4_1               0x00001F0E;
       GPMC_CONFIG5_1               0x010F001F;
       GPMC_CONFIG6_1               0x00000000;
也会遇到网上说的这个问题,如下:
读16words丢16words。
所以我改成上面第一种那种时序配置,不会出现读16丢16。但是会出现扣扣截图说的那种现象,读16丢16也同样会出现扣扣截图说的那种现象,很奇怪。是不是我GPMC时序配置有问题?
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读取(同步模式),应该就会自动根据你读取数据的多少来输出时钟的,这个不需要配置。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320DM8148: GPMC同步sync,地址数据复用NOR FLASH like,Address and data multiplexed,burst读方式配置+DMA的GPMC驱动读取FPGA数据答疑
分享到: 更多 (0)