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.

[参考译文] CCS:TMS570LC43x

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/951673/ccs-tms570lc43x

主题中讨论的其他器件:LAUNCHXL2-570LC43HALCOGENTMS570LC4357

工具/软件:Code Composer Studio

您好!

我正在使用 TMS570LC43x 微控制器的开发套件编写引导加载程序项目。  开发套件是 LAUNCHXL2-570LC43。

我需要在闪存存储器的特定部分编写代码。 微控制器具有4MB 闪存。

主要有2个问题:

1、如何配置 code composer studio 或 HALCoGen 在闪存的特定区域编写代码? 当前、当我写入代码时、它是从0x00000000的基地址写入的。 我需要在闪存的特定部分写入代码、而不是 从0x00000000开始的默认情况。

然后、我需要编写一个从闪存的默认部分(0x00000000)开始的引导程序代码、如果用户按下按钮、程序将跳转到写入存储器特定部分的代码并执行它。

请告知...

感谢您的帮助、

此致、

法罗

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

    您好 Farough、

    请为 TMS570LC4357器件使用 CAN 引导加载程序的示例项目:

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

    您好、王先生、

    没有用于下载文件的链接。 我无法下载文件。 您可以通过电子邮件向我发送这些文件吗? 这是我的电子邮件地址 :farough@ualberta.ca

    我正在使用的引导加载程序使用带有 CRC 校验的 UART 通信、无法进行通信。 您是否有使用 UART 进行 CRC 校验的引导加载程序代码来发送/接收文件?  

    非常感谢您的帮助。  

    此致、

    法罗

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

    该链接嵌入在引导加载程序部分的第一行中:

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

    我已经找到了链接。 点击后、我无法下载母体。

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

    我将会弄清楚为什么该链接不适合您。  

    您可以尝试使用适用于 LC43x 的 UART 引导加载程序示例:

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

    您好、Wang、

    非常感谢您迄今提供的帮助和指导。

    我将 UART 引导加载程序编程到 TMS570LC4357板。 它显示图像下载/上传菜单、显示版本号、...  

    当我按键盘上的数字1将图像下载到微控制器时,它只打印字母 C  (CCCCCCCCCCCCCCCC...) 在 CCS 上的 UART 串行终端上。

    我对如何将二进制映像上传到 微控制器感到困惑。 为什么它只打印字母 C、而没有显示任何其他内容?  

    我想制作一个简单的应用代码、如使 LED 闪烁、并将其作为 二进制映像上传至微控制器。 我该怎么做?  

    此致、

    法罗

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

    您好、随函附上用于使 TI Launchpad 上的 LED 闪烁的项目0。 我不知道为什么链接不适合您。  

    对于引导加载程序,您需要告诉引导加载程序要上载的文件(位置、名称):terminal -> transfer->Ymodem -> send

    e2e.ti.com/.../3683.TMS570LC43x_5F00_LaunchPad_5F00_Project0.zip

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

    您好、Wang、

    感谢您向我发送闪烁的 LED 代码。

    我已经制作了一个闪烁的 LED 代码,并 遵循了 TI 支持论坛上先前的讨论,可以制作闪烁 LED 示例的二进制(.bin )映像。

    然后、我还使用了 TeraTerm 超级终端、并按照 TI 支持论坛中 UART 引导加载程序的应用手册中的说明进行操作、并将二进制映像发送到引导加载程序中。

    在我将二进制映像发送到引导加载程序(TMS570LC43x 开发套件)并按下键盘上的数字3后、LED 不闪烁。

    在 UART 引导加载 程序的应用手册中、II 被写入:成功写入.bin 映像后、标志0x5A5A5A5A 写入存储器地址0x00007FF0、但当我检查存储器时、该标志写入地址0x00200000。  这是错误吗? 为什么在我写入二进制映像后 LED 不闪烁?

    请检查您的 TMS570LC43x UART 引导加载程序代码、并 测试 UART 引导加载程序上的简单闪烁 LED 示例、让我知道 问题是什么以及应该是什么。

    请注意、我正在开发一个重要的卫星引导加载程序项目、需要在闪存中写入一个复杂的二进制映像。 您的帮助至关重要、因为目前引导加载程序无法使 LED 闪烁、并且我无法了解代码的所有详细信息。 引导加载程序代码或闪烁 LED 示例的设置中存在问题。

    非常感谢您及时的回复。

    此致、

    法罗

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

    您好 Farough、

    状态字应编程为 ox200000 (在 BL_CONFIG.h 中定义)。 该应用程序从0x200020开始进行编程。

    对于应用程序代码、您需要修改链接器 cmd 文件:


    存储器

    /*用户代码开始(2)*/
    /*用户代码结束*/
    引导程序(X):origin=0x00200000 length=0x00000020
    FLASH_CODE (RX):origin=0x00200020 length=0x20000-0x20 fill=0xFFFFFFFF /*扇区4/5*用于应用*/
    FLASH1 (RX):origin=0x00220000 length=0x00200000
    堆栈(RW):origin=0x08000000 length=0x00001500
    RAM (RW):origin=0x08001500 length=0x0007EB00

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

    附件是一个示例:

    e2e.ti.com/.../4520.TMS570LC43x_5F00_LaunchPad_5F00_Project0.zip

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

    尊敬的王先生:

    我使用了您发送给我的示例代码、并在您的消息后修改了链接的 cmd 文件。 按下键盘上的数字3后、LED 仍然不闪烁。

    请测试 UART 引导加载程序上的闪烁 LED 示例、让我来解决该问题。

    此致、

    法罗

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

    您好 Farough、

    该 LaunchPad 针对用户 LED 使用 GIOB[7]引脚、该引脚不同于 HDK 上使用的引脚。

    请更改 RTI 通知中的说明:

      gioSetBit (gioPORTB、7、gioGetBit (gioPORTB、7)^ 1);

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

    如果我理解正确、RTI 通知会在我将二进制映像写入开发套件之前使 LED 闪烁。 对吗? 这就是我在将 UART 引导加载程序写入 TMS570LC43x 开发套件时的经验。 这不是我的问题。  

    我的问题是、在按下键盘上的数字1并使用超级终端发送用于使 LED 闪烁的二进制映像后、然后在按下键盘上的数字3跳转到用户应用程序后、 则 LED 不会闪烁。 这就是问题所在。

    GIOB[7]连接到 TMS570LC43x 开发套件上的 LED。    为什么当我按键盘上的数字3时、二进制映像不会使 LED 闪烁?

    感谢您的耐心和协作。

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

    您好!

    请参阅可从0x200020执行的二进制文件。 我昨天进行了测试并发布了。

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

    您好、王先生、

    请注意、明天我必须介绍 UART 引导加载程序、但在按键盘上的3并尝试许多选项后、LED 仍然无法闪烁。  

    请向我发送您测试过的 UART 引导加载程序代码和闪烁 LED 代码(包括.bin 文件)。 我可以将其用作起点。

    非常感谢您的助理和及时的回复。

    感谢您的帮助和时间。

    此致、

    法罗

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

    您好!

    这些项目在我的板上工作、也由我的同事测试。 我不知道您的测试会发生什么情况。  

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

    请向我发送您的代码、以便我了解问题所在。 谢谢。

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

    UART 引导加载程序:

    e2e.ti.com/.../6014.TMS570LC4357_5F00_UART_5F00_Boot.zip

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

    应用项目:

    e2e.ti.com/.../0878.TMS570LC43x_5F00_rtiBlinky_5F00_BL_5F00_APP200020.zip

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

    我的板上有 XDS 110 Debug Probe。  

    这是开发套件: Hercules TMS570LC43x

    LaunchXL2-570LC43

    我在尝试对您的代码进行编程时遇到此错误:

    连接到目标时出错:
    (错误-716 @ 0x0)
    无法找到所需的动态库 jscserdes。
    库不在搜索路径上。
    (仿真包9.2.0.00002)

    您是否具有相同的调试探针? 您能否修改我的开发套件的代码并将其发送给我?

    谢谢。

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

    这些文件在 LaunchXL2-570LC43上经过测试。 OUT 文件独立于调试器。

    正如我说过的那样、这些是可行的示例。 您可以修改用例的代码。 您可以使用任何受支持的仿真器将输出文件加载到闪存中。

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

    您发送给我的工作代码。 非常感谢。 这太棒了! 只有您发送给我的最后一个代码有效、并且我之前从 TI 论坛下载的 UART 引导加载程序代码无效。  

    但有一个问题。 我只能在 CCS 软件中将.out 文件加载到微控制器中、当我尝试调试按钮时、它会显示错误。  

    此问题的根本原因是什么?

    谢谢

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

    [引用 user="Farough Motamed ">连接到目标时出错:
    (错误-716 @ 0x0)
    无法找到所需的动态库 jscserdes。 是否找不到所需的动态库 jscserdes 帮助?

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

    很棒! 我可以按照您的说明解决该问题。

    还有另一个问题。 当我编写引导加载程序代码时、有一条 RTI 通知(在向引导加载程序发送任何二进制映像之前)、我认为 LED 应该闪烁、但 LED 不会闪烁。 我有来自论坛的另一个 UART 引导加载程序代码、该代码在写入二进制映像之前使 LED 闪烁、但当我写入二进制映像时、二进制映像无法正常工作。 您最近发送给我的一个、二进制映像正常工作、但 RTI 通知不起作用。

    问题是什么?

    谢谢

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

    项目属性中的连接设置可能未正确设置:

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

    我已检查连接设置是否正确。谢谢。

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

    您好、Wang、

    我需要向 UART 引导加载 程序添加一个代码、以便我可以将第二个映像写入闪存存储器、并指示代码跳转到该段并执行代码、以及写入0x00200000的上一个映像。  

    目前、UART 引导加载程序可以通过 UART 接收二进制映像、并将映像写入位置0x00200000。  

    我需要向引导加载程序添加一个代码、以便除了在0x00200000中写入的代码外、我还能够写入另一个二进制映像、例如写入地址0x00300000、 并指示代码通过按键盘上的数字7 (例如)跳转到0x00300000。 以便我可以接收2个二进制映像、在特定位置写入每个映像、并决定执行哪个映像。

    请向我提供一些说明或说明、说明如何执行此操作以及我必须在您的代码中更改哪些文件。

    非常感谢您的帮助。

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

    在 UART 引导加载程序的当前示例代码中、应用程序地址是固定的、在 BL_CONFIG.h 中定义 如果要在运行时更改应用程序起始地址、则需要通过 UART 将此地址发送到引导加载程序。

    主菜单中有5个在 BL_UART.C 中定义的项目 #1是将应用程序映像下载到内部闪存。 您可以再添加一个项目来接收应用程序起始地址:0。 接收应用程序起始地址

    unsigned char receive_command[8]; //格式可能#0x12345678$

    if (key = 0x30){

      sciReceive (UART、12、&receive_command[0])

    在 UART 接收通知中、必须将 receive_command[]转换为 unint_32、然后分配给 app_start_address

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

    感谢您的回复。

    UART 接收通知在哪里? 为什么在 receev_command[8]变量中使用了8个字符、而在中使用了12个字符  

      sciReceive (UART、12、&receive_command[0])  命令?  

    谢谢

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

    抱歉、出现拼写错误。 它应该是 receive_command[12]。

    您需要编写自己的通知。

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

    您好、Wang、

    感谢您至今继续提供支持。

    根据您的意见、我编写了一个代码来接收通过 UART 写入二进制映像的新地址(下面提供了一种更好的方法)。 在 bl_uart.c 文件中、我将 一个无符号字符数组的 receive_command 变量转换 为 address_num 变量 uint32_t、然后将其分配给 JumpAddress 变量。 转换工作正常、因为当我按下3时、LED 闪烁。 不过、主要目的是将映像写入闪存中的新地址、然后跳转到新地址。

    在您提出意见后、我认为我需要为 APP_START_ADDRESS 变量分配新地址。 当我在 BL_UART.c 文件中执行此分配时、我收到此错误消息、表明 APP_START_ADDRESS 不可修改。  

    "../BL_UART.c"、第174行:错误#138:表达式必须是可修改的 lvalue

    如何解决此问题? 感谢你的帮助。  

    //键入转换代码

    如果(KEY = 0x30)


    UART_putString (UART、"输入应用程序起始地址、仅0至9个数字\n\r\n");
    sciReceive (UART、8、&receive_command[0]);
    UART_putString (UART、"输入的地址为:\n\r\n\r\n\r\n");
    UART_putString (UART、Receive_command);

    uint32_t address_num =(uint32_t) receive_command[0]<< 28 |
    (uint32_t) receive_command[1]<< 24 |
    (uint32_t) receive_command[2]<< 20 |
    (uint32_t) receive_command[3]<< 16 |
    (uint32_t) receive_command[4]<< 12 |
    (uint32_t) receive_command[5]<< 8 |
    (uint32_t) receive_command[6]<< 4 |
    (uint32_t) receive_command[7];
    app_start_address=address_num;


    UART_putString (UART、"\n\n\r 接收地址。 \n\n");

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

    您好!

    我使用的是 CCS 10和 TMS570LC43x MCU。  

    是否可以将 printf()函数用于调试目的? 如果是、如何操作?

    谢谢、

    法罗

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

    可以、您可以使用它将字符串输出到 CCS 控制台。

    #include <stdio.h>
    intmain(void) {
        printf("Hello\n");
        printf(" World!\n");
        return 0;
    }

    printf 是线缓冲的,因此输出在\n 或显式 fflush (stdout)后才会显示。

    请在此处查找更多信息:

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

    您好、王先生、

    按照您的说明、我成功地为二进制映像实现了运行时存储器地址分配。 谢谢。  

    我需要对通过 UART 发送到引导加载程序的二进制映像进行完整性检查。 校验和或类似的东西。

    此外、我还需要保留一些变量的值、以便即使在 MCU 复位后它们也保持不变。 您能给我一些关于这些主题的说明吗?

    非常感谢、

    法罗

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

    您好 Farough、

    UART 引导加载程序示例使用 Ymodem 协议来传输数据。 YMODEM 使用16位 CRC 方法进行错误校正。  本示例中使用的 CRC 多项式为 X^16 + X^12 + X^5 + 1 (CCITT)。

    CPU 复位不会清除 MCU SRAM 中的内容。 但系统复位和 PORRST 会清理 MCU 存储器。

    您可以将变量或常量存储到 EEPROM 中。

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

    您好!

    我需要在引导加载程序接收到的二进制映像上运行 CRC16或 CRC32、以确保映像在运行映像之前正常运行、这是因为代码用于卫星、空间辐射可能会损坏映像。

    我需要一些有关如何执行此操作的说明。 如何在映像上运行 CRC16或 CRC32? 如何访问存储在存储器中的图像字节? 请提供 一些编程说明。  

    我知道 Ymodem 协议使用 CRC-16。  哪个文件和哪个变量是存储的 CRC16的结果?  

    如果我在映像上运行自己的 CRC16、我将获得16位 CRC 值。 我需要将其与 Ymodem 获得的 CRC 进行比较、以验证我获得的 CRC 值是否相同。 Ymodem 的 CRC 存储在何处?

    非常感谢你的帮助。  

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

    您好!

    YMODEM 中的 CRC (对于128字节或1024字节数据)不会保存到闪存中。 当接收器接收到一个数据包时、它计算 CRC 并将计算出的 CRC 与从发送器接收到的 CRC 字节进行比较。 如果 CRC 不匹配、接收器将向发送器发送 NAK。

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

    您好、王先生、

    我需要保留您之前发送给我的 UART 引导加载程序工程中的一些变量和常量值。 复位 MCU 后、这些值应保持不变。

    我使用了 HalCoGen 软件 " example_TI_fee_Write_Read.c "中的示例来使用 EEPROM。  我不知道如何使用此示例写入和读取常量和变量。

     BlockNumber 在此代码中代表什么? 写入和读取函数中的参数意味着什么?   

    TI_fee_WriteAsync (BlockNumber、&SpecialRamBlock[0]);  

    TI_fee_WriteSync (BlockNumber、&SpecialRamBlock[0]);  

    TI_fee_read (BlockNumber、BlockOffset、READ_PTR、Length);

    请提供一些有关如何写入/读取 EEPROM 的说明。 我是否有任何来源可以研究如何使用此示例代码? EEPROM 是否是复位后保留变量的正确存储器?

    我应该如何更改您发送给我的引导加载程序工程、以便能够在 EEPROM 中保存值? 请提供建议、因为我需要完成此任务。  

    是否有针对 TMS570LC43xx MCU 的库或示例可在闪存存储器中存储的程序上运行 CRC?   

    非常感谢、

    法罗

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

    您好 Farough、

    1.您可以使用 HALCOGen 生成 FEE 驱动程序:"Driver Enable"窗口中的"enable FEE Driver"

    请阅读 HALCoGen 文件夹中的 FEE 用户指南: