|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 xiaogangaaaaa 于 2022-9-28 15:07 编辑
marvell 1092的ssd芯片,在bootloader代码中添加自己的新功能后,nvme烧录boot.bin后运行boot时卡死(不是烧录问题,是ssd接收完boot.bin后开始运行此boot.bin后卡死),卡死在这个函数
void HalNvme_SetReadyState(void)
{
while(rNvme.ctrlRegisterModuleAccessStat1.b.CREG_ERR_STS); // Check no parity error
while(rNvmeBitmapSram.bitmapSramAccessStat1.b.BSRAM_ERR_STS); // Check no parity error
while(rNvmeCmdSram.cmdSramAccessStat1.b.HM_ERR_STAT | rNvmeCmdSram.cmdSramAccessStat1.b.FM_ERR_STAT); // Check no parity error
if (rNvmeController.controller[cDefaultFunctionId].CC.b.EN) // Set ready bit
{
rNvmeController.controller[cDefaultFunctionId].CSTS.b.RDY = 1;
PRINTF_LOW("[CTST.RDY]\n");
}
}
做了对比测试,有以下测试结果:
- 烧录生成的boot.bin时死机或不死机,跟本次编译的bin有关,不会出现同一个boot.bin,反复烧录时概率性死机
- 做过多次对比测试:比如本次编译生成的boot.bin(简称A.bin)文件,如果烧录完运行A.bin时会卡死,此时如果动几句代码,比如关闭或打开几句调试语句,或在boot的main函数里随便添加一个全局变量并赋值,重新生成的A.bin运行可能正常
- 做过多次对比测试:比如本次编译生成的boot.bin(简称A.bin)文件,如果烧录完运行A.bin时不会卡死,此时如果动几句代码,比如关闭或打开几句调试语句,或在boot的main函数里添加的一个全局变量的赋值挪个位置,重新生成的A.bin可能烧录完运行后可能卡死
- 对比测试还遇到:代码完全一样,编译时间点不一样,生成的bin也完全一样,生成的boot.bin,一份会烧录后运行卡死,一份反复烧录和运行都正常
请问有遇到类似现象的吗?已经排除了自己的代码问题,是不是marvell的romcode做了特殊检测
|
|