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

(1)通过CAN烧录FLASH的问题__(2)CC5仿真直接跑到main的问题

请问:

我想在code_start处插入一段代码Bootloader(),用于接收CAN发送过来的APP.HEX,并调用FLASH API将APP.HEX写入到FLASH2

写入FLASH2完成后,执行LB _c_int00 ,然后跳转到main .

这样的流程是否可行?

正常的程序都是先LB _c_int00  后跳转到main .。

现在Bootloader()在 _c_int00  能正常工作吗?

 

问题2:

ccs 5 仿真时,直接运行到main()。我想从Codestart 开始仿真,怎样设置。

Debug ->configuration->target->Auto Run Option ->Run to symbol 填写code_start不起使用

 

 

 

 

 

Eric Ma:

1. 通常code start会跳转到_c_int00,然后跳转到main, 如果你要进行升级烧写,则可以在code start 那里判断,跳转到你CAN的程序(我们称之为boadloader),在你的算法里接收CAN的数据,然后擦除flash,烧写。完成之后,做一个软件复位靠谱点。

2. 你设置_C_int00试试。

ERIC

请问:

我想在code_start处插入一段代码Bootloader(),用于接收CAN发送过来的APP.HEX,并调用FLASH API将APP.HEX写入到FLASH2

写入FLASH2完成后,执行LB _c_int00 ,然后跳转到main .

这样的流程是否可行?

正常的程序都是先LB _c_int00  后跳转到main .。

现在Bootloader()在 _c_int00  能正常工作吗?

 

问题2:

ccs 5 仿真时,直接运行到main()。我想从Codestart 开始仿真,怎样设置。

Debug ->configuration->target->Auto Run Option ->Run to symbol 填写code_start不起使用

 

 

 

 

 

Kaiqiang Chen:

回复 Eric Ma:

Eric Ma

1. 通常code start会跳转到_c_int00,然后跳转到main, 如果你要进行升级烧写,则可以在code start 那里判断,跳转到你CAN的程序(我们称之为boadloader),在你的算法里接收CAN的数据,然后擦除flash,烧写。完成之后,做一个软件复位靠谱点。

2. 你设置_C_int00试试。

ERIC

请问:

我想在code_start处插入一段代码Bootloader(),用于接收CAN发送过来的APP.HEX,并调用FLASH API将APP.HEX写入到FLASH2

写入FLASH2完成后,执行LB _c_int00 ,然后跳转到main .

这样的流程是否可行?

正常的程序都是先LB _c_int00  后跳转到main .。

现在Bootloader()在 _c_int00  能正常工作吗?

 

问题2:

ccs 5 仿真时,直接运行到main()。我想从Codestart 开始仿真,怎样设置。

Debug ->configuration->target->Auto Run Option ->Run to symbol 填写code_start不起使用

 

 

 

 

 

Eric Ma:

回复 Kaiqiang Chen:

解释一下:

如果要在线升级,则芯片内部要划分一个扇区来存bootloader, 其他扇区都来存你的APP。一般来讲是分两个工程,烧写两次把bootloader和APP分开加载进去芯片。

如果要升级,一种方法是可以上电后,直接跳转到APP的入口地址,然后在APP中去判断CAN接受的命令,如果要升级,则跳转到bootloader的入口地址。bootloader再初始化后,擦除flash,接受CAN的数据,烧写。

另外要注意的情况是,假如通过上述的步骤烧写失败了,如应用程序被擦除了,但是新的代码没烧写成功,这时候重新上电,通过上述步骤就没办法再次烧写,所以要考虑多一个防烧写失败的功能。例如在擦除前,往某一个flash单元写入0xF0,表示烧写没完成,烧写完成后,才修改为0xF1. 然后在上电后的bootloader的code start去判断这个地址,如果0xF1,则跳转到APP的入口,否则跳转到code start的_c_int00.

ERIC.

请问:

我想在code_start处插入一段代码Bootloader(),用于接收CAN发送过来的APP.HEX,并调用FLASH API将APP.HEX写入到FLASH2

写入FLASH2完成后,执行LB _c_int00 ,然后跳转到main .

这样的流程是否可行?

正常的程序都是先LB _c_int00  后跳转到main .。

现在Bootloader()在 _c_int00  能正常工作吗?

 

问题2:

ccs 5 仿真时,直接运行到main()。我想从Codestart 开始仿真,怎样设置。

Debug ->configuration->target->Auto Run Option ->Run to symbol 填写code_start不起使用

 

 

 

 

 

Kaiqiang Chen:

回复 Eric Ma:

谢谢Eric大神的指点!我现在用的是TMS320F28377D,程序是双CPU的,如果是只用一个CPU的话,想您说的那样可以完美解决,但是CPU2该如何配置呢?

请问:

我想在code_start处插入一段代码Bootloader(),用于接收CAN发送过来的APP.HEX,并调用FLASH API将APP.HEX写入到FLASH2

