TI中文支持网
TI专业的中文技术问题搜集分享网站

F28379D emif_dc_flash例程求助

自己制作的处理板,使用DSP为28379D,emif外扩电路参考的是C2000Ware_2_00_00_02\boards\TIDesigns\F28379D_EMIF_DC中的电路设计,Flash选用的型号与参考设计一致,均为S29AL016J70TFI020。flash与dsp的所有电路链接都与emif_dc中的设计一致。

但使用c2000Ware提供的emif_dc_flash例程时(C:\ti\c2000\C2000Ware_2_00_00_02\device_support\f2837xd\examples\cpu1\emif_dc_flash)发现一些问题:

  • 1.原始代码无法实现对flash的读写控制,运行到进入CFI代码处时就会有错误,变量error加一。
errors = 0;EMIF_DC_enterCS2FlashCFI(EMIF_NUM);//进入CFI,向0x55(Flash地址)上写数据0x98if( (dataBuffer[16] != 0x51) ||(dataBuffer[17] != 0x52) ||(dataBuffer[18] != 0x59) ){errors++;ESTOP0;}

我也根据自己的GPIO分配,将 #define EMIF_DC_F2837X_LAUNCHPAD_V1   修改为 0。

后来将函数EMIF_DC_initCS2(EMIF_NUM, EMIF_DC_FLASH);中的寄存器值进行修改(//后的值为原始代码):

if( CS2Mem == EMIF_DC_FLASH ) {EMIF_DC_REGS[emifModule]->ASYNC_CS2_CR.bit.SS= 0;//0EMIF_DC_REGS[emifModule]->ASYNC_CS2_CR.bit.EW= 0;//0EMIF_DC_REGS[emifModule]->ASYNC_CS2_CR.bit.W_SETUP  = 15;//0EMIF_DC_REGS[emifModule]->ASYNC_CS2_CR.bit.W_STROBE = 0x3f;//4EMIF_DC_REGS[emifModule]->ASYNC_CS2_CR.bit.W_HOLD= 7;//0EMIF_DC_REGS[emifModule]->ASYNC_CS2_CR.bit.R_SETUP  = 15;//3EMIF_DC_REGS[emifModule]->ASYNC_CS2_CR.bit.R_STROBE = 0xf;//5EMIF_DC_REGS[emifModule]->ASYNC_CS2_CR.bit.R_HOLD= 7;//0EMIF_DC_REGS[emifModule]->ASYNC_CS2_CR.bit.TA= 3;//2EMIF_DC_REGS[emifModule]->ASYNC_CS2_CR.bit.ASIZE= 1;//1}

就实现了对flash的CFI序列读写。

请问各位老师,这些寄存器的值原始例程中是如何计算得到的呢?我又该如何根据flash的datasheet来修改配置?

  • 2.只能对flash的低8bit进行读写操作

在后续程序 擦除flash内容代码:


//// Erase flash and verify buffer contents//EMIF_DC_eraseCS2Flash(EMIF_NUM);for(word=0; word<BUFFER_WORDS; word++){if(dataBuffer[word] != 0xFFFF){errors++;ESTOP0;break;}}

我发现,EMIF_DC_eraseCS2Flash(EMIF_NUM);执行完后所有数据是0xFF而非0xFFFF。

后面对flash数据进行写操作也会出现同样的只能对低8bit操作的问题(例如,对某一地址写入0x0101,但该地址内实际对应的值为0x0001):

//// Program dataBuffer contents//for(word=0; word<BUFFER_WORDS; word++){EMIF_DC_programCS2Flash(EMIF_NUM, (Uint32)&dataBuffer[word], word);}//// Verify dataBuffer contents//for(word=0; word<BUFFER_WORDS; word++){if(dataBuffer[word] !=( word)){errors++;ESTOP0;break;}}

经过查看原理图,TI给出的F28379D_EMIF_DC.pdf原理图中,flash的BYTE#与WP#两个管脚(下图中圈出来的地方),我认为是被悬空未连接的,在自己的设计中将他们悬空,不知是否是这个原因导致BYTE#将flash配置为byte状态而只能对8bit数据进行操作?请问这两个管脚设计时的连接状态应该是怎样的?

但为何进入CFI模式和擦除命令,我都按照Word模式的命令进行操作,能够有响应;而将代码修改

EMIF_DC_REGS[emifModule]->ASYNC_CS2_CR.bit.ASIZE= 0

即flash配置为byte,按照byte进行命令操作,CFI都读取不正确呢?

希望各位老师能够给予指导!万分感激!

Green Deng:1、flash和f2837x的datasheet包括正确操作的时间要求。EMIF定时寄存器的编程应确保两个设备的设置和保持时间都满足要求。这些值通常是手动计算的。
为了方便起见,参考设计目录(\c200ware\boards\tidesigns\f28379d_emif_dc)中包含一个配置电子表格工具,用于计算合理的起点值。
还有一个“emif_dc flash”的例程,其时间值在参考设计中起作用。(\C2000Ware\device_support\f2837xd\examples\cpu1\emif_dc_flash)。
这个EMIF appnote描述了附录中的配置工具:www.ti.com/…/sprac96a.pdf
2、可以参考这个帖子的回复:e2e.ti.com/…/3141669

赞(0)
未经允许不得转载:TI中文支持网 » F28379D emif_dc_flash例程求助
分享到: 更多 (0)