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.

[参考译文] TMS320F2800137:当从软件本身以 SCI 引导模式引导时、使用串行引导(SCI_Boot)进行闪存编程的问题(不使用引导引脚)

Guru**** 1624165 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1350925/tms320f2800137-issue-with-flash-programming-using-serial-boot-sci_boot-when-booting-in-sci-boot-mode-from-software-itself-not-using-boot-pins

器件型号:TMS320F2800137
主题中讨论的其他器件:C2000WARE

在使用串行闪存编程器实用程序对 F2800137进行编程时、当我们使用引导引脚(GPIO32和 GPIO24)引导器件(SCI 引导模式)时、它可以正常工作

我们能够正确地对这两个文件(内核和应用)进行编程。 应用文件的执行也没有问题。

但是、当我们从软件本身引导器件时、即使用 SCI_Boot (0x01)、我们面临一些问题:

器件成功进入 SCI 引导模式

2.内核文件的编程也很好,内核的引导也很正确。

3.在对应用程序文件进行编程时,我们收到以下消息  

这似乎是一些与 DCSM 相关的问题、因为当我们将 CMD 文件更改为使用闪存至扇区31时、它可以正常工作、但当我们使用扇区32及以上版本时、我们会得到上述消息。

当我们使用扇区32 (地址0x088000)时、我们得到 错误地址:0x884a0

当我们使用扇区64 (地址0x090000)时、我们得到 错误地址:0x904a0

当我们使用扇区96 (地址0x098000)时、我们得到 错误地址:0x984a0

我将附加以下文件、以供您参考

1.使用的内核文件

e2e.ti.com/.../7536.flash_5F00_kernel_5F00_ex3_5F00_sci_5F00_flash_5F00_kernel.txt

2.应用程序 txt 文件(使用.hex2000实用程序的转换器)

e2e.ti.com/.../LED_5F00_500.txt

工程中使用的 cmd 文件

e2e.ti.com/.../1351.cmd.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当您提到通过软件使用 SCI 引导时、您是直接调用 ROM 中的该函数、还是已经使用该内容在 RAM/闪存中复制您自己的 SCI 引导?  只是想确保此处的源代码。  引导 ROM 在跳转到引脚指定的引导模式之前进行了一些初始化、我怀疑该代码之间的差值是什么、调用引导时会产生一些问题。 请告诉我您是如何在软件中实现的、我们可以进一步研究这一点。

    此致!

    马修

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否直接调用该函数 ROM [/报价]

    我将直接调用 ROM、SCI_Boot 函数位于  0x003fe0c4 在2800137的 ROM 中、我将直接分支到此地址、为此、我将遵循以下步骤:

    void Enter_Boot_Mode (void){
    INT DELAY_LOOP=0;
    Dint;
    IER = 0x0000;//在调用引导加载程序之前应禁用中断
    IFR = 0x0000;

    for (delay_loop=0;delay_loop<15;delay_loop++){
    MS (200);

    DisableDog ();


    EALLOW;

    ((void (*)()) 0x003fe0c4)(0x01);  //此处调用引导加载程序

    asm (" LB 0x000000");
    EDIS;

    更多观察结果:

    1.如上所述调用 SCI_BOOT 函数后、尝试使用" C2prog" 而不是" serial_flash_programmer "(C2000ware 随附的实用程序)则运行正常

    2.首先在 main 中调用 SCI_boot 函数、无需执行任何操作(无时钟配置、无外设配置、无任何操作)、即使使用 " serial_flash_programmer "。

    我怀疑这与调用 SCI_boot 函数之前要完成的初始化相关。

    您能帮助我提供一些文档或材料以供阅读、并了解在调用 SCI_BOOT 函数之前要执行的初始化、堆栈指针重新初始化或任何其他操作吗?