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.

[参考译文] TMS570LS1227:擦除引导加载程序后 MPU 复位

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1257407/tms570ls1227-mpu-resets-after-erasing-bootloader

器件型号:TMS570LS1227

您好!

我正在尝试从主应用程序更新引导加载程序代码。 在擦除引导加载程序闪存扇区之前、我禁用所有中断、并在擦除引导加载程序闪存扇区后再次启用它们。 不过、当 MPU 尝试通过 I2C 发送命令时、它会复位。 调试器首先显示"正在运行"、然后显示"正在运行-发生了一个复位"、然后再次"正在运行"、当我暂停代码时、显示"在地址0x4中断、没有可用的调试信息、或者在程序代码之外。"

I2C 和一些其他外设使用 DMA。


另一个问题是、当我擦除整个闪存而仅加载主应用程序时、它会在发送第一条 I2C 命令时立即崩溃。
出于某种原因、主应用需要第一个扇区中的数据。
导致此问题的原因是什么?


下面您可找到链接器文件内容:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MEMORY
{
VECTORS (X) : origin=0x00060000 length=0x00000020 vfill = 0xffffffff
FLASH0 (RX) : origin=0x00060020 length=0x000DFFE0 vfill = 0xffffffff
STACKS (RW) : origin=0x08000000 length=0x00001500
RAM (RW) : origin=0x08001500 length=0x0002EB00
}
SECTIONS
{
.intvecs : {} > VECTORS
flashAPI:
{
.\source\Fapi_UserDefinedFunctions.obj (.text)
.\App\source\bl_flash.obj (.text)
--library= "c:\ti\Hercules\F021 Flash API\02.01.01\F021_API_CortexR4_BE.lib" (.text, .data)
} palign=8 load = FLASH0, run = RAM, LOAD_START(apiLoadStart), RUN_START(apiRunStart), SIZE(apiLoadSize)
.TI.ramfunc : {} load = FLASH0, run = RAM, LOAD_START(ramLoadStart), RUN_START(ramRunStart), SIZE(ramLoadSize)
.text : {} > FLASH0
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

此致、
希汉

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

    尊敬的 Cihan:

    我不清楚你的问题。 我不明白这里的 i2c 角色是什么、为什么我们要通过 i2c 发送命令? 它们是什么类型的命令?

    请提供有关该问题的更多详细信息。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    在我们的系统中、有多个 I2C 器件、例如 EEPROM、温度传感器、LED 控制器、主应用程序会定期发送数据。
    据我了解、问题是当擦除第一页时、I2C 外设发生故障、MCU 复位。 出于某种原因、MCU 希望访问引导加载程序所在的第一个页面。

    此致、
    希汉

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

    尊敬的 Cihan:

    您是否可以发送完整项目?

    您甚至可以在私聊中发送项目。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    很遗憾、我无法发送完整的项目、但我可以为您准备一个最小的项目。

    我注意到的另一点是、我可以在不擦除主应用程序中的引导加载程序的情况下重现相同的问题。 我所做的是、我仅使用了上面发布的相同链接器文件、并在 CCS 中、我在"Debug->Flash Settings->Erase Options 中设置"Entire Flash"。 然后、我通过点击 Debug 按钮在 CCS 中运行代码、在代码发送第一条 I2C 命令后、代码崩溃。

    此致、
    希汉

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

    你好,Cihan

    不幸的是我无法发送完整的项目,但我可以为您准备最低限度的项目。

    好极了。

    我所做的是,我刚刚使用了上面发布的相同链接器文件,并在 CCS 中,我在"Debug"->"Flash Settings"->"Erase Options"中设置"Entire Flash"。 然后我通过点击"Debug"按钮在 CCS 中运行代码、在代码发送第一条 I2C 命令后、代码已崩溃。

    我懂了。 请尝试发送最小项目、以便我可以在最后重现问题。

    --

    谢谢。此致、
    Jagadish。