打印

F2812读写外部SRAM真有那么慢吗?

[复制链接]
5974|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zealane|  楼主 | 2008-4-26 18:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
rivflood| | 2008-4-26 19:47 | 只看该作者

外部地址空间的速度可配置!估计lz没有配置好

使用特权

评论回复
板凳
xjycug| | 2008-4-26 22:48 | 只看该作者

回复主题:F2812读写外部SRAM真有那么慢吗?

可以配置到访问速度为8ns甚至更快,我看见我的同事配置成功过,可以参考TI公司提供的例程flash.c中的设置,或是TI公司外部接口设置文献。只需修改几个寄存器即可,呵呵

使用特权

评论回复
地板
DSP动力| | 2008-4-27 10:31 | 只看该作者

更正搂主一下:应该是写75M,读37.5M

可以看2812的读时序信号,就是在年RD上升沿前,有效数据需要需要保持12ns;也就是有效数据输出后,再等待12ns才能输出nRD有效信号,不然从SRAM中读取数据不对。

由于指令主要是读操作,所以影响较大,只能到37.5M。

而对于写操作,锁存写数据取决于外部SRAM的速度,所以没有12ns的限制,所以写速度很高,能达到75M。

使用特权

评论回复
5
zealane|  楼主 | 2008-4-30 16:32 | 只看该作者

re

我的配置是这样的。
XTIMCLK=0;XYIMCLK=SYSCLKOUT=150M
X2TIMING=0;即时间不乘以2
XRDLEAD=1;建立周期数为1
XRDACTIVE=1;激活周期数为1
XRDTRAIL=1; 跟踪周期数为1.

根据手册,其读周期是150/(1+(1+1)+1)=37.5M
其中,试图将激活周期数改成0,出来的数据大多数正确,但是有少数不正确。
后来,将跟踪周期数改成0,则数据完全错误。

不知道能不能再提高速度了????

使用特权

评论回复
6
DSP动力| | 2008-4-30 18:22 | 只看该作者

还可以提高,估计你SRAM布线或者总线挂的器件太多,达不到

下面是75M的写操作配置。

XintfRegs.XTIMING2.bit.XWRTRAIL = 1;    // 0 // 3 // 1
XintfRegs.XTIMING2.bit.XWRACTIVE = 0;   // 0 // 2 // 0
XintfRegs.XTIMING2.bit.XWRLEAD = 1;     // 1 // 2 // 1

目前2812单板按照这样的配置,电机仿真测试都比较稳定。

