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.

[参考译文] RM57L843:以太网引导加载程序-在执行应用程序映像 bin 文件时、发生了数据中止异常。

Guru**** 2538930 points
Other Parts Discussed in Thread: LAUNCHXL2-RM57L, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1260817/rm57l843-ethernet-bootloader---while-executing-the-application-image-bin-file-data-abort-exception-was-occuring

器件型号:RM57L843
主题中讨论的其他器件:LAUNCHXL2-RM57LHALCOGEN

您好、TI 团队、

我当前正在处理一个基于以太网引导加载程序的项目。 应用程序代码正在传输但未执行。

在下面、我提到了应用代码中使用的地址、

VECTORS (X):origin=0x00020020 length=0x00000020
FLASH0 (RX):origin=0x00020040 length=0x0015FFC0
FLASH1 (RX):origin=0x00180000 length=0x00180000
堆栈(RW):origin=0x08000000 length=0x00001500
RAM (RW):origin=0x08001500 length=0x0003EB00

我的应用起始地址是0x00020020。代码执行了一段时间后会突然发生数据中止异常。 我的应用程序 bin 大小为112KB、我已经为应用程序映像文件分配了128KB 的空间。 除了该项目之外、所有其他项目的容器大小都更小、例如32KB、12bkb、比使用相同过程完全执行的项目要小。 但我所做的主工程没有执行。
我已经搜索了多个线程来重新分级这个问题、我增加了堆栈内存空间。 我已尝试过它们、但问题未解决、

请指导我犯了什么错误。

提前感谢、

此致、

