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.

TMS320F280049C: 280049 bootloader

Part Number: TMS320F280049C
Other Parts Discussed in Thread: LAUNCHXL-F280049C
HI,
我用的开发板是LAUNCHXL-F280049C 。开发自己的CAN bootloader程序。我的主程序和BOOT程序写在同一个工程文件中。
我的上位机程序在烧写传送.out文件完毕后,如果不断电,可以从BOOT跳转到主程序APP,因为可以看到CAN通信重新读取数据到我的上位机;
但是如果断电,从新上电,主程序没有运行,直接证据是不可以看到CAN通信读取数据到我的上位机。
然后我在没有檫除FLASH情况,  用CCS查看程序BOOTROM哪里出问题了。
1)首先我用CCS10.0加载调试程序时,点击ccs菜单''CPU RESER",程序进入0x3fc7a5,然后运行,程序停止在BOOTROM中的一段''WAIT-BOOT"中。
2)后来我修改了0Xd00寄存器数据为0x5AFF FFFF,程序可以进入主程序。但是开发板断电后0xD00数据又恢复成一个0X8F3F 3BDE之类的数据。
这说明我用自己的上位机进行CAN下载后不知道改动了哪里,BOOTROM不能正常读取0XD00数据导致程序下电后再上电,主程序启动失败。
3)如果我用CCS DEBUG下载.out文件到280049开发板,开发板断电后再上电,主程序启动正常(因为可以看到CAN通信读取数据到我的上位机)。
我目前只能查到这里,希望给些建议,再怎么进行下一步操作。多谢
  • 鉴于你使用的是自己定制的BOOT:

    1. 能描述一下整个程序的大概框架吗?有没有用到TI的BOOT ROM?

    2. BOOT的流程是什么样的?

  • 1.主程序main:初始化SYSCTRL,GPIO,CPUTIMER,CAN,PIEVECT,EPWM后进入主循环,主循环有时间片子程序,Can接收发送子程序,IO控制子程序。

    上位机发送CAN命令后,Can接收发送子程序收到命令后,跳转到BOOT程序。

    2.BOOT程序:初始化SYSCTRL,GPIO,CPUTIMER,CAN,PIEVECT后进入BOOT主循环,BOOT主循环有时间片子程序,Can接收发送子程序.

    BOOT程序接收到上位机发送的CANBOOT 数据,进行烧写,接收一帧数据然后烧写一帧数据。接收并烧写完毕后所有CAN数据后,等待15秒跳转后主程序main.

  • boot.c
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /*;***********************************************************************
    FILENAME: BOOT.c
    TITLE: bootloader function
    AUTHOR:
    PROJECT: rectifier
    PUBLIC: none
    PRIVATE: none
    **************************************************************************/
    #include "driverlib.h"
    #include "f28004x_device.h" // Headerfile Include File
    #include "f28004x_examples.h" // DSP28 Examples Include File
    #include "F021_F28004x_C28x.h"
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 按照你的设计来说,应该是不需要用到BOOT ROM的吧?如果没有用到BOOT ROM,将LaunchPad上的BOOT模式选择开关打到FLASH boot mode试一下。

    2)后来我修改了0Xd00寄存器数据为0x5AFF FFFF

    0x0D00寄存器是指向量表中的Reset中断向量吗?

  • 1.按照我的设计是不需要BOOTROM,但是我需要带仿真器单步查找问题。

    我的问题您清楚了吗?

    我的问题关键是:自己的上位机CAN下载FLASH后,如果不断电,是烧写成功的。一断电就不能重新启动了。所以我需要查BOOTROM这段程序。

    实验已经证明,如果修改了0XD00的数据,就可以启动。这个说明我用上位机烧写的FLASH是成功的,只是在重新启动时被BOOTBOM卡住了。

    0x0D00寄存器是指向量表中的Reset中断向量吗?-----0XD00是对应BOOTROM需要的EMU-BOOTPIN-CONFIG地址。

  • GPIO24,GPIO32已经SWITCH到上拉电阻位置了。如果不是这样,我用CCS烧写FLASH,肯定不能启动的

  • 我的问题关键是:自己的上位机CAN下载FLASH后,如果不断电,是烧写成功的。一断电就不能重新启动了。所以我需要查BOOTROM这段程序。
    1)首先我用CCS10.0加载调试程序时,点击ccs菜单''CPU RESER",程序进入0x3fc7a5,然后运行,程序停止在BOOTROM中的一段''WAIT-BOOT"中。
    3)如果我用CCS DEBUG下载.out文件到280049开发板,开发板断电后再上电,主程序启动正常(因为可以看到CAN通信读取数据到我的上位机)。

    我对上面这些陈述的理解就是:插着仿真器的时候,就会出现你描述的这些错误;而不连接仿真器的时候,也就是standalone的时候,是可以正常工作的。

    我可以这样理解吗?

  • 1.自己的上位机CAN下载FLASH后,如果不断电,是烧写成功的,主程序启动正常。一断电就不能重新启动主程序。

    2.用CCS DEBUG下载.out文件到280049开发板,开发板断电后再上电,主程序启动正常

  • 这个问题其实挺难通过调试器来排查的。因为插着仿真器和不插仿真器的时候BOOT的流程不一样。0x0D00 - EMU-BOOTPIN-CONFIG寄存器是只有在连接仿真器的时候才起作用的。

    我建议在两种烧录方式烧录之后,分别将内存中的固件读取出来,比较一下有什么差异。

    通过can升级的.out文件和通过调试器烧录的.out文件是同一个吧?升级的程序和芯片内之前的程序都是一样的结构吧?这个文件既包含主程序,也包含boot程序,那boot部分会重新擦写吗?

  • TI__Mastermind 40420 points

    这个问题其实挺难通过调试器来排查的。因为插着仿真器和不插仿真器的时候BOOT的流程不一样。0x0D00 - EMU-BOOTPIN-CONFIG寄存器是只有在连接仿真器的时候才起作用的。

    我建议在两种烧录方式烧录之后,分别将内存中的固件读取出来,比较一下有什么差异。

    通过can升级的.out文件和通过调试器烧录的.out文件是同一个吧?升级的程序和芯片内之前的程序都是一样的结构吧?这个文件既包含主程序,也包含boot程序,那boot部分会重新擦写吗?

    -------------------------------------------------------------------

    在两种烧录方式烧录之后,分别将内存中的固件读取出来,对比过了,FLASH内容没有差异。。。。

    因为插着仿真器在0XD00写入0XA5XX XXXX就进入单机上电模式,和不插仿真器的时候BOOT的流程就类似了,目前只能这样查问题。

    我目前比较尴尬的是CAN下载程序后,必须要用仿真器改写0XD00地址内容才能跑起来。。。。。。。。。。。。。。

  • 试着修改一下BOOT ROM中的这个寄存器:

    功能和EMU-BOOTPIN-CONFIG一样,只不过是在standalone下使用的。

  • EMU-OTP-BOOTPIN-CONFIG--------0XD00可以改,这个Z1-OTP-BOOTPIN-CONFIG(0x0005F008)在CCS/Memory Browser里改不了。在On-chip-flash设置里,也没有修改这个0x5F008的地址,但是可以修改0X5F00A。

    另外请问一下:4.6.2 BOOT ROM User OTP中的0x7800C 0x7800D在On Chip Flash修改了以后是否就会在0X5F008显示出修改的数据?

    就是他们的数据在stand alone模式下会是关联的?

    谢谢。 

  • 对的,确切的说更改BOOT相关的配置就是在DCSM OTP中,所以就是修改0x7800C。