网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> 服务导航 >> 帮助中心 >> C6000 >> 文章正文
  TMS320C672x开发笔记之FlashBurn           ★★★ 【字体:
TMS320C672x开发笔记之FlashBurn
作者:FreeNet    文章来源:FreeNet    点击数:    更新时间:2008-2-29    

当所有的程序都调试完毕,所要做的最后一步工作就是烧写Flash芯片了,这个可是大功告成的关键哦。我所选用的Flash芯片为SST39W400A,这是一个256kX16的片子,片子的容量足够大了,可以放下一般的程序了,这颗芯片有18条地址线,可是这个功能强大的672x只有12根地址线A0~A12,真是郁闷啊,仔细阅读datasheet后看到文章中提及可以用GPIO口来做地址线,这样才稍微放下心来,因为我没有使用codec功能,所以把McASP的的接口部分引脚设置为GPIO,再定义为输出,这样就有了地址线了。

 

由于dsp只有12根地址线,再加上BA[1]也就是13根地址线,dsp能够管理的地址范围是16kB,所以在烧写时候,超过了16kB要进行手动翻页才能实现烧写全部代码,这一点偶折腾了很久,当时为了印制板走线方便,没有按照寄存器排列的顺序设置地址线,所以几次译码都出错了,也查了好几次。

 

每次烧写的代码长度为0x400016kB),第一次烧写是对0x900000000x90003fff,当烧写完这第一个0x4000长度的代码时候,需要手动操作GPIO,也就是给FLASH高位地址置位,然后再从0x90000000这个地址进行烧写,如此反复,直到全部代码烧写结束。对DSP而言,所有的Flash操作都是在这一个地址范围内执行。

 

又因为这个Flash16位的,所以它的操作命令字地址也是按照16位的总线宽度命名的,也就是说0x5555这个地址要乘以2才是实际的物理地址(按字节排序),0x2AAA也是如此,这个时候的关键算法就是要把地址乘以2才能真正的把命令字写进去,不然始终操作不成功,又兼这里地址需要扩展,还要手动翻页,真是够烦的了,任意一个环节出了错误都不能完成任务,偶为了烧写真是挠破了头皮,所以一定要把好好总结一下,让后来的开发者少走弯路,尽快完成任务。

 

我定义的2个命令字地址如下,因为移位要比做乘法快,所以我选择左移一位,其实就是乘以2,定义如下:

 

 

#define FlashCMDaddress5555 0x5555<<1

 

#define FlashCMDaddress2aaa 0x2aaa<<1

 

这里共享几个命令的操作代码:

 

void FlashChipiErase(void)

{

 FlashReset();

 WriteFlash(FlashCMDaddress5555,0xaa);

 WriteFlash(FlashCMDaddress2aaa,0x55);

 WriteFlash(FlashCMDaddress5555,0x80);

 WriteFlash(FlashCMDaddress5555,0xaa);

 WriteFlash(FlashCMDaddress2aaa,0x55);

 WriteFlash(FlashCMDaddress5555,0x10);

  WaitTime(ms100);

 FlashReset();

 SetFlashAddressH(0);

}

 

void FlashProgram(unsigned int address,unsigned short data)

{

 WriteFlash(FlashCMDaddress5555,0xaa);

 WriteFlash(FlashCMDaddress2aaa,0x55);

 WriteFlash(FlashCMDaddress5555,0xa0); 

 WriteFlash(address,data);

 while(ReadFlash(address) !=data)

 {

  ;

 }

 FlashReset();

}

 

 

 

unsigned short FlashID(void)

{

 unsigned short var1,var2;

 FlashReset();

 WriteFlash(FlashCMDaddress5555,0xaa);

 WriteFlash(FlashCMDaddress2aaa,0x55);

 WriteFlash(FlashCMDaddress5555,0x98);

 var1=*(unsigned int *)0x90000000;

 var2=*(unsigned int *)0x90000002;

 FlashReset();

 if((var1==0xbf)&&(var2==0x2780))//读出厂商及芯片代码

 

  return (unsigned short)0;

 else

  return (unsigned short)-1;

}

 

因为目标代码的烧写就是一个文件的数据读取和存储的过程,偶没有用这个芯片存储程序运行过程中的数据,仅仅用来放目标程序,所以仅仅使用片擦除和片写入这两步,至于厂商代码是为了验证芯片是否选错而已。

 

至于如何读取目标代码文件,如何对数据流进行格式转换都是小菜啦,这里不再赘述。

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    TMS320C672x开发笔记之HPI
    TMS320C672x开发笔记之EMIF
    DSP281x无需仿真器,串口烧写…
    TMS320C672x开发笔记之外部中…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号