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.
工具与软件:
你(们)好
引导加载程序有很多问题。
1.当我从 TI 加载代码来刷写引导加载程序时、可以刷写应用程序 bin 文件并在有指示时运行应用程序软件。 在应用软件中、我发送串行命令来指示应用软件跳转到引导加载程序。 我通过以下代码执行此操作:
eep_tstbtldData stBL_Data=eEP_vRead BL_FlashRequest ();
静态 bool bl_flash=false;
if (stbl_Data.u16Bdld_flag=0x5A5A )
{
;
uint32_t JumpAddress = 0;//(uint32_t) APP_START_ADDRESS;
//JumpAddress = 0;
(( void (*)(void))JumpAddress)();
}
跳转到引导加载程序软件是否正确。 引导加载程序从位置0开始?
引导加载程序软件具有一些 printf 行。 有时、在跳转后、屏幕上不会显示任何内容。 有时会出现引导加载程序菜单。 执行断电和通电后、将显示引导加载程序菜单。
引导加载程序菜单:
========== 主菜单==========
1.将应用程序映像下载到内部闪存
2.从内部闪存上载应用程序映像
3.执行应用程序代码
2.出现跳转并显示引导加载程序菜单时。 当输入命令"1"下载应用程序时、可以使用来自 MCU 的"C"命令、我将使用的 TeraTerm 将启动 Ymodem 传输。
但是、在将前128个字节发送到 MCU 后、MCU 将停止响应。 我们称这是一种挂起的情况。 MCU 为何挂起? 关闭/打开电源时、将出现引导加载程序菜单、并且下载将正常执行。 为什么需要断电/上电才能使引导加载程序正常工作。 是否有可能有一个解决方案使我们能够在引导加载程序与应用程序之间轻松切换到引导加载程序、然后再返回到引导加载程序、而无需外部电源关闭/开启?
期待您的回复。 这件事是紧迫的。 谢谢。
尊敬的 LayEng:
请参阅以下常见问题解答、您可以在此处找到几个引导加载程序示例:
尝试将您的代码和配置与这些引导加载程序示例代码进行比较、并尝试找出问题的根本原因。
我会仔细研究您的代码并对问题进行调试、这样做没有什么帮助。
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish
很高兴听到您的声音、并非常感谢您的持续支持。 我对您的答复有一些问题。
1.我觉得很难找到 CAN 引导加载程序演示。 您是否能够为我提供直接链接。
2.在1月份、您为我提供了有关 UART 引导加载程序的支持、我已经实施了您的解决方案。 它的工作原理是这样。 bootloader 的工作方式是在刷写之后、我可以 使用以下代码选择一个选项以运行加载的映像:
JumpAddress =(uint32_t) APP_START_ADDRESS;//该位置为0x20000
//JumpAddress = 0;
(( void (*)(void))JumpAddress)();
在应用程序中运行时、我想更新应用软件、以便需要返回引导加载程序。 我通过执行以下代码来实现:
if (stbl_Data.u16Bdld_flag=0x5A5A && bl_flash=false)
{
bl_flash=true;
uint32_t JumpAddress = 0;//0是引导加载程序的地址
((( void (*)(void)))JumpAddress)();
//systemREG1->SYSECR =((uint32) 0x2u <<14u);
}
它会返回到引导加载程序位置、因为我有一个引导加载程序菜单并显示出来。 有时它不显示。
在引导加载程序中、我选择使用 Ymodem 传输来下载应用映像。 "C"由 MCU 发送、PC 的前128个字节已发送、但之后 MCU 不响应。 因此、MCU 似乎因没有响应而挂起。 如果我关闭/打开 MCU 的电源、将出现引导加载程序菜单、并且下载过程将顺利进行。
问题:为什么我需要关闭/开启 MCU 电源才能重新发送。 我可以在某个位置使用软复位来实现它吗? 软复位指令是
systemREG1->SYSECR =((uint32) 0x2u <<14u);
期待您的回复。 谢谢你
e2e.ti.com/.../HL_5F00_sys_5F00_link.cmd-bootloader.txt
这是引导加载程序链接 cmd 文件。 hl_sys_startup.c 是从位置0运行的所有应用程序的命令。
下面是应用链接 cmd 文件。
e2e.ti.com/.../HL_5F00_sys_5F00_link.cmd_5F00_blapp.txt
sys startup.c 文件是您以前给我的文件。 如果你要我帮你的话,我会告诉你的。"
当您让我检查其他参考引导加载程序和我的引导加载程序的配置时、您能告诉我应该比较哪个文件吗?
期待您的回复。 提前表示衷心感谢。
你好、Jagadish
您对我的上述信息有任何回复吗? 期待您的回复。 谢谢你
我发送了2个链接 cmd 文件。 一个用于引导加载程序、另一个用于应用程序。 我发现奇怪的是、我没有收到一封电子邮件、因为我的收件箱中附带了2个文件、所以我再次附加了这些文件。 希望它不会破坏您的收件箱。 谢谢你。
引导加载程序 cmd 链接文件
e2e.ti.com/.../0564.HL_5F00_sys_5F00_link.cmd-bootloader.txt
应用链接 cmd 文件。 我添加了.txt 文件、这样就能够轻松地在这里插入文件。
e2e.ti.com/.../0564.HL_5F00_sys_5F00_link.cmd_5F00_blapp.txt
尊敬的 LayEng:
1. 我觉得很难找到 CAN 引导加载程序演示。 您是否可以为我提供直接链接。
以下是适用于 TMS570LC4357的经过测试和正常工作的 CAN 引导加载程序示例项目:
e2e.ti.com/.../TMS570LC4357_5F00_CAN_5F00_Bootloader_5F00_Example.zip
请验证该项目、它也具有良好的书面文档、请仔细查看。
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish
我已经下载了 zip 文件。 我在编译时遇到问题。 我只想使用 TMS570 MCU。 当我尝试从 tms570LC4357_CAN_TMS570LC4357_CAN_EVM Bootloader_Example 文件夹打开项目时、我会看到2个项目。 请参阅以下内容。 我应如何选择以便只能看到一个 MCU 并且可以使用 CCS 进行编译。 期待您的建议。 谢谢。 当我做一个 make_all,我也得到错误,如文件夹未找到...
f
尊敬的 Jagadish
我注意到在您的示例中没有用于测试引导加载程序的应用程序代码。 您是否可以提供示例代码、我可以将其与示例引导加载程序配合使用来测试引导加载程序。
我还创建了 一个引导加载程序和应用程序代码、它与我从您那里获取的引导加载程序的代码基本相同。 对于应用程序代码、我添加了跳回引导加载程序的选项。 不在应用代码中下载/上传。 请仔细查看并发表您的评论。 不出所料、应用程序代码没有运行。 e2e.ti.com/.../BL_5F00_App-DCUGen2V3.zipe2e.ti.com/.../UART_5F00_Bootloader_5F00_DCUGen2.zip
尊敬的 LayEng:
我重新下载并验证了、只能看到一个 CCS 工程:
您能再试一次吗、
使用以下导入 CCS 工程选项一次:
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish
实际上可以使用上述选项之一来选择项目。 总之、我使用您的方法完成了它。 我收到以下错误。 请参阅图像。
此问题是由于编译器不知道 F021_FLASH_API 的位置而导致的。 请提供建议。 谢谢你。
实际上、我已经简要介绍了 CAN 代码。 如果我有兴趣、我可以定义 UART_ENABLE_UPDATE 并与您讨论吗? 这样做是因为使用 UART 更容易进行测试。 期待您的回复。 谢谢你
尊敬的 Jagadish
很抱歉我的答复中缺少一些文本、因为我有时认为速度比我写的速度快。 "如果我对 UART 感兴趣、我只能定义 uart_enable_update 并与您进行讨论吗? 这样做的原因是使用 UART 进行测试会更简单。"
尊敬的 LayEng:
您需要包含 F021的 include 文件夹:
复制到路径上方、
并将其粘贴到以下部分:
现在单击"Apply and Close":
之后、再次重建项目。
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish
我在执行您建议的操作后仍然收到错误。 请参阅以下内容。
请提供建议。 谢谢你
尊敬的 LayEng:
请在以下路径中包含"F021_API_CortexR4_BE_L2FMC"库文件。
您可以在此处找到该文件:
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish
我仍然收到错误。 请参阅以下内容。 基本上、它已经包含在内、但系统不知道 ${F021_FLASH_API}。 如何声明或更改此声明。
请提供建议。 谢谢你
尊敬的 Jagadish
我还在搜索路径中添加目录。 仍然有错误。 我认为我只需在源文件夹中插入 lib。 请提供建议。 谢谢
尊敬的 LayEng:
路径可能已更改、请再次包含。 执行以下步骤以包括:
点击 Add:
点击 Browse:
现在浏览到库路径并选择文件:
现在点击上面的屏幕截图中的"打开"。
点击"Open"后、现在点击"OK"按钮:
现在、应该按照如下方式添加库、然后点击"Apply and Close"。
之后、再次重建项目。
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish
我在我的最后一封信中做了你的所有处方步骤。 仍然有错误。 为了好的衡量,我在这里粘贴所有的东西。
尊敬的 LayEng:
您是否可以尝试删除旧版本(即下面突出显示的版本)?
如果仍然有问题、
如果需要、我们可以设置一个实时调试会话。
尊敬的 Jagadish
我最终可以编译而不会出现错误。 我是否可以使用 UART_ENABLE_UPDATE 来测试软件? 当我 undef can_enable_update 并定义 uart_enable_update 时、我会收到另一组错误:
您可以帮助纠正此误差吗? 谢谢。 希望我可以使用 UART 来继续探究我的问题并获取解决方案。 谢谢。
尊敬的 LayEng:
是使用 CAN 引导加载程序还是 UART 引导加载程序?
如果您需要 CAN 引导加载程序、则无需启用 UART_ENABLE_UPDATE。
如果启用 uart_enable_update、则需要通过 UART 提供二进制文件。 它只不过是 UART 引导加载程序代码。
我在本例中从未测试过 UART 引导加载程序、如果您需要 UART 引导加载程序、我建议您参阅以下常见问题解答。
(+)[常见问题解答] TMS570LC4357:在 TMS570LC4357上执行 UART 引导加载程序的分步过程-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish
感谢您的大力支持。 我只是意识到我们的沟通不是很好。 我实际上是在使用 UART 引导加载程序。 我刚刚意识到、我应该已经提到了这一点、而不是仅仅讨论引导加载程序。 我可以使用您的闪烁应用程序代码。 我的问题是、我无法再次从闪烁应用程序代码跳到引导加载程序(UART)菜单。 在我们的应用程序中、由于功能更新或错误更正、我们需要更新应用程序软件。 我们无法使用调试器探针进行更新、因此必须使用串行端口。 所以我们使用串行端口将一些 EEPROM 数据(如0x5A5A)写入 EEPROM。 当应用软件在此位置读取 EEPROM 并看到0x5A5A 时、它会跳转至引导加载程序菜单、并允许更新新的应用程序 bin。 我的问题是、当我在读取0x5A5A 后从应用程序跳转到引导加载程序时、引导加载程序菜单有时会出现、有时不显示。 当它出现时、我在引导加载程序菜单中选择"1"、它应该允许我下载新容器。 但问题在于、引导加载程序软件将接收前128个字节、然后在这之后停止工作。 只能在断电后再继续运行引导加载程序软件。 我的问题是、我可以在不关闭电源和不打开 MCU 的情况下再次下载 bin 文件。 您可以在您的闪烁软件上尝试该操作吗? 如果需要、请将此功能插入、我将在这边尝试。 谢谢。 对不起所有的困惑。 实际上、我曾尝试通过使用我在上面上传的引导加载程序软件来告诉您我正在执行什么操作。 我的器件使用 sci4而不是 SCI1、因此如果要在 HDK 上测试我的软件、则必须更改它。
希望您现在理解我的问题。 非常抱歉、因为所有的困惑。
在闪烁软件中添加更改时、请添加引导加载程序软件等菜单
Application (应用)菜单
3.跳转至引导加载程序软件
如果输入3、则将此值0x5a5a 写入 EEPROM 位置和任意块、然后跳转到引导加载程序软件。 当引导加载程序软件读取此值时、它将重新显示引导加载程序菜单以进行新选择、而不是跳转到应用程序。
希望你能理解我。 谢谢你
尊敬的 Jagadish
我觉得从应用程序代码跳转到引导加载程序代码的问题是 MCU 未正确复位而导致跳转到未定义的位置。 我希望您可以通过尝试使用您的代码来纠正我的错误。 然后、当您从应用程序代码跳转到引导加载程序并对我的代码进行更改时、我将看到您所做的更改。 谢谢你
尊敬的 Jagadish
我发现我的问题与 引导加载程序的 hl_sys_startup.c 相关。 当应用程序跳转到引导加载程序的位置0时、复位类型为 NO_RESET (=0)。 因此、当 SW 跳转到引导加载程序软件时、没有初始化任何内容。 因此有些函数不起作用。 我将这些内容添加到了引导加载程序系统启动中:
/*用户代码 begin (22)*/
systemInit();
_coreEnableIrqVicOffset_();
/// vimInit ();
esmInit ();
_coreEnableEventBusExport_();
/*用户代码结束*/
软件的刷写可以正常工作、het_init 有效、但 TI_EEPROM();您能告诉我我应该在引导加载程序 HL_sys_startup.c 中添加什么内容来初始化引导加载程序吗?我应该在跳转到引导加载程序之前在应用程序代码中添加什么命令来解析 Fee_Init 初始化吗? 期待您的回复。 我将附加修改后的引导加载程序 HL_sys_startup.c
e2e.ti.com/.../6087.HL_5F00_sys_5F00_startup.c
尊敬的 Jagadish
现在我回到原来的问题。 除了 Fee_Init 从应用程序软件跳转到引导加载程序后 TI_SDK ()挂起之外、刷写也不起作用。 急需您的帮助。 谢谢。
尊敬的 LayEng:
我的问题是当我在读取0x5A5A 之后从应用程序跳转到引导加载程序时、引导加载程序菜单有时会出现、有时不会出现。 当它出现时、我在引导加载程序菜单上选择"1"、它应该允许我下载一个新容器。
如何从应用程序跳转到引导加载程序?
您是否直接调用0x00000000地址?
能否设置一个实时调试会话、以便我通过观看生动的代码来为您提供良好的指导。
我将在上午10点至晚上8点 IST (印度标准时间)提供服务。
请根据您的空闲情况在明天创建会议并共享会议详细信息。
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish
最后你得到我的问题后超过一周. 我以为你们不会在这周工作、因为 TI 是感恩节以外的。 我从周一至周二、即今天的 MC 开始一直在上课。我们可以在明天下午1点30分(英国时间:上午11点)聊天吗? 或者您想在午餐后吃它吗? 请告诉我。 系统启动时出现问题。 当我使用跳转0直接从应用程序代码跳转到引导加载程序时、进入系统启动的源为 NO_RESET (或0)。 我添加了相同的代码,你建议我在应用程序代码系统启动中添加,但它不适用于 Fee_Init 我在初始化路径中添加的 TI_INIT ()。 软件进入一个未定义的条目。 即使我因没有 EEPROM 初始化(虽然必须执行该操作)而绕过它、并直接进入引导加载程序下载、刷写操作也不起作用。 如果我对器件进行断电和通电、问题就会消失。 所以我怀疑它要么是跳转到引导加载程序的错误方式,即我使用跳转0。 我是否应该执行类似的操作、更改软件复位的 PC 跳转位置、然后执行软件复位? 期待您的回复。
嗨、LayEng。
[报价 userid="557411" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1437625/tms570lc4357-jump-to-boot-loader-from-application-software/5537184 #5537184"]由于 TI 缺勤感谢、我想您不能参加本周课程。 我从周一至周二、即今天的 MC 开始一直在上课。我们可以在明天下午1点30分(英国时间:上午11点)聊天吗? [报价]我没有任何休假计划、我会继续工作。
明天上午11点 IST 就好了。
当我使用跳转0直接从应用程序代码跳转到引导加载程序时、进入系统启动的源代码为 no_reset (或0)。
而不是跳转0、即 NO_RESET、为什么不尝试软件复位?
我的意思是 、当应用看到0x5A5A 时、它将执行电路板的软件复位。
在下述线程中、我提到了软件复位过程:
(+)[常见问题解答] RM57L843:RM57L843上的软件复位-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛
——
谢谢、此致、
Jagadish。
"您直接调用0x00000000地址吗?"
有。 请参阅以下代码
eep_tstbtldData stBL_Data=eEP_vRead BL_FlashRequest ();
静态 bool bl_flash=false;
if (stbl_Data.u16Bdld_flag=0x5A5A )
{
;
uint32_t JumpAddress = 0;//(uint32_t) APP_START_ADDRESS;
//JumpAddress = 0;
(( void (*)(void))JumpAddress)();
}
BTW,你如何添加一个消息的报价?
尊敬的 Jagadish
我想我很久以前就尝试过软件重置,但我认为它 去了一个无人之地。 我想它已经到达了位置0x20020、这是应用软件的起始位置。 我明天可以再检查。 你怎么看? 你能在你身边使用闪烁吗? 期待您的回复。
尊敬的 Jagadish
我尝试了你的建议,它是有效的。 我需要更多的时间来使用该解决方案测试 CAN 总线闪烁情况。 之前、我使用此代码进行软件复位。
systemREG1->SYSECR =((uint32) 0x2u <<14u);
现在我跟随你的例子,就是 systemREG1->SYSECR =(( uint32)0x3u <<14u );
下面是我的代码。
if ((((stbl_Data.u16Bdld_flag=0x5A5A)||(stbl_Data.u16Bdld_flag=0x5B5B))&& BL_FLASH=false)
{
bl_flash=true;
//uint32_t JumpAddress = 0;//0;0是引导加载程序起始地址
//(( void (*)(void))JumpAddress)();
systemREG1->SYSECR =((uint32) 0x3u <<14u);
}
我们将把 会议推迟到另一次。 非常感谢。 如果一切正常、我将在下一周结束此案例。 谢谢
尊敬的 LayEng:
我尝试了您的建议、结果成功了。 [报价]很高兴听到这个消息。
我们将推迟 会议至另一次。 非常感谢。 如果一切正常、我将在下一周结束此案例。当然。
——
[/quote]
谢谢、此致、
Jagadish。
尊敬的 Jagadish
我已关闭案例。 实际上、很长一段时间以前、我尝试了软复位解决方案、但它没有起作用。 这就是我使用跳转0的原因。 如果你看看我20天前的帖子、它就在那里。 我已将其重新粘贴到此处。
systemREG1->SYSECR =((uint32) 0x3u <<14u)之间的任何区别;
和 systemREG1->SYSECR =((uint32) 0x2u <<14u);
期待您的回复。 谢谢你
尊敬的 LayEng:
[报价 userid="557411" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1437625/tms570lc4357-jump-to-boot-loader-from-application-software/5550448 #5550448"]systemREG1->SYSECR =((uint32) 0x3u <<14u)之间的任何区别;
和 systemREG1->SYSECR =((uint32) 0x2u <<14u);
[报价]据 TRM 说、两人没有区别。 如果他们是不同的,那么他们肯定会提到,那里。
另外、我验证了所有旧线程、但没有看到对这两个线程的任何解释、所以我认为它们应该有相同的行为。
——
谢谢、此致、
Jagadish。