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.

[参考译文] TMS570LS3137:引导加载程序

Guru**** 2535750 points
Other Parts Discussed in Thread: UNIFLASH, TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1406903/tms570ls3137-bootloader

器件型号:TMS570LS3137
"主题"中讨论的其他器件:UNIFLASHTMS570LC4357

工具与软件:

您好 Jagadish、
我有一个项目、根据一个外部存储器中的标志:

  • 通过 SPI 将二进制文件上传到闪存、然后清除标志并复位
  • 让跳转到应用程序

uint32_t transferAddress; //  Address that is being written to.

void main(void){
    uint16_t flashFlag;

	sciInit();
    spiInit();
	sciSend(scilinREG, 34, "********************************\n\r");
    sciSend(scilinREG, 34, "*    OBC BootLoader program    *\n\r");
    sciSend(scilinREG, 34, "********************************\n\r");

    uExtMem(FRAM1);
    flashFlag = rExtMem(FLASH_FLAG_B, FRAM1, true);
    sExtMem(FRAM1);

    if(flashFlag == FLASH_REQUIRED){
        sciSend(scilinREG, 23, "\n\rProgram Flash begin\n\r");
        UpdaterSPI(SPI_PORT);
    }

    sciSend(scilinREG, 24, "\n\rJump to application...");
    sciSend(scilinREG,  2, "\n\r");

    transferAddress = (uint32_t)APP_START_ADDRESS; //#define APP_START_ADDRESS       0x001C0020
    ((void (*)(void))transferAddress)();
}


二进制文件存储在正确的闪存位置(APP_START_ADDRESS)、 它与 CCS 创建的文件相同。

使用 UniFlash 进行刷写时、此映像按预期工作。

我在私人消息中向您提供了完整的代码。

