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.
工具/软件:Code Composer Studio
您好!
我正在使用 TMS570LC43x 微控制器的开发套件编写引导加载程序项目。 开发套件是 LAUNCHXL2-570LC43。
我需要在闪存存储器的特定部分编写代码。 微控制器具有4MB 闪存。
主要有2个问题:
1、如何配置 code composer studio 或 HALCoGen 在闪存的特定区域编写代码? 当前、当我写入代码时、它是从0x00000000的基地址写入的。 我需要在闪存的特定部分写入代码、而不是 从0x00000000开始的默认情况。
然后、我需要编写一个从闪存的默认部分(0x00000000)开始的引导程序代码、如果用户按下按钮、程序将跳转到写入存储器特定部分的代码并执行它。
请告知...
感谢您的帮助、
此致、
法罗
您好、王先生、
没有用于下载文件的链接。 我无法下载文件。 您可以通过电子邮件向我发送这些文件吗? 这是我的电子邮件地址 :farough@ualberta.ca
我正在使用的引导加载程序使用带有 CRC 校验的 UART 通信、无法进行通信。 您是否有使用 UART 进行 CRC 校验的引导加载程序代码来发送/接收文件?
非常感谢您的帮助。
此致、
法罗
我已经找到了链接。 点击后、我无法下载母体。
您好、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 闪烁?
感谢您的耐心和协作。
您好、王先生、
请注意、明天我必须介绍 UART 引导加载程序、但在按键盘上的3并尝试许多选项后、LED 仍然无法闪烁。
请向我发送您测试过的 UART 引导加载程序代码和闪烁 LED 代码(包括.bin 文件)。 我可以将其用作起点。
非常感谢您的助理和及时的回复。
感谢您的帮助和时间。
此致、
法罗
您好!
这些项目在我的板上工作、也由我的同事测试。 我不知道您的测试会发生什么情况。
请向我发送您的代码、以便我了解问题所在。 谢谢。
UART 引导加载程序:
应用项目:
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()函数用于调试目的? 如果是、如何操作?
谢谢、
法罗
您好、王先生、
按照您的说明、我成功地为二进制映像实现了运行时存储器地址分配。 谢谢。
我需要对通过 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?
非常感谢、
法罗