TMS320F280049: 关于280049的bootloader功能的问题

Part Number: TMS320F280049
Other Parts Discussed in Thread: C2000WARE

我当前程序分为boot程序与APP程序;

要实现OTA升级的功能,从boot程序跳转到APP程序是正常的;但是在APP程序跳转到boot中程序出现了一些问题:

具体描述如下:
我在APP程序中执行

    DINT;
    IER = 0x0000;
    IFR = 0x0000;
    InitPieCtrl();
    SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_CLA1);

    SysCtl_resetDevice();
来进入软件复位,在不连接仿真器的情况下,程序执行完这段后就停止运行或者跑飞(我的判断依据是APP程序是LED灯慢闪,boot程序是LED灯快闪),连接仿真器后程序运行到这个语句后就出现:
image.png
我BOOT的map文件开头:ENTRY POINT SYMBOL: "code_start"  address: 00080000
在开头就关闭了看门狗

我应该怎么做,让280049正确的进行复位,正确的执行boot程序

不要只给发一个例程,帮我分析一下原因和解决办法,辛苦

  • 当前硬件是flash加载模式

  • 感谢您关注TI产品。我们正在核实您的问题,请耐心等待我们的回复。

  • 请问应该如何解决这个问题呢

  • 你好,

    由于今天是TI印度公司的假日,回复可能会稍有延迟,敬请谅解。

  • 您好,请问可以帮忙解决一下这个问题嘛,麻烦了

  • 你好,

    - 请参阅 TRM TMS320F28004x 实时微控制器技术参考手册(修订版 H)第 4.4.1 节,了解仿真启动流程。请务必按照这些步骤操作。


    原因是F28004x在仿真模式下的启动模式(仿真启动)尚未配置,因此启动过程无法顺利完成。当芯片再次上电或接收到复位信号时,需要执行启动程序,选择程序入口地址或使用外设加载器(引导加载程序)才能运行应用程序。复位后,芯片从地址0x3FFFC0运行复位向量,跳转到启动ROM以开始执行InitBoot函数。芯片将判断当前仿真器是否连接,并进入不同的启动过程。图4.3和图4.2分别显示了芯片在离线模式和仿真调试模式下的启动过程。

    (1)如果芯片未连接到仿真器,系统将进入离线模式启动过程。默认情况下,F28004x 通过 GPIO24 和 GPIO32 的启动模式选择引脚 (BMPS) 电平来选择不同的启动模式,如表 1 所示。与 F2803x 等老款芯片不同,F28004x 还支持用户自定义 BMPS 和启动模式,可通过重写 DCSM OTP 中的 Z1-OTP-BOOTPIN-CONFIG 和 Z1-OTP-BOOTDEF 值来实现自定义启动功能,最多支持 3 个 BMPS 引脚和 8 种启动模式。

    具体流程:如果 Z1-OTP-BOOTPIN-CONFIG.Key=0x5A,则进入自定义启动模式。

    芯片根据 Z1-OTP-BOOTPIN-CONFIG.BMPSx 中设置的 BMPS 引脚和电平状态来确定要执行的启动模式(相应的启动模式由 Z1-OTP-BOOTDEF.BOOTDEFx 设置)。否则,芯片将根据 GPIO24 和 GPIO32 的电平状态选择默认启动模式。

    (2) 如果芯片未连接到仿真器,则会进入启动模式进行仿真调试,该模式通过读取 EMU-BOOTPIN-CONFIG 和 EMU_BOOTDEF 的值来执行特定的启动模式。值得注意的是,上述 OTP 中的自定义模式配置修改是一次性的,无法再次擦除。因此,系统提供了 EMU-BOOTPIN-CONFIG 和 EMU_BOOTDEF 用于模拟自定义启动过程,作为实际修改 DCSM OTP 之前的参考。

    具体流程:如果 EMU-BOOTPIN-CONFIG.Key=0x5A,则选择自定义启动模式。芯片会根据 EMU-BOOTPIN-CONFIG.BMPSx 设置的 BMPS 引脚及其电平状态来确定启动模式。需要注意的是,如果 EMU-BOOTPIN-CONFIG.Key=0xA5,则表示芯片在连接仿真器的情况下可以进入离线启动模式,即根据 Z1-OTP-BOOTPIN-CONFIG 和 Z1-OTP-BOOTDEF 对应的值进行启动;此模式与 F2803x 在连接仿真器时将 EMU_BMODE 配置为 GetMode() 的原则一致。如果 EMU-BOOTPIN-CONFIG.Key 的值配置不正确,芯片将进入等待启动模式,陷入循环等待状态,无法完成启动过程。





    表 1 默认启动模式

    如果芯片成功完成启动模式,它将通过外设加载程序,或者直接跳转到与启动模式对应的程序入口地址,以开始运行应用程序,即 main() 函数。例如,如果从 Flash 启动,它将跳转到地址 0x80000(在这种情况下,您需要在 CMD 文件中配置“codestart”部分,以链接到相应的 Flash 空间地址)。

    基于以上对F28004x芯片启动过程的介绍,我们回过头来分析连接仿真器进行调试时的复位问题。以C2000ware提供的LED程序为例:(C:\ti\c2000\C2000Ware_DigitalPower_SDK_1_02_00_00\c2000ware\device_support\f28004x\examples\led) 编写程序。根据表2中提供的Boot ROM寄存器地址,可以在内存浏览器窗口中查看EMU_BOOTPIN_CONFIG的Key值(高8位)。结果如图3所示:由于EMU_BOOTPIN_CONFIG.Key = 0xEE,芯片将进入等待启动模式。如果在复位后立即运行,反汇编窗口显示程序卡在 0x3FB02A,处于 ESTOP0 循环等待状态,该状态位于等待启动运行地址范围 (0x3FAD74 – 0x3FB0CD) 内,如图 4 所示。

    表 2. 启动 ROM 寄存器地址






    图 3 显示了 EMU_BOOTPIN_CONFIG 的值



    图 4 程序运行后的停止位置


    因此,如果要在复位后立即恢复运行,解决方法是在仿真状态下正确配置启动模式。以启动到闪存为例(参见 F28004x TRM 手册 4.3.3.1),有两种方法:

    1) 在 EMU_BOOTPIN_CONFIG 地址处写入 0x5AFFFFFF,并在对应于 EMU_BOOTDEF_LOW 地址的低 8 位处写入 0x03 (BOOTDEF.BOOTDEF0=0x03)

    2) 如果芯片在单个引脚时可以正常工作,例如 GPIO24 和 GPIO32 都为高电平(默认从闪存启动),则写入 0xA5FFFFFF 0xD00 EMU_BOOTPIN_CONFIG 地址。




    请务必同时检查以下内容:

    1)检查 XRSn 电路。看门狗复位会将 XRSn 拉低 512 个 OSCCLK 周期。根据数据手册,这需要:

    -从 XRSn 到 VDDIO 的 2.2–10 kΩ 上拉电阻;
    -如果使用电容器,则VSS的电容器容量应为100 nF或更小;
    -仅当外部设备驱动 XRSn 时才允许开漏驱动。

    2) 请注意,看门狗复位会清除此设备上的所有 RAM。


    问候
    阿尔皮特
  • 您好,

         谢谢你的回复,当前在不连接仿真器的情况下还是有问题,map文件中:“ENTRY POINT SYMBOL: "code_start"  address: 00080000”

    检测了复位电路也是没问题的,DSP上电之后可以先加载BOOT程序,然后从boot跳转到app程序,在APP程序中执行复位语句后还是卡住,我确认 GPIO24 和 GPIO32 都为高电平,使用示波器量是没问题的;

    我原本猜测可能是跳入boot程序后跳入非法中断了,然后将程序从SysCtl_resetDevice();改为 asm(" LB  #0x080000 ");程序是可以跳到BOOT程序的,并且运行没问题;不过此处我需要使用复位形式;

    当前现象是DSP在执行完SysCtl_resetDevice();后程序停止运行,如果此刻带电直接连接仿真器后程序立刻运行boot程序,然后在CCS中连接仿真器观察寄存器CpuSysRegs.RESC,结果如下:


    我应该如何实现不连接仿真器,程序正常复位到boot程序中?

    辛苦帮忙看一下

  • 需要我提供一下APP程序与boot程序的cmd文件吗,
    我之前按照ai的引导,在    SysCtl_resetDevice();执行之前:
    执行了程序
     EALLOW;
     *(volatile uint16_t *)0x0D00 = 0x5AFF;
     *(volatile uint16_t *)0x0D01 = 0xFFFF;
     EDIS;
    这个会影响不连接仿真器的情况吗

    当前0xD00地址的数据如上图;