This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320C6727B: 使用SST39VF800A型号的Flash进行读写,只能在DSP对应的Flash的第一个地址写数据

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寄存器。

  • 写完数据后,建议用代码去回读一下flash里的值,看是没有成功烧写flash还是ccs显示的问题。

  • 您好,我尝试了以下,就是单纯的没写进去。 Flash的写操作步骤如图所示,进行每一步时,0x90000000—0x9FFFFFFFF都有所写数据。主函数是向地址0x90000000写数据,但是却在0x90000000—0x9FFFFFFFF都有该数据。每次循环都是一样的。断电之后,数据就丢失了。这个可能是哪里出了问题呢?

  • 先看一下有没有擦除成功,都是FFFF。尝试加长每次烧写之间的间隔。

  • 因为没有成功写入数据,所以都是FFFF。擦除的步骤也有按照地址写入数据的过程,这个过程一样,也是每个地址都有该数据。

    此外,如图所示,由于SDRAM和Flash共用地址线和数据线,导致向SDRAM中写数据时,若配置了A1CR寄存器,则Flash中所有地址也会有该数据。

    这个和最原始的问题可能会出在哪里呢?

  • 因为没有成功写入数据,所以都是FFFF。

    如果没有烧写成功的话,要检查flash那边的烧写命令,测量一下烧写时的时序是否满足flash数据手册的要求。

    由于SDRAM和Flash共用地址线和数据线,导致向SDRAM中写数据时,若配置了A1CR寄存器,则Flash中所有地址也会有该数据。

    由片选信号来选择是使能SDRAM还是flash,不会同时工作,而且flash是要经过烧写命令才能将数据写入,往SDRAM中写数据不会改写flash里的内容。

  • 您好,我还有个问题。上面第一个原理图,DSP和SST39VF800A的地址线是错位连接的,就是DSP的A[0]连接到了Flash的A[1],以此类推。那么如果我要向Flash地址为0x0001的空间写数据,那么我应该对DSP的哪个地址进行操作,是0x90000002吗?为什么?想求个详细解释。谢谢

  • 因为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] functionalit
    TMS320C672x DSP External Memory Interface (EMIF (ti.com)

  • 感谢您的回答。

    是的,这句话我注意到了,但我还是没有搞清楚:如果我要向Flash地址为0x0001的空间写数据,那么我应该对DSP的哪个地址进行操作?

  • 如果我要向Flash地址为0x0001的空间写数据,那么我应该对DSP的哪个地址进行操作,是0x90000002吗

    就是您上面说的这个0x90000002地址。

  • 您好,我就是没搞明白为什么是这个地址。能否麻烦您详细的解释一下呢?

    还有就是上面的BA1的问题。这个BA1在对应0x90000002中充当了哪一位?

  •  在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                      00000          ...... 0    0   0   0      
    0x90000001     ...... 0    0   0   0    0    1                      00000          ...... 0    0   0   0    0
    0x90000002     ...... 0    0   0   0    1    0                      00001          ...... 0    0   0   0    1
    0x90000003     ...... 0    0   0   0      1                      00001          ...... 0    0   0   0    1