通过CCS烧写FLASH的方法

 求助:FLASH的烧写工具在CCS中无法显示!

答:  步骤:右击CCS2图标-----属性----查找目标---找到一个comp_mgr的文件(就是CCS图标类似,但是头上有个喇叭的)双击打开----Texas Instruments----把那个加号打开,在ON-chip  flash programme,前面选中就好了
 

通过CCS烧写FLASH的方法

TI公司提供了一个烧写FLASH的软件,但是那需要将程序编译后生成的OUT文件再转换成ROM格式;或者是先将应用程序编译后导出到一个二进制文件中,再通过CCS编程序从这个二进制文件中一个一个的读入并写进FLASH。

笔者要介绍的方法与上述两个方法不同。根据SST39VF160的时序,编写一个搬运程序,注意与DSP的BOOT程序的区别,这里的搬运程序是将在CCS中打开的工程的内容原封不动的搬到FLASH中,如此完成FLASH的烧写。根据这个思想,需要编写两个工程:一个主程序工程(即用户应用程序,其中包括二次引导程序),一个搬运程序工程搬移程序不能使用与主程序的程序空间和中断向量表重合的物理空间,以免覆盖。烧写时,同时打开主程序和搬移程序的PROJECT,先LOAD主程序,再LOAD搬移程序,然后执行搬移程序,烧写OK!

分别编写project(项目本身用)和writer(烧写用)两个工程,并且通过CCS进行load后,就可以实现了。但是project的内容比较少,所以project和writer都可以放在RAM中,而我的问题在于project很大,RAM放不下project和writer,怎么办?

该方法应该是最简单的方法,只要在搬运程序中合理的调用下面列出的子程序,即可完成FLASH的擦除与编程。

 

1)FLASH擦除子程序 

FLASH编写之前,应对FLASH进行擦除,使其每个数据位恢复1状态,即全FF状态。

void erase_flash()

{

              *(unsigned volatile char*)FLASH_ADR1=0x00aa;

              *(unsigned volatile char*)FLASH_ADR2=0x0055;

              *(unsigned volatile char*)FLASH_ADR1=0x0080;

              *(unsigned volatile char*)FLASH_ADR1=0x00aa;

              *(unsigned volatile char*)FLASH_ADR2=0x0055;

              *(unsigned volatile char*)FLASH_ADR1=0x0010;

              delay();

}

  这里FLASH_ADR1代表0x64005555、FLASH_ADR2代表0x64002AAA。

 

 

2) FLASH单字编程子程序

void Program_One_Word (BYTE SrcWord,    BYTE *Dst)

{

              BYTE *DestBuf;

              BYTE *Temp;

              DestBuf = Dst;

 

              Temp =  (BYTE *)((WORD)FLASH_START+(0x5555));    

              *Temp = 0xAA;                

   

              Temp =  (BYTE *)((WORD)FLASH_START+(0x2AAA));

              *Temp = 0x55;               

 

              Temp =  (BYTE *)((WORD)FLASH_START+(0x5555));

             *Temp = 0xA0;               

 

              *DestBuf = SrcWord;           

              Check_Toggle_Ready(DestBuf);  

 }

 

void Check_Toggle_Ready (BYTE *Dst)

{

               BYTE Loop = TRUE;

               BYTE PreData;

               BYTE CurrData;

               unsigned long TimeOut = 0;

 

               PreData = *Dst;

               PreData = PreData & 0x4040;

               while ((TimeOut< 0x07FFFFFF) && (Loop))

               {

                   CurrData = *Dst;

                   CurrData = CurrData & 0x4040;

                   if (PreData == CurrData)

                    Loop = FALSE;  

                   PreData = CurrData;

                   TimeOut++;

               }

}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值