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.

[参考译文] TMS570LS1224:使用 CAN 引导加载程序不会从引导加载程序跳转到应用程序代码

Guru**** 2538955 points
Other Parts Discussed in Thread: TMS570LS1224, TMS570LC4357, TMS570LS1227, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1228999/tms570ls1224-using-can-bootloader-not-jump-from-bootloader-to-application-code

器件型号:TMS570LS1224
Thread 中讨论的其他器件: TMS570LC4357TMS570LS1227UNIFLASH

大家好!

我将把 TI TMS570LS1224控制器用于基于 CAN 的引导加载程序。

在这里、我已经编写了引导加载程序代码、并通过调试器刷写来刷写没有问题。

之后、我要使用 INCA 工具刷写应用程序代码的.Hex 文件和.A2L 文件、通过 INCA 刷写代码也可以正常工作、但一旦我进行了上电复位、代码就会从引导加载程序跳转到应用程序。 但在本例中没有执行此步骤、因此请联系拥有引导加载程序专业知识的人员。

我正在使用应用程序起始地址0x20000、并且我也检入了内存、其中所具有的值与.hex 文件中具有的值一样。

非常感谢。

此致、

S·马德哈瓦

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

    尊敬的 Shriram:

    已开始处理您的问题、很快将提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    尊敬的 Shriram:

    Unknown 说:
    在这里我写了引导加载程序

    看起来您编写了自己的自定义引导加载程序、 因此在我们得到您的完整项目之前、很难找出根本原因。

    因此、您能否参阅我们针对 TMS570LS1224的示例 CAN 引导加载程序项目?

    e2e.ti.com/.../CAN_5F00_Boot_5F00_Loader.zip

    --

    谢谢。此致、

    Jagadish。

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

    你好、jagadish、

    请找到所附的应用程序代码、我正尝试使用引导加载程序顶部的 INCA 工具来刷写这些代码。

    检查并恢复。

    谢谢。此致、

    S·马德哈瓦

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

    尊敬的 Shriram:

    我无法访问代码。

    您能否将项目压缩并直接附加到 e2e?

    或者甚至您也可以通过私人消息与我共享?

    --

    谢谢。此致、
    Jagadish。

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

    尊敬的 Shriram:

    感谢您提供代码、我将全程演示并尽快尝试提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    我使用了 CAN_Boot_Loader 示例来获得到应用程序函数的跳转。


    UART_putString (UART、"\r Jump to application... ");
    G_ulTransferAddress =(uint32_t) APP_START_ADDRESS;
    ((void (*)(void)) g_ulTransferAddress)();

    这是我使用的函数。 但我无法跳转到应用。 我还需要执行哪些其他任务吗?

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

    Jagadish、您好!

    自我更新我能跳到应用程序代码、但在应用程序中的任何功能都无法正常工作。

    我使用了引导加载程序代码、无论您共享了哪个 CAN 引导加载程序。

    现在、我在引导加载程序代码中也进行了相同的复制、但正在跳转到应用程序代码。

    我在启动文件中缺少要添加到启动文件中的任何东西、我正在使用 LED 闪烁代码中的任何东西。

    在应用程序中,我正在闪烁 LED,它不工作,请检查该部分。

    是否需要更改我共享的链接器文件的启动设置。

    谢谢。此致、

    S·马德哈瓦

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

    您好 Shriram:

    这可能是由应用程序偏移地址造成的。 它必须与页边界对齐。 您当前的应用程序偏移地址是什么?

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

    尊敬的 Rahul:

    在我的引导加载程序代码中、应用程序起始地址为0x20000、而应用程序偏移地址也可能对此我不太了解、或者我没有正确理解它、或者同样的应用程序偏移地址也可能具有不同的惯例。

    请告诉我在哪里可以看到或如何检查。

    谢谢。此致、

    S·马德哈瓦

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

    尊敬的 Shriram:  

    您可以在应用项目的.cmd 文件中找到闪存分区的详细信息。 偏移量应为1024的倍数(十进制)、以便在页边界对齐。

    将应用程序的起始地址设置为0x20000。 同一地址应该是您的应用的偏移地址。

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

    请找到应用.cmd 文件、并且将20000作为矢量的地址。


    /*链接器设置*/

    --retain="*(.intvecs)"
    --retain="*(.var)"

    /*用户代码开始(1)*/
    /*用户代码结束*/

    /*------------------ */
    /*内存映射*/

    内存
    {
    /*在引导加载程序实施后使用以下地址*/
    向量(X):origin=0x00020000 length=0x00000020
    FLASH_API (RX):origin=0x00020020 length=0x000037FF
    FLASH0 (RX):origin=0x00024000 length=0x0011BFFF
    FLASH1 (RX):origin=0x00018000 length=0x00001000 //4KB= 0x1000
    堆栈(RW):origin=0x08000000 length=0x000031FF
    RAM (RW):origin=0x08003200 length=0x00027DFF
    RAM1 (RW):origin=0x0802EFFF length=0x00001000 // 4KB = 0x1000

    /*段配置*/

    部分
    {
    .intvecs :{}>向量
    .text:{}> FLASH0
    .const :{}> FLASH0
    .cinit :{}> FLASH0
    .pinit :{}> FLASH0
    .bss :{}> RAM
    .data :{}> RAM
    .sysmem:{}> RAM
    .costvltile :{}> FLASH1

    FEE_TEXT_SECTION:{}> FLASH0 //内部费用
    FEE_CONST_SECTION:{}> FLASH0 //内部费用
    FEE_DATA_SECTION:{}> RAM //内部费用
    .constvltile:load = FLASH1、run = RAM1

    /*用户代码开始(4)*/
    闪存 API:
    {
    //..\Debug\source\BMS_CCP.obj (.text)/*为了在 CCS 中使用此链接器文件,请取消对此行的注释;但对于 MATLAB TSP,请注释掉该行*/

    //C:\TML_WBMS_TSP\ccs_WBMS_Code\source\BMS_CCP.obj (.text)//根据项目位置进行更改
    //..\TI_WBMSProject\BMS_CCP.obj (.text)//根据项目位置进行更改
    --library= F021_API_CortexR4_Be_V3D16.lib < FlashStateMachine.IssueFsmCommand.obj
    FlashStateMachine.SetActiveBank.obj
    FlashStateMachine.InitializeFlashBanks.obj
    FlashStateMachine.EnableMainSectors.obj
    FlashStateMachine.IssueFsmCommand.obj
    FlashStateMachine.ScaleFclk.obj
    init.obj
    utilities.CalculateEcc.obj
    utilities.WaitDelay.obj
    utilities.CalculateFletcher.obj
    Read.MarginByByByByByByBybe.obj
    Read.Common.obj
    Read.FlushPipele.obj
    Read.WdService.obj
    ASYNC.WithAddress.obj
    program.obj >(.text)
    }load = flash_api、run = RAM、load_start (API_load)、run_start (API_run)、size (API_size)

    谢谢。此致、

    S·M·阿德哈瓦

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

    尊敬的 Shriram:

    我没有采用"TMS570LS1227"控制器的任何电路板、因此我在 TMS570LC4357 HDK 板上进行了一个小型测试。 它对我有效,所以请尝试按照相同的步骤在你身边,看看结果。

    1、我连 NI CAN 适配器都没有通过 CAN 发送应用程序,所以我直接下载了一个 LED 闪烁示例到控制器.

    为此、我使用了 UniFlash 工具、我的应用程序起始地址为0x20020、因此为 UniFlash 提供了相同的加载地址。 在这里、我将擦除选项设置为整个闪存、

    首先、我编写了应用程序编程、然后我执行了下面的步骤、

    2.实际上、在引导加载程序应用中、我们将检查签名(0x5A5A5A5A)是否存在 APP_STATUS_ADDRESS 地址

    如果存在该签名、那么我们只将其视为闪存中存在的应用、

    因为我不是直接通过 CAN 对任何应用程序进行编程、所以我只在代码的下面一行中启用

      

    这将使引导加载程序认为应用程序已 存在。

    我还将应用程序起始地址更改为0x20020

    完成上述两项更改后、我还确保擦除选项为"仅必要扇区"、因为对引导加载程序进行编程不会立即擦除现有的应用程序。

    完成该操作后、我将引导加载程序加载到闪存中、并且我可以看到 LED  

    我还可以在 UART 中看到以下数据、

    因此、请按照上面的步骤并在您的终端上也查看结果。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    首先我有一些疑问,

    1.您的应用程序和引导加载程序的矢量地址是什么?

    2.为什么应用程序的起始地址是0x20020为什么不是0x20000?

    3、我已经做了相同的步骤,无论你做什么,我得到了  

    现在、我将为您提供我执行的任何步骤。

    我使用应用程序代码使用以下链接器文件进行构建。

    之后、我尝试使用以下设置通过 uniflash 刷写应用程序代码。

    现在为其设置擦除  

    完成刷写后、我可以在存储器扇区中看到符号。

    在这之后、我使用 PMBus 命令  

    将标记我已绕过并直接跳转到应用的任何内容。

    应用的起始地址是。

    为了仅供参考、我还在引导加载程序和应用程序中使 LED 闪烁

    因此在引导加载程序中、LED 会闪烁、但一旦跳转到应用程序、就无法正常工作。

    这是你分享的步骤。

    之后、我的内容也改为使用适用于 TMS570LS1224的 INCA 工具进行其他闪存方式。

    如果我使用 INCA 工具刷入了代码、则会刷入代码、但我无法看到 GPIO 引脚和其他外设的低电平寄存器中有任何变化。

    在这里、我只能看到中断正常工作、代码流也能看到通过连接目标配置来使用 CCS。

    下面是一些问题-通过 INCA 工具进行刷写后、控制器是否会进入锁定状态。

    -或者有一件事是我在引导加载程序和应用程序中使用相同的启动文件  

    因此启动文件或控制器将进入特权模式而不允许修改寄存器中是否有任何更改。

     谢谢。此致、

    S·马德哈瓦

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

    尊敬的 Shriram:

    1. 您的应用程序和引导加载程序的矢量地址是什么?

    应用:0x00020020
    引导加载程序:0x00000020

    引导加载程序代码开始于0x00000020、因为中断矢量将来自0x00000000

    2. 为什么应用程序起始地址为0x20020为什么不使用0x20000?

    实际上、在引导加载程序代码中、它们使用一些0x20字节的位置来存储签名(这将有助于查明应用程序是否存在)。 只有在使用引导加载程序将完整的应用程序写入闪存后、才会写入此签名。

    您可以看到上面突出显示的行;在使用引导加载程序代码将完整应用程序写入闪存后、它们正在对签名进行编程。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    您能否共享应用程序和引导加载程序.cmd 文件、以便我也可以在我的代码中进行相同的更改。

    谢谢。此致、

    S·马德哈瓦

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

    Jagadish、您好!

    应用程序从引导加载程序跳转到应用程序,它以前不工作,但在更改 system.c 文件中的时钟函数 MapClock()后,它开始工作并正确刷写。

    谢谢。此致、

    S·马德哈瓦