This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28035 CAN-IAP问题

最近用28035做了一个CAN总线的IAP烧写功能,遇到了一些问题:将转换好的bin文件烧写进FLASH里后,跳转到烧写的起始地址后程序并不运行,而这个bin文件对应的工程,用仿真器直接下载到DSP28035里面是可以直接运行的,可以正常CAN通信。我是从flash的0x003EE000处开始烧写目标程序的bin文件,之后DSP重新上电,程序跳转到0x003EE000处,但是无法执行,没有CAN通信收发。请问是这种跳转有问题还是out转换成的bin文件不正确?

  • 问题已经解决 谢谢大家。

  • 你好,你在用can烧写时,自己定义的bootloader程序把,里边是否用到了,擦除Flash_Erase、烧写Flash_Program以及验证Flash_Verify这三个函数呢?

  • 我想请教一下,由out文件转为bin文件,你是用什么方式转换的呢?谢谢!

  • 可以先在CCS中右键工程选择属性,在属性选项卡中设置生成目标文件格式为hex文件,再用hex转bin工具转换就可以了。

  • 当时的主要问题是IAP跳转到主程序的入口地址的问题。已经解决了。CAN烧写过程要用到Flash_Erase和Flash_Program,按照一定的协议进行烧写。

  •  我使用的是ccs3.3,右键属性中没有找到,然后用Hex转bin用的什么工具。能否再给详细说一下啊

  • 你好,请教三个问题:

    1、据我知道的是CAN数据帧是8个字节,一般的程序至少也十几kByte,那你们是如何处理的有效数据与代码量大的问题?(串口就一帧就可以发送很长的数据);

    2、烧录完成后,是如何跳转到主程序重新开始的?

    3、看过HEX的数据,里面是带绝对地址的?那么转化层bin文件是仅仅将ascii码转化成二进制吗,还是有其他不同?

    盼回,万分感谢!

  • 1. IAP程序按照YMODEM协议与上位机进行交互,接收并烧写上位机下发的.bin文件的数据。

    2.利用指针跳转到预先设定好的主程序入口地址。例如:

    run = ( void(*)() ) 0x003F2000 ;
    (*run)();

    3.利用转换格式转换工具首先将.out转成.hex,再将.hex转成.bin。

    方法不一定是最优,希望对你有帮助。

  • 谢谢你的帮助,协议应该都是基于ISO 15765标准,跳转地址放到Boot-to-Flash Entry Point是否会更安全点,重新进行进行_c_init到main的工作?