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.

[参考译文] LP-AM243:sbl-ospi 演示在添加定制闪存器件后无法正常工作。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1400142/lp-am243-sbl-ospi-demo-not-working-correctly-after-added-a-custom-flash-device

器件型号:LP-AM243
主题中讨论的其他器件:UNIFLASH

工具与软件:

您好、TI

我们正在 am243-lp 器件中使用定制的闪存测试示例 mcu_plus_sdk_am243x_09_02_01_05\examples\drivers\boot\sbl_ospi。 使用 sbl-ospi 映像刷写闪存后、引导日志为"某些测试已失败!!"。
我们曾尝试使用 CCS 调试 sbl_ospi、但代码挂起于 init 函数上、无法进一步运行。  
我们确信在 CCS 调试模式下,我们甚至不能打印出"某些测试失败了!!",我们如何在 CCS 中调试 sbl-ospi ?
我们只需添加打印件来检查错误位置、我们发现读取闪存时出错。 因此、我们打印所有 OSPI 寄存器、我们发现在开发模式下测试另一个演示"ospi_flash_io"时、OSPI 寄存器与 ospi 寄存器值不同。 在开发模式下、运行 load_dmsc.js 后、闪存操作正确。
 在 CCS 中运行 load_dmsc.js 后、在开发引导模式下测试演示"ospi 闪存 IO"时的寄存器值:
Reg_fc44000 : 68747900
Reg_fc44004 : 0
Reg_fc44008 : 2
Reg_fc44020 : 0
Reg_fc40000 : 80083841
Reg_fc40004 : 60222eb
Reg_fc40008 : 22002
Reg_fc4000c : a0a0a0a
Reg_fc40010 : 5
Reg_fc40014 : 101003
Reg_fc40018 : 3f
Reg_fc4001c : 0
Reg_fc40020 : 0
Reg_fc40024 : 0
Reg_fc40028 : 200
Reg_fc4002c : 0
Reg_fc40030 : 1
Reg_fc40034 : 1
Reg_fc40038 : 340ff
Reg_fc4003c : ffffffff
Reg_fc40040 : 0
Reg_fc40044 : 0
Reg_fc40048 : 0
Reg_fc4004c : 0
Reg_fc40050 : 0
Reg_fc40054 : 0
Reg_fc40058 : 0
Reg_fc4005c : 0
Reg_fc40060 : 0
Reg_fc40064 : 0
Reg_fc40068 : 0
Reg_fc4006c : 0
Reg_fc40070 : 0
Reg_fc40074 : ffffffff
Reg_fc40078 : 0
Reg_fc4007c : 0
Reg_fc40080 : 4
Reg_fc40084 : 0
Reg_fc40088 : 0
Reg_fc4008c : 0
Reg_fc40090 : 16800000
Reg_fc40094 : 0
Reg_fc40098 : 0
Reg_fc4009c : 0
Reg_fc400a0 : 80
Reg_fc400a4 : 0
Reg_fc400a8 : 0
Reg_fc400ac : 0
Reg_fc400b0 : 0
Reg_fc400b4 : 0
Reg_fc400b8 : 800000
Reg_fc400bc : 0
Reg_fc400c0 : 0
Reg_fc400c4 : 0
Reg_fc400c8 : 0
Reg_fc400cc : 0
Reg_fc400d0 : 0
Reg_fc400d4 : 0
Reg_fc400d8 : 0
Reg_fc400dc : 0
Reg_fc400e0 : 302fa00
Reg_fc400e4 : 6f90000
Reg_fc400e8 : 0
Reg_fc400ec : 0
Reg_fc400f0 : 0
Reg_fc400f4 : 0
Reg_fc400f8 : 0
Reg_fc400fc : 3000300
 烧录后的寄存器值 演示"ospi_sbl"二进制文件到闪存器件并从 ospi 引导:
