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.

TM4C123GH6PM CAN引导程序的方法或例程



我现在的一个应用中要用到CAN引导升级程序,但我看了TivaWare_C_Series-2.1.4.178里面只有UART、USB、SSI、I2C的例子,就是没有CAN的。

在boot_serial的BL_main.c中,void ConfigureDevice(void)函数中有I2C_ENABLE_UPDATE、SSI_ENABLE_UPDATE、UART_ENABLE_UPDATE就是没有CAN的,我想改为CAN升级要怎么改?大家能告诉我方法吗?TivaWare™ Boot Loader USER’S GUIDE我看了,但是没看懂,还是不知道怎么下手。

最好能给我一个这样的例程,还有怎么测试

很着急,请大家帮忙。

  • 由于ROM中没有固话CAN升级的函数,只能自己写boot了。可以参考UART的例子来实现。可以参考D:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\dk-tm4c123g中bootdemo1和bootdemo2的代码来实现。

  • 另外也可以下参考下c2000通过CAN引导升级程序的方式,可以参考:数据手册,BOOT ROM User Guide,希望以下帖子能够给你提供帮助。

    http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/t/106283.aspx?pi2132219853=1&keyMatch=c2000%20can%E5%8D%87%E7%BA%A7&tisearch=Search-CN-Support

    http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/t/110203.aspx?pi2132219853=1&keyMatch=c2000%20can%E5%8D%87%E7%BA%A7&tisearch=Search-CN-Support

  • 我还是参考TivaWare_C_Series的dk-tm4c123g下的boot_serial例子,在项目配置文件中注释掉UART_ENABLE_UPDATE,然后定义

    #define CAN_ENABLE_UPDATE
    //#define CAN_UART_BRIDGE  这行的意思是通过串口转CAN?用不上所以注释了
    #define CAN_RX_PERIPH SYSCTL_RCGC2_GPIOA
    #define CAN_RX_PORT GPIO_PORTA_BASE
    #define CAN_RX_PIN 4
    #define CAN_TX_PERIPH SYSCTL_RCGC2_GPIOA
    #define CAN_TX_PORT GPIO_PORTA_BASE
    #define CAN_TX_PIN 5
    #define CAN_BIT_RATE 1000000

    编译程序通过,是否boot部分的已经完成,现在就是编写应用程序,然后把应用程序的HEX文件发送给引导程序,最后到LM_API_UPD_RESET部分复位后应用程序部分运行。

    我认为应用程序重点是保留boot_demo1例程中的startup_rvmdk.S文件,还有boot_demo1.c中的JumpToBootLoader(),在应用程序中就是通过调用JumpToBootLoader()跳转到引导程序中的,所以其他内容都可以根据需要修改为自己需要的内容,不知我说的是否正确?

    我现在想知道通过CAN发送HEX文件的协议哪里有?怎么发送HEX文件?

  • 当采用 UART0, SSI0, I2C0 和CAN 这些端口通信时, BootLoader 要求用户自定义串行通信协议,来确保更新过程中的通信可靠性, 将要更新到 Flash 上的系统软件集合也叫固件映像(Firmware Image),为了减少数据通信量, Firmware Image 通常某种数据压缩形式被压缩成一个包)。

  • 问题已经解决,我用VB变了个CAN发送HEX的程序,如果不加CRC32校验,升级没有问题,升级程序和应用程序都工作正常。

    现在还不明白CRC32的校验码怎么发送给引导程序的。