A. Ajith Kumar

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

    您好、TI 团队、

    从上面的线程我已经归档了、我已经发现 lwip 以太网数据接收外设没有执行。 除此之外、所有其他外设都正常工作、我已检查 SPI、GPIO、RTI 计时器、UART、n2het 计时器该外设在应用程序中使用、工作状态非常好。 但 lwip 程序包括它挂起在数据输入(数据中止异常)。

    在我的项目中、我希望接收以太网数据。 是否有任何示例程序可以在没有 lwip 或任何其他过程的情况下接收以太网数据、或者如何解决该问题。 当我的应用程序代码被执行的 lwip 程序填充时。

    请支持我们、热切期待您的答复。

    谢谢。此致、

    A: A·库马尔

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

    尊敬的 Ajith Kumar:

    我可以获取引导加载程序和应用程序的完整项目进行验证吗?

    如果需要、您只能执行私人消息。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    我已经私下向您发送了应用程序代码(main project)。

    谢谢。此致、

    A. Ajith Kumar

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

    Jagadish、您好!

    有任何更新吗?

    谢谢。此致、

    A. Ajith Kumar

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

    Jagadish、您好!

    我发现在接收以太网数据时、代码在数据输入中挂起。 我已在下面附上该项目、

    e2e.ti.com/.../4265.lwip.zip

    我在下面附上了一段视频、

    e2e.ti.com/.../bandicam-2023_2D00_09_2D00_02-11_2D00_45_2D00_59_2D00_336.mp4

    在该视频中、我在执行代码时创建了程序 LWIP 以太网数据接收、就像在主程序中一样、我收到了通过 Hercules 软件发送的以太网数据。 然后、我将以太网引导加载程序代码转储到电路板、并将 LWIP  以太网数据接收代码作为应用程序代码发送到电路板。 但在执行应用程序代码时、代码在以太网数据接收期间挂起在数据条目中。

    请引导我纠正这个问题。

    请尽快与我分享此更新。

    提前感谢

    此致、

    A: A·库马尔

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

    尊敬的 Ajith Kumar:

    您能用我的调试代码测试一次吗?

    刚才、我进行了测试、但没有看到任何数据中止、这里还有串行 COM 结果:

    如您所见、下载应用后、我刚将波特率更改为9600、而且您还可以看到应用以串行 COM 输出。

    这是我的引导加载程序代码、请对其进行测试并让我知道结果。

    e2e.ti.com/.../0028.Hercules_5F00_Ethernet_5F00_Bootloader.zip

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    您提供的上述引导加载程序代码并非为我调试的。

    我以前有一个以太网引导加载程序示例、通过调试和转储 it.it 无法正常工作。

    请检查应用程序代码在复位后是否正常工作有时在复位后首次正常工作。

    --

    谢谢。此致、

    A: A·库马尔

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

    尊敬的 Ajith Kumar:

    e2e.ti.com/.../8255.Hercules_5F00_Ethernet_5F00_Bootloader.zip

    使用与之前使用的应用程序代码相同、但使用与上述工程相同的引导加载程序。

    您可能会考虑这里的两个问题。

    1.一个是我在 launchpad 上使用并测试过的上述引导加载程序、但如果您使用的是 HDK 板、那么在项目属性中、您应该需要将调试器更改为 XDS100 v2

    2.我测试了静态 IP,但你不能使用我的静态 IP 设置直接在你的电脑?

    要么必须更改与您的 PC 兼容的静态 IP、要么必须使用动态 IP。

    因此、请进行相应更改。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    我已经下载了您提供的项目。 未连接到我的目标我正在使用  LAUNCHXL2-RM57L 和 XDS110板载 USB 调试探针、已成功验证。 但目标未连接。 我已经分享了我完成的视频。

    e2e.ti.com/.../bandicam-2023_2D00_09_2D00_05-14_2D00_21_2D00_59_2D00_950.mp4

    谢谢。此致、

    A: A·库马尔

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

    尊敬的 Ajith Kumar:

    仅需在获取错误后执行以下步骤、

    1.右键单击调试器、然后单击连接目标、如下所示

    2.连接目标后

    现在、只需在"Run"菜单中选择加载选项、

    3.现在点击 Browse 项目

    并选择需要加载的引导加载程序项目。

    4.现在点击"确定"以加载项目

    5.项目加载完毕后,可以看到正常的调试窗口,

    --

    谢谢。此致、
    雅加迪什

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

    Jagadish、您好!

    感谢您的答复。 目标已连接。

    Jagadish 表示"使用与以前相同的应用程序代码、但使用与上述工程相同的引导加载程序"。

    我使用了与上述工程相同的引导加载程序、使用了与之前相同的应用程序代码。 但是程序仍然中止数据输入。


    请在传输应用程序代码后为我检查,按重置按钮,应用程序代码在数据输入中工作或挂起。 这对我来说是个问题。

    之后、我在我的应用程序代码和引导加载程序代码中多次使用 hl_sys_intvecs.c 文件、如下所示。

    .sect ".intvecs"
    .arm

    优点:
    ;导入中断例程的引用

    .ref _c_int00
    .REF 远程中断
    .def resetEntry

    优点:
    ;中断向量

    复位入口
    b _c_int00
    解除引用
    b #0x00020004
    svcEntry
    b #0x00020008
    预取入口
    b #0x0002000C
    数据输入
    b #0x00020010
    反向中断
    LDR PC、[PC,#-0x1b0]
    LDR PC、[PC,#-0x1b0]

    进行此更改后、我的代码在地址"0x20030"处中断、没有可用的调试信息、或者在程序代码之外。

    继续对重新启动和执行编程。

    请引导我,

    谢谢。此致、

    A: A·库马尔

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

    尊敬的 Ajith Kumar:

    实际上、当我在结束时使用同一个应用程序项目进行测试时、我没有看到任何中止问题。

    总之、让我再次测试它。 但我将在星期一不在办公室、因此请预计会有一些延迟、以便进一步了解这一问题的最新情况。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    有任何更新吗?

    --

    谢谢。此致、

    A: A·库马尔

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

    尊敬的 Ajith Kumar:

    我再次测试、但没有看到任何问题。

    下面是我的测试的屏幕记录:
    e2e.ti.com/.../www_5F00_screencapture_5F00_com_5F00_2023_2D00_9_2D00_19_5F00_18_5F00_38.mp4

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    这不是我的问题。 如视频中所示、我的应用程序代码是第一次执行、但在再次按下复位按钮之后、它在数据输入中挂起。

    现在、通过在 HL_sys_startup.c 中将复位源更改为外部源并在 halcogen R5-MPU-PMU 选项卡中禁用缓存和 MPU、该问题得到了解决。

    感谢您的支持、

    此致、

    A. Ajith Kumar

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

    尊敬的 Ajith Kumar:

    我了解了问题的根本原因:

    实际上、在"Debug"中有两个复位可能性。

    CPU 复位和系统复位。

    如果我们执行系统复位、那么 SYS ESR 寄存器值将变为0x808、如下所示:

    因此、复位源将变为 EXT RESET:

    如果复位源为 EXT 复位、那么在执行中不会有任何问题、因为在这种情况下会发生存储器、系统和 VIM 初始化等所有初始化:

    但是、如果我在调试器中执行了"CPU 复位"、则 SYS ESR 寄存器值变为0x00000000

    因此、因此、复位源值变为 NO_RESET:

    因此、当复位源值变为 NO_RESET 时、执行将直接转到 _mpuInit_函数、而不执行内存初始化、系统初始化和 VIM 初始化、如前所述。

    因此、程序最终会产生 "DataEntry"中止。

    解决方案:

    此问题在过去已经确定
    (+) TMS570LC4357:从引导加载程序切换到应用程序时、应用程序会卡在 etharp_gratuly (netif)-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    在这里、他们也在 no_reset 情况中添加了所有初始化函数、如果我们这样做、那么不会有问题。 每当我们执行 CPU_RESET 时、也会发生所有初始化、并且代码将正常运行。

    另一种方法是不要执行 CPU 复位、而只执行系统复位。

    --

    谢谢。此致、
    Jagadish。