Reg_fc44000 : 68747900
Reg_fc44004 : 0
Reg_fc44008 : 2
Reg_fc44020 : 0
Reg_fc40000 : 80083841
Reg_fc40004 : 60222eb
Reg_fc40008 : 22002
Reg_fc4000c : a0a0a0a
Reg_fc40010 : 25
Reg_fc40014 : 101003
Reg_fc40018 : 3f
Reg_fc4001c : 0
Reg_fc40020 : 0
Reg_fc40024 : 0
Reg_fc40028 : 0
Reg_fc4002c : 0
Reg_fc40030 : 1
Reg_fc40034 : 1
Reg_fc40038 : 340ff
Reg_fc4003c : ffffffff
Reg_fc40040 : 0
Reg_fc40044 : 0
Reg_fc40048 : 0
Reg_fc4004c : 0
Reg_fc40050 : 0
Reg_fc40054 : 0
Reg_fc40058 : 0
Reg_fc4005c : 0
Reg_fc40060 : 0
Reg_fc40064 : 0
Reg_fc40068 : 0
Reg_fc4006c : 0
Reg_fc40070 : 0
Reg_fc40074 : ffffffff
Reg_fc40078 : 0
Reg_fc4007c : 0
Reg_fc40080 : f
Reg_fc40084 : 0
Reg_fc40088 : 0
Reg_fc4008c : 0
Reg_fc40090 : 710b8000
Reg_fc40094 : 4
Reg_fc40098 : 0
Reg_fc4009c : 0
Reg_fc400a0 : 42
Reg_fc400a4 : 0
Reg_fc400a8 : 4c
Reg_fc400ac : 0
Reg_fc400b0 : 0
Reg_fc400b4 : 0
Reg_fc400b8 : 800000
Reg_fc400bc : 0
Reg_fc400c0 : 0
Reg_fc400c4 : 0
Reg_fc400c8 : 0
Reg_fc400cc : 0
Reg_fc400d0 : 0
Reg_fc400d4 : 0
Reg_fc400d8 : 0
Reg_fc400dc : 0
Reg_fc400e0 : 302fa00
Reg_fc400e4 : 6f90000
Reg_fc400e8 : 0
Reg_fc400ec : 0
Reg_fc400f0 : 0
Reg_fc400f4 : 0
Reg_fc400f8 : 0
Reg_fc400fc : 3000300
为什么在 为 demo "ospi flash io"运行 load_dmsc.js 后、在开发引导模式下闪存操作可以正常使用、但在只刻录演示"ospi_sbl"、然后从 ospi 引导时闪存操作不可以正常使用? syscfg 中的 ospi 闪存配置在两个演示之间都是相同的。  
有人能为我们的 ospi_sbl 失败提供帮助吗?  期待您的回复。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Cheng:

    当然可以进行调试。

    您会看到 SBL OSPI main.c 文件中有一个名为 loop_forever ()的 API。 基本上、您应在 main.c 文件中添加该文件、因为除了 main.c 文件中的声明外、当前不会将其添加到任何位置。 添加后、重新编译您的 SBL ospi 应用程序。

    现在使用您正在使用的配置文件的 python uart uniflash 命令进行刷写。

    这将确保文件在各自的偏移量处正确刷写、假设您具有为 SBL OSPI 配置的默认偏移、则会在0x0处刷写到您正在使用的闪存器件。

    现在在本注意事项中、您将引导模式设置为 QSPI/OSPI 引导模式、然后简单地继续操作并连接到调试器。 通过 CCS 连接到调试器后、您只需继续操作并连接到内核 R50_0。 现在、您只需加载将为 sbl ospi debug.out 映像的符号。

    加载后、您将看到流程一直卡在循环处、现在从这里开始、您可以将循环从1设置为0并执行跳过以继续调试。

    此致、

    Vaibhav

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

    谢谢 Vaibhav

    void loop_forever()
    {
        volatile uint32_t loop = 1;
        while(loop)
            ;
    }
    
    int main()
    {
        int32_t status;
        loop_forever();
        Bootloader_socLoadSysFw();

    就像这样?

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

    尊敬的 Cheng:

    是的、上面的代码看起来没有问题。

    若要了解 调试 SBL 的步骤、请参阅  faq-am62x-am64x-faq-debuging-sbl-boot-in-rtos-sdk。 

    此致、

    Tushar