void InitXintf(void)
{

    // Example of chaning the timing of XINTF Zones.  
    // Note acutal values should be based on the hardware 
    // attached to the zone - timings presented here are 
    // for example purposes.
     
    // All Zones:
    // Timing for all zones based on XTIMCLK = SYSCLKOUT 
    XintfRegs.XINTCNF2.bit.XTIMCLK = 0; // XTIMCLK 0:= SYSCLKOUT  1:= 1/2 SYSCLKOUT 
    XintfRegs.XINTCNF2.bit.CLKOFF  = 0;      // 0: enable CLKOUT      1: Disable CLKOUT
    XintfRegs.XINTCNF2.bit.CLKMODE = 0;      // XCLKOUT 0:= XTIMCLK    1:= 1/2 XTIMCLK 
    XintfRegs.XINTCNF2.bit.WRBUFF  = 0;

    // Zone 0:
    // Change write access lead active trail timing
    // When using ready, ACTIVE must be 1 or greater
    // Lead must always be 1 or greater
    // Use timings based on SYSCLKOUT = XTIMCLK
    XintfRegs.XTIMING0.bit.USEREADY = 0;
    XintfRegs.XTIMING0.bit.XWRTRAIL = 3;
    XintfRegs.XTIMING0.bit.XWRACTIVE = 7;
    XintfRegs.XTIMING0.bit.XWRLEAD = 2;
    XintfRegs.XTIMING0.bit.XRDTRAIL= 3;
    XintfRegs.XTIMING0.bit.XRDACTIVE = 7;
    XintfRegs.XTIMING0.bit.XRDLEAD = 2;
    // Do not double lead/active/trail for Zone 0
    XintfRegs.XTIMING0.bit.X2TIMING = 1;

    /*************************************************
         CPLD可靠读写的时序参数设置
         (CPLD时钟为100.00MHz)
     *************************************************/
#if 0
    XintfRegs.XTIMING1.bit.USEREADY = 0;
    XintfRegs.XTIMING1.bit.XWRTRAIL = 1;
    XintfRegs.XTIMING1.bit.XWRACTIVE = 1;
    XintfRegs.XTIMING1.bit.XWRLEAD = 2;
    XintfRegs.XTIMING1.bit.XRDTRAIL= 1;
    XintfRegs.XTIMING1.bit.XRDACTIVE = 2;
    XintfRegs.XTIMING1.bit.XRDLEAD = 2;
    // Do not double lead/active/trail for Zone 0
    XintfRegs.XTIMING1.bit.X2TIMING = 0;
#else
    XintfRegs.XTIMING1.bit.USEREADY = 0;
    XintfRegs.XTIMING1.bit.XWRTRAIL = 3;   // 3 // 3 
    XintfRegs.XTIMING1.bit.XWRACTIVE = 3;  // 2 // 3 
    XintfRegs.XTIMING1.bit.XWRLEAD = 2;    // 1 // 2 
    XintfRegs.XTIMING1.bit.XRDTRAIL= 3;    // 2 // 3 
    XintfRegs.XTIMING1.bit.XRDACTIVE = 3;  // 1 // 3 
    XintfRegs.XTIMING1.bit.XRDLEAD = 2;    // 1 // 2 
    // Do not double lead/active/trail for Zone 0
    XintfRegs.XTIMING1.bit.X2TIMING = 1;
#endif
    /*************************************************
         SRAM可靠读写的时序参数设置
     *************************************************/
    // Zone 2
    // Ignore XREADY for Zone 2 accesses
    // Change read access lead/active/trail timing
    XintfRegs.XTIMING2.bit.USEREADY = 0;
    XintfRegs.XTIMING2.bit.XSIZE    = 3;
    XintfRegs.XTIMING2.bit.XWRTRAIL = 1;    // 0 // 3 // 1
    XintfRegs.XTIMING2.bit.XWRACTIVE = 0;   // 0 // 2 // 0
    XintfRegs.XTIMING2.bit.XWRLEAD = 1;     // 1 // 2 // 1
    XintfRegs.XTIMING2.bit.XRDTRAIL= 2;     // 2 // 3 // 1
    XintfRegs.XTIMING2.bit.XRDACTIVE = 1;   // 1 // 2 // 0
    XintfRegs.XTIMING2.bit.XRDLEAD = 1;      // 1 // 2 // 1    
    XintfRegs.XTIMING2.bit.X2TIMING = 0;

    // Zone 2 is slow, so add additional BCYC cycles when ever switching
    // from Zone 2 to another Zone.  This will help avoid
    // bus contention.
    XintfRegs.XBANK.bit.BCYC = 2; 
    XintfRegs.XBANK.bit.BANK = 2;  // 2    
}    

使用特权

评论回复
7
rivflood| | 2008-4-30 19:55 | 只看该作者

lz的ram速度慢了吧?

使用特权

评论回复
8
hotpower| | 2008-5-1 13:07 | 只看该作者

过节后试试~~~

使用特权

评论回复
9
tjsheep| | 2008-5-1 23:39 | 只看该作者

理论上可以配置为1/0/0,但是我也只跑到1/1/0

用的是12ns的sram

使用特权

评论回复
10
zealane|  楼主 | 2008-5-4 10:24 | 只看该作者

谢谢dsp动力,不过

你的配置是
    XintfRegs.XTIMING2.bit.XRDTRAIL= 2;     // 2 // 3 // 1
    XintfRegs.XTIMING2.bit.XRDACTIVE = 1;   // 1 // 2 // 0
    XintfRegs.XTIMING2.bit.XRDLEAD = 1;      // 1 // 2 // 1  
