Part Number:TMS320C6727B
C6727对应的Flash地址为0x90000000—0x9FFFFFFF。进行写操作时,只能向0x90000000处写数据,而且其余地址的数据会一起改变。
比如,我向0x90000000—0x90000030分别写入0,1,2,3…。
第一次循环时,0x90000000处的值变为0,其余地址的数据不变。
第二次循环时,0x90000000处的值变为1,其余地址的数据不变。
第三次循环时,0x90000000处的值变为2,其余地址的数据不变。
第四次循环时,0x90000000处的值变为3,其余地址的数据均变为0。
第五次循环时,0x90000000处的值变为4,其余地址的数据均变为1。
以此类推。
想问一下各位,这个是什么原因呢?在进行写操作前,只配置了A1CR寄存器。
Shine:
写完数据后,建议用代码去回读一下flash里的值,看是没有成功烧写flash还是ccs显示的问题。
,
Jack Chen:
您好,我尝试了以下,就是单纯的没写进去。Flash的写操作步骤如图所示,进行每一步时,0x90000000—0x9FFFFFFFF都有所写数据。主函数是向地址0x90000000写数据,但是却在0x90000000—0x9FFFFFFFF都有该数据。每次循环都是一样的。断电之后,数据就丢失了。这个可能是哪里出了问题呢?
,
Shine:
先看一下有没有擦除成功,都是FFFF。尝试加长每次烧写之间的间隔。
,
Jack Chen:
因为没有成功写入数据,所以都是FFFF。擦除的步骤也有按照地址写入数据的过程,这个过程一样,也是每个地址都有该数据。
此外,如图所示,由于SDRAM和Flash共用地址线和数据线,导致向SDRAM中写数据时,若配置了A1CR寄存器,则Flash中所有地址也会有该数据。
这个和最原始的问题可能会出在哪里呢?
,
Shine:
Jack Chen 说:因为没有成功写入数据,所以都是FFFF。
如果没有烧写成功的话,要检查flash那边的烧写命令,测量一下烧写时的时序是否满足flash数据手册的要求。
Jack Chen 说:由于SDRAM和Flash共用地址线和数据线,导致向SDRAM中写数据时,若配置了A1CR寄存器,则Flash中所有地址也会有该数据。
由片选信号来选择是使能SDRAM还是flash,不会同时工作,而且flash是要经过烧写命令才能将数据写入,往SDRAM中写数据不会改写flash里的内容。
,
Jack Chen:
您好,我还有个问题。上面第一个原理图,DSP和SST39VF800A的地址线是错位连接的,就是DSP的A[0]连接到了Flash的A[1],以此类推。那么如果我要向Flash地址为0x0001的空间写数据,那么我应该对DSP的哪个地址进行操作,是0x90000002吗?为什么?想求个详细解释。谢谢
,
Shine:
因为EMIF口会在内部对地址进行移位。EA0对应32bit访问,如果是16bit,需要用BA1来选择,如果是8bit,需要用BA1,BA0来选择。在EMIF文档里有说明。EM_A[x:0] always provide the least significant bits of a 32-bit word address. The BA[1:0] pins either provide the half-word and byte selection or provide EM_A[23:22] functionalitTMS320C672x DSP External Memory Interface (EMIF (ti.com)
,
Jack Chen:
感谢您的回答。
是的,这句话我注意到了,但我还是没有搞清楚:如果我要向Flash地址为0x0001的空间写数据,那么我应该对DSP的哪个地址进行操作?
,
Shine:
Jack Chen 说:如果我要向Flash地址为0x0001的空间写数据,那么我应该对DSP的哪个地址进行操作,是0x90000002吗
就是您上面说的这个0x90000002地址。
,
Jack Chen:
您好,我就是没搞明白为什么是这个地址。能否麻烦您详细的解释一下呢?
还有就是上面的BA1的问题。这个BA1在对应0x90000002中充当了哪一位?
,
Shine:
在DSP这边不管外面接几位的设备,A0都是代表内部地址的A2,当接低于32 bit的设备时,内部低位地址A0, A1由BA0, BA1来充当。DSP的内部地址如下
DSP address ……A3 A2 A1 A0 BA1 BA0 flash address …….A3 A2 A1 A0 BA1 0x90000000 …… 0 0 0 0 0 0 00000 …… 0 0 0 0 0 0x90000001 …… 0 0 0 0 0 1 00000 …… 0 0 0 0 00×90000002 …… 0 0 0 0 1 0 00001 …… 0 0 0 0 10×90000003 …… 0 0 0 0 1 1 00001 …… 0 0 0 0 1