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.

AM6442: 多核SBL工程可能存在错误。引导一直失败。

Part Number: AM6442

SDK版本及工程路径:C:\ti\mcu_plus_sdk_am64x_09_00_00_31\examples\drivers\boot\sbl_ospi_multi_partition

板子芯片型号:AM6442B SEFHAALV:如下图

通过多次调试,确定了SBL工程执行过程中,具体错误位置:

1.  本错误信息采用断电复位方式,通过串口打印获取的。 status = Bootloader_parseMultiCoreAppImage(bootHandle, &bootImageInfo);  执行该语句 status返回值为 -1(即0xffffffff),程序摘抄如下图:该

2.为了具体化上述 函数内的错误位置,本错误信息采用的是调试的方式获取 (仅提供借鉴,调试信息 或许与实际有所差别): 

①错误位置如下:注释与旧版本SDK不一致,旧版本为

②进入函数  ,进一步获取错误位置:

③进入函数,获取具体错误

因为③的错误,引发②错误 ①错。

调试过程中,程序每次经过③时,将status值由0xffffffff改成0,后续程序即可正常运行,SBL正常引导,也可以将FLASH的数据解除签名并加载到对应的SRAM中,然后相应内核运行正常。

综上:为何使用 C:\ti\mcu_plus_sdk_am64x_09_00_00_31\examples\drivers\boot\sbl_ospi_multi_partition  工程会出现错误?