而我的配置是1,1,1,其他相同
应该说,我的读速度比你的快。

使用特权

评论回复
11
DSP动力| | 2008-5-8 10:39 | 只看该作者

这两天出差,没有时间看。

有点没有描述清楚。
在带电机控制的应用场合,75M和37.5M的配置是不稳定,抗干扰能力不行,专门测试过;所以我把速度调低了,也就是上面看到的配置参数。
下面是75MHz和37.5MHz的配置,经过测试是没有问题的,如果做小信号处理或者其它低干扰应用场合是没有问题。这是2812目前SRAM可以到达的极限访问速度。
-------------------------------------
XintfRegs.XTIMING2.bit.USEREADY = 0;
    XintfRegs.XTIMING2.bit.XSIZE    = 3;
    XintfRegs.XTIMING2.bit.XWRTRAIL = 0;    // 0 // 3 // 1
    XintfRegs.XTIMING2.bit.XWRACTIVE = 0;   // 0 // 2 // 0
    XintfRegs.XTIMING2.bit.XWRLEAD = 1;     // 1 // 2 // 1
    XintfRegs.XTIMING2.bit.XRDTRAIL= 1;     // 2 // 3 // 1
    XintfRegs.XTIMING2.bit.XRDACTIVE = 1;   // 1 // 2 // 0
    XintfRegs.XTIMING2.bit.XRDLEAD = 1;      // 1 // 2 // 1 // Double lead/active/trial timing for Zone 2
    XintfRegs.XTIMING2.bit.X2TIMING = 0;

使用特权

评论回复
12
zealane|  楼主 | 2008-5-8 16:56 | 只看该作者

恩,估计是了。

谢谢

使用特权

评论回复
13
lianshumou| | 2008-6-2 16:39 | 只看该作者

我的配置

    XintfRegs.XTIMING2.bit.XWRLEAD = 1;
    XintfRegs.XTIMING2.bit.XWRACTIVE = 1;
    XintfRegs.XTIMING2.bit.XWRTRAIL = 0;
    XintfRegs.XTIMING2.bit.XRDLEAD = 1;
    XintfRegs.XTIMING2.bit.XRDACTIVE = 2;
    XintfRegs.XTIMING2.bit.XRDTRAIL = 0;
    XintfRegs.XTIMING2.bit.X2TIMING = 0;

使用特权

评论回复
14
mrwoshishei| | 2012-11-16 17:06 | 只看该作者
1# zealane
你好!请问你是如何设置达到37.5MHZ的,我将XINTF区域的时钟设置到最快也只有6MHZ。
希望能得到你的指导
谢谢!

使用特权

评论回复
15
hong7817| | 2017-9-7 09:43 | 只看该作者
这外部SRAM , 我用的也是10NS的,  ISSI IS61LV25616 - 10T 下面的配置用了几年了一直好好的, 最近老出问题, 不知怎么回事
XintfRegs.XTIMING6.bit.XWRLEAD = 1;//1
    XintfRegs.XTIMING6.bit.XWRACTIVE = 1;
    XintfRegs.XTIMING6.bit.XWRTRAIL = 1;
    // Zone read timing
    XintfRegs.XTIMING6.bit.XRDLEAD = 1;//1
    XintfRegs.XTIMING6.bit.XRDACTIVE = 1;
    XintfRegs.XTIMING6.bit.XRDTRAIL = 0;

    // double all Zone read/write lead/active/trail timing
    XintfRegs.XTIMING6.bit.X2TIMING = 0;

    // Zone will sample XREADY signal
    XintfRegs.XTIMING6.bit.USEREADY = 0;
    XintfRegs.XTIMING6.bit.READYMODE = 0;  // sample asynchronous

    // Size must be 1,1 - other values are reserved
    XintfRegs.XTIMING6.bit.XSIZE = 3;

使用特权

评论回复
16
hong7817| | 2017-9-7 09:44 | 只看该作者
最近跑, 把程序复制到外部RAM, 读写都要配置成3 7 3  而且要double才不会出错,  这样的话不如内部FLASH加速了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

249

帖子

1

粉丝