写入FLASH2完成后,执行LB _c_int00 ,然后跳转到main .

这样的流程是否可行?

正常的程序都是先LB _c_int00  后跳转到main .。

现在Bootloader()在 _c_int00  能正常工作吗?

 

问题2:

ccs 5 仿真时,直接运行到main()。我想从Codestart 开始仿真,怎样设置。

Debug ->configuration->target->Auto Run Option ->Run to symbol 填写code_start不起使用

 

 

 

 

 

Eric Ma:

回复 Kaiqiang Chen:

你先把CPU1搞定了,你就能搞定CPU2了。一般要两个CPU都能独立升级或是同时升级。

我是建议都只用CPU1的CAN作为唯一的通信接口,当要升级CPU2的时候,CPU1的APP接到升级指令,同样跳转到CPU1的bootloader, 但是这个bootloader这时的功能只是作为接收CAN发来的数据,然后通过IPC标志告诉CPU2的APP去升级了,同时通过IPC把数据发送给CPU2。

所以CPU1,CPU2都有各自的bootloader和APP,只不过CPU2的bootloader监视的是IPC标志及CPUd1通过共享RAM发来的数据而已。

而CPU1的bootloader不但要升级自己,还有有部分功能作为传递数据用。

ERIC

请问:

我想在code_start处插入一段代码Bootloader(),用于接收CAN发送过来的APP.HEX,并调用FLASH API将APP.HEX写入到FLASH2

写入FLASH2完成后,执行LB _c_int00 ,然后跳转到main .

这样的流程是否可行?

正常的程序都是先LB _c_int00  后跳转到main .。

现在Bootloader()在 _c_int00  能正常工作吗?

 

问题2:

ccs 5 仿真时,直接运行到main()。我想从Codestart 开始仿真,怎样设置。

Debug ->configuration->target->Auto Run Option ->Run to symbol 填写code_start不起使用

 

 

 

 

 

Kaiqiang Chen:

回复 Eric Ma:

我现在的做法就如您所说,CPU1bootloader接收数据,并判断是升级CPU1还是CPU2,如果是CPU2,就设置一个IPCFLAG,数据存储在共享的GSRAM中,CPU2只做读取,这些都实现了,现在问题是应用程序的CPU2中也需要使用同一个CAN,跳转到应用程序后CAN不工作,请问这是什么原因?

请问:

我想在code_start处插入一段代码Bootloader(),用于接收CAN发送过来的APP.HEX,并调用FLASH API将APP.HEX写入到FLASH2

写入FLASH2完成后,执行LB _c_int00 ,然后跳转到main .

这样的流程是否可行?

正常的程序都是先LB _c_int00  后跳转到main .。

现在Bootloader()在 _c_int00  能正常工作吗?

 

问题2:

ccs 5 仿真时,直接运行到main()。我想从Codestart 开始仿真,怎样设置。

Debug ->configuration->target->Auto Run Option ->Run to symbol 填写code_start不起使用

 

 

 

 

 

Kaiqiang Chen:

回复 Eric Ma:

我修改了CodeStartBranch.asm,但是不是很懂汇编,能帮我看一下这样写哪里不对吗?跳转不到应用程序

请问:

我想在code_start处插入一段代码Bootloader(),用于接收CAN发送过来的APP.HEX,并调用FLASH API将APP.HEX写入到FLASH2

写入FLASH2完成后,执行LB _c_int00 ,然后跳转到main .

这样的流程是否可行?

正常的程序都是先LB _c_int00  后跳转到main .。

现在Bootloader()在 _c_int00  能正常工作吗?

 

问题2:

ccs 5 仿真时,直接运行到main()。我想从Codestart 开始仿真,怎样设置。

Debug ->configuration->target->Auto Run Option ->Run to symbol 填写code_start不起使用

 

 

 

 

 

youdong sheng:

回复 Kaiqiang Chen:

你好:

        我也在做CAN的bootloader,通过CAN下载程序到flash中,就差最后一步跳转,不知道要怎么修改这个文件?你解决了吗?可以指教下吗?

请问:

我想在code_start处插入一段代码Bootloader(),用于接收CAN发送过来的APP.HEX,并调用FLASH API将APP.HEX写入到FLASH2

写入FLASH2完成后,执行LB _c_int00 ,然后跳转到main .

这样的流程是否可行?

正常的程序都是先LB _c_int00  后跳转到main .。

现在Bootloader()在 _c_int00  能正常工作吗?

 

问题2:

ccs 5 仿真时,直接运行到main()。我想从Codestart 开始仿真,怎样设置。

Debug ->configuration->target->Auto Run Option ->Run to symbol 填写code_start不起使用

 

 

 

 

 

youdong sheng:

回复 youdong sheng:

解决了~~~~

赞(0)
未经允许不得转载:TI中文支持网 » (1)通过CAN烧录FLASH的问题__(2)CC5仿真直接跑到main的问题
分享到: 更多 (0)