F2812读写外部SRAM真有那么慢吗?
150M主频的cpu,读写外部SRAM只有37.5M。外部SRAM的读写周期是10ns,理论上支持100M的速度,可是现在最高只有37.5M,太浪费了。外部地址空间的速度可配置!估计lz没有配置好
回复主题:F2812读写外部SRAM真有那么慢吗?
可以配置到访问速度为8ns甚至更快,我看见我的同事配置成功过,可以参考TI公司提供的例程flash.c中的设置,或是TI公司外部接口设置文献。只需修改几个寄存器即可,呵呵更正搂主一下:应该是写75M,读37.5M
可以看2812的读时序信号,就是在年RD上升沿前,有效数据需要需要保持12ns;也就是有效数据输出后,再等待12ns才能输出nRD有效信号,不然从SRAM中读取数据不对。<br /><br />由于指令主要是读操作,所以影响较大,只能到37.5M。<br /><br />而对于写操作,锁存写数据取决于外部SRAM的速度,所以没有12ns的限制,所以写速度很高,能达到75M。re
我的配置是这样的。<br />XTIMCLK=0;XYIMCLK=SYSCLKOUT=150M<br />X2TIMING=0;即时间不乘以2<br />XRDLEAD=1;建立周期数为1<br />XRDACTIVE=1;激活周期数为1<br />XRDTRAIL=1; 跟踪周期数为1.<br /><br />根据手册,其读周期是150/(1+(1+1)+1)=37.5M<br />其中,试图将激活周期数改成0,出来的数据大多数正确,但是有少数不正确。<br />后来,将跟踪周期数改成0,则数据完全错误。<br /><br />不知道能不能再提高速度了????还可以提高,估计你SRAM布线或者总线挂的器件太多,达不到
下面是75M的写操作配置。<br /><br />XintfRegs.XTIMING2.bit.XWRTRAIL = 1; // 0 // 3 // 1<br />XintfRegs.XTIMING2.bit.XWRACTIVE = 0; // 0 // 2 // 0<br />XintfRegs.XTIMING2.bit.XWRLEAD = 1; // 1 // 2 // 1<br /><br />目前2812单板按照这样的配置,电机仿真测试都比较稳定。<br /><br />void InitXintf(void)<br />{<br /><br /> // Example of chaning the timing of XINTF Zones. <br /> // Note acutal values should be based on the hardware <br /> // attached to the zone - timings presented here are <br /> // for example purposes.<br /> <br /> // All Zones:<br /> // Timing for all zones based on XTIMCLK = SYSCLKOUT <br /> XintfRegs.XINTCNF2.bit.XTIMCLK = 0; // XTIMCLK 0:= SYSCLKOUT 1:= 1/2 SYSCLKOUT <br /> XintfRegs.XINTCNF2.bit.CLKOFF = 0; // 0: enable CLKOUT 1: Disable CLKOUT<br /> XintfRegs.XINTCNF2.bit.CLKMODE = 0; // XCLKOUT 0:= XTIMCLK 1:= 1/2 XTIMCLK <br /> XintfRegs.XINTCNF2.bit.WRBUFF = 0;<br /><br /> // Zone 0:<br /> // Change write access lead active trail timing<br /> // When using ready, ACTIVE must be 1 or greater<br /> // Lead must always be 1 or greater<br /> // Use timings based on SYSCLKOUT = XTIMCLK<br /> XintfRegs.XTIMING0.bit.USEREADY = 0;<br /> XintfRegs.XTIMING0.bit.XWRTRAIL = 3;<br /> XintfRegs.XTIMING0.bit.XWRACTIVE = 7;<br /> XintfRegs.XTIMING0.bit.XWRLEAD = 2;<br /> XintfRegs.XTIMING0.bit.XRDTRAIL= 3;<br /> XintfRegs.XTIMING0.bit.XRDACTIVE = 7;<br /> XintfRegs.XTIMING0.bit.XRDLEAD = 2;<br /> // Do not double lead/active/trail for Zone 0<br /> XintfRegs.XTIMING0.bit.X2TIMING = 1;<br /><br /> /*************************************************<br /> CPLD可靠读写的时序参数设置<br /> (CPLD时钟为100.00MHz)<br /> *************************************************/<br />#if 0<br /> XintfRegs.XTIMING1.bit.USEREADY = 0;<br /> XintfRegs.XTIMING1.bit.XWRTRAIL = 1;<br /> XintfRegs.XTIMING1.bit.XWRACTIVE = 1;<br /> XintfRegs.XTIMING1.bit.XWRLEAD = 2;<br /> XintfRegs.XTIMING1.bit.XRDTRAIL= 1;<br /> XintfRegs.XTIMING1.bit.XRDACTIVE = 2;<br /> XintfRegs.XTIMING1.bit.XRDLEAD = 2;<br /> // Do not double lead/active/trail for Zone 0<br /> XintfRegs.XTIMING1.bit.X2TIMING = 0;<br />#else<br /> XintfRegs.XTIMING1.bit.USEREADY = 0;<br /> XintfRegs.XTIMING1.bit.XWRTRAIL = 3; // 3 // 3 <br /> XintfRegs.XTIMING1.bit.XWRACTIVE = 3; // 2 // 3 <br /> XintfRegs.XTIMING1.bit.XWRLEAD = 2; // 1 // 2 <br /> XintfRegs.XTIMING1.bit.XRDTRAIL= 3; // 2 // 3 <br /> XintfRegs.XTIMING1.bit.XRDACTIVE = 3; // 1 // 3 <br /> XintfRegs.XTIMING1.bit.XRDLEAD = 2; // 1 // 2 <br /> // Do not double lead/active/trail for Zone 0<br /> XintfRegs.XTIMING1.bit.X2TIMING = 1;<br />#endif<br /> /*************************************************<br /> SRAM可靠读写的时序参数设置<br /> *************************************************/<br /> // Zone 2<br /> // Ignore XREADY for Zone 2 accesses<br /> // Change read access lead/active/trail timing<br /> XintfRegs.XTIMING2.bit.USEREADY = 0;<br /> XintfRegs.XTIMING2.bit.XSIZE = 3;<br /> XintfRegs.XTIMING2.bit.XWRTRAIL = 1; // 0 // 3 // 1<br /> XintfRegs.XTIMING2.bit.XWRACTIVE = 0; // 0 // 2 // 0<br /> XintfRegs.XTIMING2.bit.XWRLEAD = 1; // 1 // 2 // 1<br /> XintfRegs.XTIMING2.bit.XRDTRAIL= 2; // 2 // 3 // 1<br /> XintfRegs.XTIMING2.bit.XRDACTIVE = 1; // 1 // 2 // 0<br /> XintfRegs.XTIMING2.bit.XRDLEAD = 1; // 1 // 2 // 1 <br /> XintfRegs.XTIMING2.bit.X2TIMING = 0;<br /><br /> // Zone 2 is slow, so add additional BCYC cycles when ever switching<br /> // from Zone 2 to another Zone. This will help avoid<br /> // bus contention.<br /> XintfRegs.XBANK.bit.BCYC = 2; <br /> XintfRegs.XBANK.bit.BANK = 2; // 2 <br />} <br />lz的ram速度慢了吧?
过节后试试~~~
理论上可以配置为1/0/0,但是我也只跑到1/1/0
用的是12ns的sram谢谢dsp动力,不过
你的配置是<br /> XintfRegs.XTIMING2.bit.XRDTRAIL= 2; // 2 // 3 // 1<br /> XintfRegs.XTIMING2.bit.XRDACTIVE = 1; // 1 // 2 // 0<br /> XintfRegs.XTIMING2.bit.XRDLEAD = 1; // 1 // 2 // 1 <br />而我的配置是1,1,1,其他相同<br />应该说,我的读速度比你的快。这两天出差,没有时间看。
有点没有描述清楚。<br />在带电机控制的应用场合,75M和37.5M的配置是不稳定,抗干扰能力不行,专门测试过;所以我把速度调低了,也就是上面看到的配置参数。<br />下面是75MHz和37.5MHz的配置,经过测试是没有问题的,如果做小信号处理或者其它低干扰应用场合是没有问题。这是2812目前SRAM可以到达的极限访问速度。<br />-------------------------------------<br />XintfRegs.XTIMING2.bit.USEREADY = 0;<br /> XintfRegs.XTIMING2.bit.XSIZE = 3;<br /> XintfRegs.XTIMING2.bit.XWRTRAIL = 0; // 0 // 3 // 1<br /> XintfRegs.XTIMING2.bit.XWRACTIVE = 0; // 0 // 2 // 0<br /> XintfRegs.XTIMING2.bit.XWRLEAD = 1; // 1 // 2 // 1<br /> XintfRegs.XTIMING2.bit.XRDTRAIL= 1; // 2 // 3 // 1<br /> XintfRegs.XTIMING2.bit.XRDACTIVE = 1; // 1 // 2 // 0<br /> XintfRegs.XTIMING2.bit.XRDLEAD = 1; // 1 // 2 // 1 // Double lead/active/trial timing for Zone 2<br /> XintfRegs.XTIMING2.bit.X2TIMING = 0;恩,估计是了。
谢谢我的配置
XintfRegs.XTIMING2.bit.XWRLEAD = 1;<br /> XintfRegs.XTIMING2.bit.XWRACTIVE = 1;<br /> XintfRegs.XTIMING2.bit.XWRTRAIL = 0;<br /> XintfRegs.XTIMING2.bit.XRDLEAD = 1;<br /> XintfRegs.XTIMING2.bit.XRDACTIVE = 2;<br /> XintfRegs.XTIMING2.bit.XRDTRAIL = 0;<br /> XintfRegs.XTIMING2.bit.X2TIMING = 0; 1# zealane你好!请问你是如何设置达到37.5MHZ的,我将XINTF区域的时钟设置到最快也只有6MHZ。
希望能得到你的指导
谢谢!
这外部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; 最近跑, 把程序复制到外部RAM, 读写都要配置成3 7 3而且要double才不会出错,这样的话不如内部FLASH加速了
页:
[1]