加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

通过CCS烧写FLASH的方法

发布时间:2020-12-15 06:42:12 所属栏目:百科 来源:网络整理
导读:? 求助:FLASH的烧写工具在CCS中无法显示! 答:? 步骤:右击CCS2图标-----属性----查找目标---找到一个comp_mgr的文件(就是CCS图标类似,但是头上有个喇叭的)双击打开----Texas Instruments----把那个加号打开,在ON-chip??flash programme,前面选中就好

?求助: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++;

??????? ?????? }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读