Part Number:TMS320C6727BOther Parts Discussed in Thread:TMS320C6748
如图所示是C6727与外部异步16位flash连接图。
如果我要向flash地址为0x0001的空间写数据,那么对应的DSP地址应该是多少?
如果我要向flash地址为0x0005的空间写数据,那么对应的DSP地址应该是多少?
想求一个具体解释,谢谢。
C6727对应的Flash地址为0x90000000—0x9FFFFFFF。
Nancy Wang:
请参考以下关于tms320c6748 emif 的讨论:
https://e2echina.ti.com/support/processors/f/processors-forum/196941/fpga-emif
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/365309/address-mapping-to-6748-emif-and-ba-1-behavior
,
Jack Chen:
根据链接中的内容,可以得到以下结论:
Flash(0x0000) = DSP(0x0000)且BA1=0;
Flash(0x0001) = DSP(0x0000)且BA1=1;
Flash(0x0002) = DSP(0x0001)且BA1=0;
Flash(0x0003) = DSP(0x0001)且BA1=1……
DSP的一个地址可以存放8bits数据,16位Flash的一个地址可以存放16bits数据。但是根据上述结论,DSP的一个地址存放了32bits数据。
这是怎么回事呢?麻烦解答一下,谢谢啦。
,
Nancy Wang:
当对32 位的 DSP 内存地址执行读/写访问时,EMIF 控制器将在内部执行两次(16 位数据模式)连续读/写访问(第一次使用 BA[1] = 0,第二次使用 BA[1]=1)以完成 32 位读/写。
CEnCFG 寄存器的 ASIZE 字段确定完成所需的外部访问次数。
当 ASIZE = 0(8 位)时,对 32 位的请求需要四次外部访问,而当 ASIZE = 1(16 位)时需要两次外部访问。
,
Jack Chen:
您好,可能是我的问题。我没看懂您的这个答案和我上面的结论有什么关系。
您可以直接回答一下最开始的问题吗?我如果令ASIZE=1(16位),那么:
如果我要向flash地址为0x0001的空间写数据,那么我应该操作的对应的DSP地址应该是多少?
如果我要向flash地址为0x0005的空间写数据,那么我应该操作的对应的DSP地址应该是多少?
,
Nancy Wang:
我认为应该是0x90000000和0x90000003。
,
Jack Chen:
您好,我想问一下,为什么DSP的地址是这个,希望得到一个详细的解释,麻烦您了。
,
Nancy Wang:
前面可能说错了,应该是0x90000000和0x90000002。
正如英文论坛上解释的,flash的0x0000和0x0001对应到DSP内部是相同的地址,只是通过BA[1]来区分。
,
Jack Chen:
那我编程的时候,怎么对BA[1]进行操作呢?
也就是说,下面的问题如何解决:
这个帖子我也完整的阅读了一遍,如果像这个帖子说的一样,那么我让DSP的地址0x90000000写数据,那么对应flash的地址是0x0000还是0x0001应该这么区分呢?读的时候也有这种问题,我对DSP的地址0x90000000进行读操作,那么我读到的数据是对应flash的0x0000还是0x0001应该怎么区分呢?
,
Nancy Wang:
如果是32位读写,先是BA[1] = 0 然后是 BA[1]=1
我现在也无法实际测试,您可以实际读写测试看看,找了一些帖子给你参考。
#2. 当做EMIF访问时,CPU送出访问命令给EMIF,接下来的就是EMIF自己完成了。当是一个32bit访问时,EMIF为16bit宽时,则分为2次16位连续访问,即CS为低,WE或OE送出2次。这个操作是EMIF分解的,与CPU没有关系。
#3. 如果一定要得到一个CS出现一次读写使能,那么在你的代码中,对赋值对像设为16位的short型即可。
e2echina.ti.com/…/am1808emif