此致、Marco Mecha

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

    尊敬的 Marco Mecha:

    Unknown 说:
    ]使用 UniFlash 进行刷写时、该映像可按预期工作。

    但是、您没有解释从 SPI 下载时您面临的问题是什么?

    请提供您问题的详细信息。

    ——
    谢谢、此致、
    Jagadish。

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

    抱歉,我不相信问题是在刷写实例,因为二进制看起来不错。

    我认为问题出在跳变或某些配置中。

    此致、Marco

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

    尊敬的 Marco Mecha:

    我使用 UART 引导加载程序并经过验证、在 TMS570LC4357上创建了一个类似的示例。

    我在项目执行中看不到任何问题。

    这里、我也将应用程序存储在 Bank-1的扇区2中

    这里、我还将应用程序状态存储在存储 体1扇区0的开始位置

    我通过 UART 将我的应用项目发送到引导加载程序、然后验证执行情况和项目成功运行。

    因此、我的建议是附加我的引导加载程序和应用程序、供您参考。

    因此、请确保您还有适用于引导加载程序和应用程序的类似 cmd 文件和类似配置:

    e2e.ti.com/.../2402.UART_5F00_Bootloader_5F00_LC4357_5F00_New.zip

    e2e.ti.com/.../3554.LED_5F00_Blinky_5F00_Project_5F00_at0x20020_5F00_Launchpad_5F00_LC4357.zip

    ——
    谢谢、此致、
    Jagadish。

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

    我尝试了您的 APP_START_ADDRESS 配置
    但是跳转它不起作用,(我不使用 应用状态地址),我已经在私人消息中为您提供了完整的代码。
    当我使用调试器运行代码时、我可以认为跳转是用一个偏移量进行的。

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

    尊敬的 Marco Mecha:

    但是跳转无法正常工作(我不使用 应用程序状态地址)、我在私人消息中为您提供了完整代码。
    使用调试器运行代码时、可以判断跳转是使用偏移量进行的。[/QUOT]

    您是否能够设置一个实时调试会话以更好地了解问题。 由于我已经在您的配置中进行了尝试、因此我可以看到在我的终端跳转到应用正常工作、因此实时调试将有助于了解更多详细信息。

    我将在上午10点至晚上8点 IST(印度标准时间),您可以根据您的可用性设置一个现场调试会话吗?

    ——
    谢谢、此致、
    Jagadish。

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

    星期五6上午10点 ARG -布宜诺斯艾利斯(下午6:30 IST)是否适合您?

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

    尊敬的 Marco:

    这对我来说很好。

    我正在用私人聊天方式发送邮件、请将详细信息发送给它。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Marco:

    我现在了解了问题的根本案例:

    请参阅我在以下主题中的评论:

    (+) TMS570LC4357:具有引导加载程序的 TMS570异常处理程序问题-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    实际上、这里我们也犯了同样的错误。

    您将矢量表保持在闪存的开始位置、我们没有使用矢量调用"_c_int00"函数、而是 使用右侧的地址"0x0240020"进行调用、这不是"_c_int00"函数的起始地址、此处也将调用"muxInit"函数。

    因此、发生了我在上面的线程中提到的同样的事情:

    我的意思是、如果您尝试直接调用"0x20040"地址、而不依赖于异常矢量表、那么"uxInit"将被正确调用、我的意思是这个函数不应该是起点、因为此函数不会调用应用的 main 函数、所以如果我们直接调用此函数、我们的代码将无法正常运行。

    这就是您无法看到 LED 闪烁的原因。

    解决方案:

    所以进行以下修改、尝试将矢量表保留在 0x00020020地址、然后将您的实际 flash0代码存储在 0x00020040、如下所示:

    现在、在应用中、您应该调用矢量表起始地址、如下所示:

    如果我们这样做、将从复位进入向量调用"_c_int00"函数、并从该向量 调用主函数、因此我们的应用程序将顺利执行。

    ——
    谢谢、此致、
    Jagadish。

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

    您好、Jagadish、我执行了这些步骤、但在使用该映像生成二进制映像以使其闪烁时  

    生成的文件非常大。
    因此、当我开始更新时、我会看到"文件太大"

    FLASH_FIRST_SECTOR_SIZE = BLInternalFlashFirstSectorSizeGet ();
    transferAddress = APP_START_ADDRESS;

    if ((ulSize*nrPages)> flash_first_sector_size){
    sciSend (scilinREG、22、"\n\n\rProgram Flash failed");
    sciSend (scilinREG、18、"\n\n\r 文件太大\n\n\r");
    返回;
    }

    我已将完整更新的代码发送给您  

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

    尊敬的 Marco:

    您正在尝试将应用程序矢量保留在闪存的起始位置而不是 0x00020020、因此我修改了并进行了干净的构建、现在二进制文件大小从154KB 降至26KB。

    我再次通过私人聊天与您分享这些项目、您能测试并更新状态吗?

    ——
    谢谢、此致、
    Jagadish。

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

    这 很好、并且二进制文件已正确上传、但我不知道您是否更改了项目中的内容、
    因为现在、我使用 CCS 和 UniFlash 尝试过的闪烁完全无法正常工作。

    此致、Marco

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

    尊敬的 Marco:

    这 很好、二进制文件已正确上传、但我不知道您是否更改了项目中的某些内容、
    因为现在、我使用 CCS 和 UniFlash 尝试过的闪烁完全无法正常工作。[/QUOT]

    当我更改了应用程序的矢量0x0时、现在没有引导加载程序的闪烁工程将无法正常工作。

    不过、 我对应用程序代码进行了更多更改;您能同时测试引导加载程序和应用程序并更新结果吗?

    ——
    谢谢、此致、
    Jagadish。

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

    我不得不更改这一行

    现在它运行正常。

    要获得进一步的进展、我需要更改配置以使其与此 刷写方法兼容。

    此致、谢谢。

    Marco Mecha

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

    尊敬的 Marco Mecha:

    现在运行良好。

    很高兴听到这个消息!

    要获得进一步的进展、我需要更改项目以使其与此 闪存方法兼容。

    因为我们的应用程序起始地址(APP_START_ADDRESS)是 0x00020020、对吧? 此存储器地址位于 BANK0中、而不在 BANK1中、因此在将0值作为 BANK 传递后、它会正常工作。

    我认为不需要进行其他修改。

    ——
    谢谢、此致、
    Jagadish。

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

    我的意思是从 wwitch 对文件的修改二进制 immage 是生成的(在这种情况下 Blinky )

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

    尊敬的 Marco:

    在闪烁文件中、您也不需要进行任何更改、因为代码已经从地址 0x00020020生成、它仅是组0、而不是组1

    因此、无需进一步修改。

    ——
    谢谢、此致、
    Jagadish。

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

    我的舌头是,  
    我还有另一个项目、名为 V1、我想为该项目生成一个二进制映像、因此我可以使用该引导加载程序来刷写它。
    我应该对这个项目做些什么修改,这样我就能够做到这一点。
    我修改了 sys_link.cmd、如下所示:

    VECTORS (X)  : origin=0x00020020 length=0x00000020
    FLASH0  (RX) : origin=0x00020040 length=(0x001FFFE0 - 0x00020020)
    FLASH1  (RX) : origin=0x00200000 length=0x00200000
    STACKS  (RW) : origin=0x08000000 length=0x00001500
    RAM     (RW) : origin=0x08001500 length=0x0003EB00
    

    但´s 还没有开始工作
    但我还应该改变什么呢?

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

    尊敬的 Marco Mecha:

    我认为您不需要进行除链接器 cmd 文件之外的任何其他更改。

    [报价 userid="601223" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1406903/tms570ls3137-bootloader/5424363 #5424363"]我修改了 sys_link.cmd、如下所示:

    我觉得您的链接器 cmd 文件没问题。

    我可以知道这个新项目到底会做什么吗? 你怎么说(基于什么)它不起作用?

    是否可以共享引导加载程序和应用程序的映射文件?

    ——

    谢谢、此致、
    Jagadish。

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

    您好 Jagadish、

    我的计划是有2个计划

    • main 程序:负责做许多事情(其中一个是接收二进制文件以进行上传并将其存储在外部存储器中)
    • 引导加载程序   :读取外部存储器并加载到闪存

    为了进行测试、我使用主程序接收 Blinky 项目、然后使用 CSS 刷写引导加载程序、以加载 Blinky、从外部存储器。 至闪存。
    完成您提供的更正后、即可正常工作。

    但现在、我需要刷写主程序、而不是 Blinky、这不起作用(我只更改了  main 中的 sys_link.cmd)。 主程序中有哪些必要的更改、使其与我的引导加载程序兼容?

    我已将这3个项目的 zip 文件发送给您。

    此致、Marco Mecha。

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

    尊敬的 Marco Mecha:

    您是否尝试使用 V1.0.1应用而不是闪烁?

    如果为真、那么您为什么还要尝试在闪存的起始位置对这个应用进行编程? 如果您这样做、它可能会覆盖引导加载程序、对吧?

    根据闪烁应用对此进行修改。 首先直接测试该工程、如果该工程正在工作、则根据测试的闪烁应用修改中的链接器 cmd 文件。

    ——
    谢谢、此致、
    Jagadish。

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

    是的、我 试图使用 V1.0.1应用、而不是闪烁、

    我使用了注释代码、在您选择的代码下方、

    VECTORS (X)  : origin=0x00020020 length=0x00000020
    FLASH0  (RX) : origin=0x00020040 length=(0x001FFFE0 - 0x00020020)
    FLASH1  (RX) : origin=0x00200000 length=0x00200000
    STACKS  (RW) : origin=0x08000000 length=0x00001500
    RAM     (RW) : origin=0x08001500 length=0x0003EB00

    这与 Blinky 一样,但它不起作用

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

    尊敬的 Marco Mecha:

    这与 Blinky 中的情况相同、但它无法正常工作

    它是否独立运行(我是说没有引导加载程序)?

    ——
    谢谢、此致、
    Jagadish。

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

    如果我使用 这样的链接器 cmd 文件、它根本无法正常工作(使用引导加载程序或 CCS 进行刷写)、

    VECTORS (X)  : origin=0x00020020 length=0x00000020
    FLASH0  (RX) : origin=0x00020040 length=(0x001FFFE0 - 0x00020020)
    FLASH1  (RX) : origin=0x00200000 length=0x00200000
    STACKS  (RW) : origin=0x08000000 length=0x00001500
    RAM     (RW) : origin=0x08001500 length=0x0003EB00

    我有这样的一个示例、如果我用 CCS 进行刷写、但没有使用引导加载程序、它就可以工作

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

    尊敬的 :

    是否可以再设置一个实时调试会话以更好地了解问题?

    ——
    谢谢、此致、
    Jagadish。

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

    星期五4上午10点 ARG -布宜诺斯艾利斯(下午6:30 IST)适合您吗?

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

    尊敬的 Marco:

    我们可以在星期一计划这项活动吗? 这对您来说是可以的吗?

    我可以随时在星期一.

    ——
    谢谢、此致、
    Jagadish。

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

    星期一是好的, 上午10点 ARG -布宜诺斯艾利斯(6:30pm IST)对你好吗?

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

    对我来说很好、请分享会议邀请。

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

    我已通过私人消息向您发送链接

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

    抱歉、我目前无法连接到 Office VPN。

    一旦能够连接到它、我就会让您知道这一点。

    我用我的手机发送了这封邮件。 看起来笔记本电脑有一些问题。

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

    您是否可以在这一小时内到达星期三?

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

    尊敬的 Marco Mecha:

    当然、我会有空、请至少在一小时之前发送会议链接。

    ——
    谢谢、此致、
    Jagadish。

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

    您好 Jagadish、您有时间评论这个问题吗?

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

    尊敬的 Marco:

    我尝试了一段时间、但无法解决问题、

    我将在今天或明天再次尝试调试这一问题。

    ——
    谢谢、此致、
    Jagadish。

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

    您好 Jagadish、您有时间评论这个问题吗?

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

    尊敬的 Marco:

    我没有时间再处理这个问题。

    正如我所说的、在我们的实时调试会话之后、我工作了一段时间、但找不到问题的任何根本原因。

    我会在明天再次尝试这方面的工作,平均时间你是否有任何可能有用的发现?

    ——
    谢谢、此致、
    Jagadish。

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

    我没有找到有用的东西。
    如果你有一些测试,我可以尝试在我的最后 如果你有任何文件,我可以阅读,它也可以有用。
    此致、Marco

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

    尊敬的 Marco:

    我对您的代码进行了一些修改、此处是修改后的代码:

    e2e.ti.com/.../1513.workspace_5F00_new.zip

    为了我的测试,  

    我对 dataTransfer API 添加了注释、并闪烁一些 LED 以用于测试目的。

    您可以注释此 LED 闪烁代码、并可以 根据您的代码启用 dataTransfer API。

    关于主要修改,我在代码中做了两项修改:

    在我的验证中、我发现代码卡在两个位置:

    1.在引导加载程序中:

    2.在应用中:

    因此、我对相应区域进行了一些修改、现在我的应用程序 V1.0.1能够成功执行。

    从您的终端进行测试并更新结果。

    ——
    谢谢、此致、
    Jagadish。