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.

[参考译文] TMS320F28379S:在 SCI 引导加载程序过程之后、控制器不会分支到应用程序

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1498424/tms320f28379s-controller-not-branching-to-application-after-sci-bootloader-process

器件型号:TMS320F28379S

工具/软件:

您好:

我面临一个问题、即控制器在完成 SCI 引导加载程序过程后没有分支到应用程序代码。

下面是我到目前为止所做的工作的总结(完整详细信息在另一篇文章<Link>中分享

  • 闪存引导(0x0B)入口点地址设置为 0x80000

  • 放置应用代码的位置 0x80000 根据需要。

  • 修改了链接器命令文件以将应用程序存储在其中 闪存 A 而不是闪存 B

  • 更新了 codestart (开始) 收件人地址 0x80000

  • 已验证生成的 .map 文件—看起来正确。

  • 已使用 串行闪存编程器

    • 已执行" 1-DFU "刷新应用程序。

    • 然后" 6-运行 "、以及应用程序的入口点(0x80000)。

  • 使用验证了闪存内容 C2000闪存实用程序的"仅验证" —验证通过。

  • 指定的地址 0x80000 当做"6运行"—仍然不工作。

  • 已尝试手动分支到应用程序的 codestart—仍然不工作。

其他信息:

  • 直接从闪存引导时、应用程序会正确引导。

  • 仅当在 SCI 引导加载程序过程之后尝试跳转到应用程序时、才会发生该问题。

您能帮助我了解导致此问题的原因吗?
我是否应该检查或修改任何其他内容以成功分支到应用程序?

提前感谢!

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

    Rajamurugan,

    您可以尝试使用附带的内核和应用程序文件吗? 我能够使用这些命令成功加载并跳转到应用程序。 请下载它们、而不是复制/粘贴、因为有一些特殊字符往往会丢失。

    此致、

    Alex

    e2e.ti.com/.../0513.led_5F00_ex1_5F00_blinky.txte2e.ti.com/.../0513.kernel.txt

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

    您好 Alex、

    我尝试使用提供的内核文件、但无法正常工作。 下面我附上了我的结果  

    这个过程开始了 "正在尝试自动波特率发送函数消息..."

    如需了解此处的信息、我已经提到了我的设置以供您参考。

    具有 TMS320F28379S 微控制器的定制 PCB。

    OTP 存储器使用0x004A 0B5A 进行编程。

    3.BMSP1 - GPIO72和 BMSP0 - GPIO73 BMODE -闪存。

    LED 连接到 GPIO99以进行闪烁测试。

    请建议接下来做什么。

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

    Rajamurugan,

    您能否共享您的 kernel .txt 和/或应用程序文件(如果可以)?

    您是否能够确定发送分支/RUN 指令后执行的位置?

    默认情况下、LED 闪烁示例配置为使用 GPIO31、您是否更新了引脚编号以与您的电路板相匹配?

    此致、

    Alex

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

    您好 Alex、

    下面我附加了我的内核和应用文件

    应用程序代码:-

    e2e.ti.com/.../ups_2D00_gpio.zip

    内核代码:-

    e2e.ti.com/.../3755.cpu01.zip

    内核 txt 文件:-

    e2e.ti.com/.../F2837xS_5F00_sci_5F00_flash_5F00_kernel.txt

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

    Rajamurugan,

    我仍在努力复制此内容、下周初应该会做出回应。  您的内核.txt 与用于 SCI 的 GPIO 之外的内容相同(我使用的是 controlCARD、该 controlCARD 需要28/29)。

    同样、您是否能够确定发送分支/运行指令后执行的位置? 这将帮助我确定 CPU 处于什么状态。

    此致、

    Alex

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

    您好 Alex、

    很抱歉、延迟的回复。

    我在下面附上了我的屏幕截图  

    这些是我的步骤。

    我已在调试模式下运行 F2837xS SCI_flash_kernel 示例代码并启动该过程。

    使用 Serial_flash_programr_appln.exe 仅加载应用程序。

    已选择 DFU、然后选择运行  

    4.复制并粘贴显示的地址、然后暂停代码并截屏。

    如果我错了、请纠正我。

    我希望这对您有所帮助!

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

    Rajamurugan,

    打开反汇编代码后、您能否加载内核的符号来识别它滞留在哪个函数中? 如果您看到的内容没有意义、请尝试接下来为您的应用加载符号。

    另一个(或许更简单)步骤是再次通过 JTAG 加载内核、并暂停以查看卡住的位置。 它是否能够到达分配的入口点(请参阅下面 SCI_GetFunction 中的屏幕截图)? 从这里步进、它是否成功从内核返回?

    您的应用程序是 COFF 格式还是 EABI 格式?

    内核不驻留在地址0x8000、通过查看您的应用映射文件(uPS-gpio.map)、我看到了以下内容、这使我认为分支成功:

    您的应用中是否设置了某种延迟? 您能否确认 LED GPIO 正确无误?

    此致、

    Alex

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

    您好 Alex、

    以下是我尝试过的步骤:

    1. F2837xS_SCI_flash_kernel在调试模式下运行示例代码并开始执行该过程。

    2. Serial_Flash_Programmer_appln.exe仅用于加载应用程序。

    3. 我选择了 DFU 然后单击

    4. 我尝试通过手动复制和粘贴地址来分支到应用程序代码、这是可行的!

    但是、当我尝试通过 SCI 模式上传内核文件和应用程序代码时、它不会从内核分支到应用程序代码。

    因此,我的观察是:
                    当我使用 XDS110调试探针上传内核代码、然后使用Serial_Flash_Programmer_appln.exe执行 DFU 并运行应用程序代码时、它将按预期运行。

    这让我怀疑该Serial_Flash_Programmer.exe工具在通过 SCI 模式用于上传内核和应用程序时可能存在问题。

    应用程序代码为 COFF 格式(生成.out 文件 、然后使用 hex2000转换.hex 文件)、不会出现延迟或错误 GPIO 引脚等问题。

    请告诉我您是否需要任何其他信息。

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

    Rajamurugan,

    在进一步调查后、我已确定您在主 while 循环中发布的说明为延迟计时器。 这表明分支成功、  

      地图到: Delay_US(10000)在您的代码。

    我可以看到、从内核运行时、闪烁之间的持续时间是不同的、而在下电上电后、闪烁之间的持续时间是不同的、我仍然在研究这一点。

    此致、

    Alex

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

    您好 Alex、

    希望问题得到解决。 请提供解决方案、如果您需要任何其他信息、请随时联系。

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

    尊敬的 Rajamurugan:

    我们将详细了解您的应用、特别是时钟配置。

    您能否在封装上提供器件标识? 从数据表中:

    此致、

    马特

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

    尊敬的 Matt:

    器件标识如下所示、

    TMS320

    F28379SPTPT

    YFC - 3AAQX1W

             G4.

    希望这对您有所帮助、如果您需要任何其他详细信息、请告诉我

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

    delay_us()调用 sysctl_delay 函数、该函数根据当前 SYSCLK 频率实现简单的延迟函数。 因此、如果 clk 频率与闪烁频率不同、则可能会不同。

    谢谢

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

    Matt 和 Alex、

    您是否对我的问题有任何更新。

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

    Rajamurugan,

    但是、当我尝试通过 SCI 模式上传内核文件和应用程序代码时、它不会跳转到内核中的应用程序代码。

    为什么您认为它没有分支到应用程序代码? 我一直能正确地看到它分支、但退出内核后以错误的频率闪烁、然后在下电上电后以正确的频率闪烁。 DELAY_US 函数作为应用程序代码的一部分保存在闪存中、但从 RAM 执行。 要确认这一点、您可以尝试在应用中添加 ESTOP0语句、运行内核、然后在分支后加载应用符号。

    此致、

    Alex

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

    您好 Alex、

    将再次检查一次并更新