ps:  而采用:C:\ti\mcu_plus_sdk_am64x_08_04_00_17\examples\drivers\boot\sbl_ospi_multi_partition 工程不存在上述错误。(但是该旧版SBL工程,无法对FLASH进行写操作,所有我需要使用09_00_00_31版的SBL),但是09_00_00_31版SBL却引导失败 。

  • 您好,您的问题我们需要升级到英文论坛寻求帮助,如有答复将尽快回复您。

  • 好的,谢谢!!

  • 您好,

    非常感谢您指出该问题并定位了问题点。工程师有一个进一步的问题:

    对于 n 个 PORs,该问题是全部 n 次还是部分 x 次出现 n 次。 基本上来说就是我们想知道问题是否为随机出现?

    此外,工程师刚刚测试了 MCU+ SDK v09.00.00.00.35中的 sbl_ospi_multi_partition,是成功的,如下所示:

    Starting OSPI Multi-Partition Bootloader ...
    
    DMSC Firmware Version 9.0.7--v09.00.07 (Kool Koala)
    DMSC Firmware revision 0x9
    DMSC ABI revision 3.1
    
    INFO: Bootloader_runCpu:155: CPU r5f1-0  is initialized to 800000000 Hz !!!
    INFO: Bootloader_runCpu:155: CPU r5f1-1 is initialized to 800000000 Hz !!!
    INFO: Bootloader_runCpu:155: CPU m4f0-0 is initialized to 400000000 Hz !!!
    INFO: Bootloader_runCpu:155: CPU a530-0 is initialized to 800000000 Hz !!!
    INFO: Bootloader_loadSelfCpu:207: CPU r5f0-0 is initialized to 800000000 Hz !!!
    INFO: Bootloader_loadSelfCpu:207: CPU r5f0-1 is initialized to 800000000 Hz !!!
    [IPC NOTIFY ECHO] Message exchange started by main core !!!
    [m4f0-0]     0.492534s : [IPC NOTIFY ECHO] Remote Core waiting for messages from main core ... !!!
    [r5f0-1]     0.002111s : [IPC NOTIFY ECHO] Remote Core waiting for messages from main core ... !!!
    [r5f0-1]     4.322869s : [IPC NOTIFY ECHO] Remote core has echoed all messages !!!
    [r5f1-0]     0.693212s : [IPC NOTIFY ECHO] Remote Core waiting for messages from main core ... !!!
    [r5f1-0]     5.013833s : [IPC NOTIFY ECHO] Remote core has echoed all messages !!!
    [r5f1-1]     0.592190s : [IPC NOTIFY ECHO] Remote Core waiting for messages from main core ... !!!
    [r5f1-1]     4.913120s : [IPC NOTIFY ECHO] Remote core has echoed all messages !!!
    [a530-0]     0.202051s : [IPC NOTIFY ECHO] Remote Core waiting for messages from main core ... !!!
    [m4f0-0]     6.787252s : [IPC NOTIFY ECHO] Remote core has echoed all messages !!!
    [IPC NOTIFY ECHO] All echoed messages received by main core from 5 remote cores !!!
    [IPC NOTIFY ECHO] Messages sent to each core = 1000000
    [IPC NOTIFY ECHO] Number of remote cores = 5
    All tests have passed!!
    [a530-0]     7.988432s : [IPC NOTIFY ECHO] Remote core has echoed all messages !!!

  • 每次加载内核时都必然会出现,只要有执行 Bootloader_parseMultiCoreAppImage(),那么都会出现报错,进而影响后续引导。  

    (上述描述是 基于我先前给定的SDK版本和芯片型号 实验而得出)

    上述基于 “MCU+ SDK v09.00.00.00.35中的 sbl_ospi_multi_partition,是成功的”,这里我有个疑问,测试成功的芯片的型号是否是“AM6442B SEFHAALV”?

  • 当然,为了找出具体原因,我现在正打算使用MCU+ SDK v09.00.00.00.35中的 sbl_ospi_multi_partition进行测试。 等下将测试结果反馈给你。

  • 好的您先测试下。

    请问您发布的以下问题是否和该问题相似?

    https://e2echina.ti.com/support/processors/f/processors-forum/785869/am6442-sbl-bootloader_socsechandover

  • 不相似。     SDK库的SBL工程是本来就没有关于安全切换的操作示例。     安全切换是我在旧版SDK库中发现相关函数并进行使用,已经确定可以正常使用。

    ps:新版SBL(MCU+ SDK v09.00.00.00.31)我通过修改SDK库函数的代码,强制让错误值改为正确值0(以满足SBL引导条件),已经可以正常进行SBL,并令所有内核运行; 当然我知道我这种操作是野蛮的,这只是我的临时用法。   然后基于野蛮修正后的新版SBL,确定可以正常引导后,添加安全切换时,发现无法正常跳转了(或者说跳转了,但是没有内核运行,因为SBL工程并没有继续运行了),安全切换的函数并无报错。  

    如下是我进行安全切换的相关程序:在加载所有内核之后,在启动r500之前  进行安全切换:

  • 目前测试完毕,同样遇到引导失败 (此次我并没有详细追踪到具体错误的位置,但是通过我串口日志,可以确定是在加载R5FSS1_0时出错的,即加载第一个内核时已经出错了)  。我使用代码对比工具 对比了 MCU+ SDK v09.00.00.00.31 和 MCU+ SDK v09.00.00.00.35 中,关于sbl_ospi_multi_partition工程的main,以及库源文件bootloader.c。 发现两个版本关于这两个文件,是完全一致的,所以我大胆猜测这两个版本 关于SBL部分程序并没有差别(大致应该是只修正了makefile_ccs_bootimage_gen文件的错误)。

    同时根据此次测试,我猜想引导失败的原因可能是 SBL库文件代码中,不支持芯片型号为SEFH的验证,导致后续错误(希望可以得到你们的协助,帮我验证这个猜想)。

  • 已转达给工程师。

  • 上述基于 “MCU+ SDK v09.00.00.00.35中的 sbl_ospi_multi_partition,是成功的”,这里我有个疑问,测试成功的芯片的型号是否是“AM6442B SEFHAALV”?

    工程师手头有 AM6442B SFGHAALV,而且在相同的基础上测试了`sbl_ospi_multi_partition`。 但这种差异并不会导致该问题。 

    同时根据此次测试,我猜想引导失败的原因可能是 SBL库文件代码中,不支持芯片型号为SEFH的验证,导致后续错误

    在 MCU+ SDK 中的任何位置都没有此类检查。 实际上该问题是由于函数调用`Bootloader_socAuthImage`。 此函数调用具有以下功能:

    • Request System Firmware for the authentication of signed appimage (*.appimage.hs_fs) stored at the offset `certLoadAddr` in OSPI.
    • If authentication is successful, System Firmware returns SUCCESS otherwise FAILURE.

    由于`Bootloader_socAuthImage`返回FAILURE,意味着已签名应用映像的身份验证失败。 该问题主要会在要进行身份验证的应用程序映像损坏时发生。

    您是否尝试过`sbl_ospi`?是否有同样的问题?请您尝试一下`sbl_ospi`并分享下您的测试结果,如果能分享下log会更有帮助。

  • 本问题,通过配置syscfg,将x509选项的 设备验证禁用,即可解决。  暂时可以满足项目需求。