大家好。
我想做一些关于在 SBL 中加载 tifs.bin 的测试。
我正在使用 SDK8.6,下面是我的测试步骤:
1. 将 tifs.bin 分别刻录到 OSPI 闪存地址0x80000U 和0x480000U。
在 0x80000U 处 存储已损坏的 tifs.bin 文件。
在 0x480000U μ,处、会存储一个完整的 tifs.bin 文件。
2.修改 lds 脚本。
OCMRAM_SBL_SYSFW (RWIX):origin=0x41C70000 length=0x28000
OCMRAM_SBL_SYSFW_B (RWIX):origin=0x41C98000 length=0x28000
.firmware:{}palign (8)> OCMRAM_SBL_SYSFW
.firmware_b:{}palign (8)> OCMRAM_SBL_SYSFW_B
3. 请参阅 SBL_ReadSysfwImage,在 OSPI 闪存中两个不同地址处读取 tifs.bin。
#define OSPI_OFFSET_SYSFW (0x80000U)
#define OSPI_OFFSET_SYSFW_BACK (0x480000U)
ReadSysfw Image_Test (void **pbuffer, void **pbuffer_b,uint32_t num_Bytes)
{
.........
...........
SBL_SysFwLoad ((void *)(* pbuffer)、(void *)(ospi_cfg.dataAddr + OSPI_OFFSET_SYSFW)、num_Bytes);
SBL_SysFwLoad ((void *)(* pbuffer_b)、(void *)(ospi_cfg.dataAddr + OSPI_OFFSET_SYSFW_Back)、num_Bytes);
.........................................................................
}
4. 修改 SBL_SciClientInit (uint32_t devGroup)。
void SBL_SciClientInit (uint32_t devGroup)
{
int32_t status = CSL_EFAIL;
void * sysfw_ptr = gSciclient_firmware;
void * sysfw_ptr_b = gSciclient_firmware_b;
四、决定草案.
*……
…… Status = ReadSysfw Image_Test (&sysfw_ptr、&sysfw_ptr_b、SBL_SYSFW_MAX_SIZE); *………… 状态= Sciclient_loadFirmware ((const uint32_t *) sysfw_ptr); if (status!= CSL_PASS) { #if defined (SOC_J721E)|| defined (SOC_J7200)|| defined (SOC_J721S2)|| defined (SOC_J784S4) SBL_log (SBL_LOG_ERR、"TIFS 加载失败..."); #else SBL_log (SBL_LOG_ERR、"SYSFW 加载失败..."); #endif SBL_log (SBL_LOG_ERR、"返回 TIFS 加载...\n"); 状态= Sciclient_loadFirmware (((const uint32_t *) sysfw_ptr_b); if (status!= CSL_PASS) { #if defined (SOC_J721E)|| defined (SOC_J7200)|| defined (SOC_J721S2)|| defined (SOC_J784S4) SBL_log (SBL_LOG_ERR、"返回 TIFS 加载失败\n"); #else SBL_log (SBL_LOG_ERR、"SYSFW 加载失败..."); #endif SblErrLoop (__FILE__、__LINE__); } } …………… 四、. } 5.预期结果: 分别从 OSPI 闪存的两个地址中读出 tifs.bin 到指定的缓冲区。 加载并验证第一个缓冲区的 tifs.bin、该操作失败。 然后加载并验证第二个缓冲区的 tifs.bin。 系统成功启动。 6、实际结果 在加载第一个缓冲区的 tifs.bin 并验证失败后、我尝试加载并验证第二个缓冲区的 tifs.bin、程序卡在 Sciclient_loadFirmware 中。
