这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 编程Flash后,TLE9877bootrom函数不起作用是为什么?如何处理?

共2条 1/1 1 跳转至

编程Flash后,TLE9877bootrom函数不起作用是为什么?如何处理?

工程师
2024-05-14 18:35:46     打赏

我正在开发一个装有 TLE9877 的开发板,我正在运行一些遗留代码。 首先,使用 bootrom 函数擦除闪光灯并空白勾选似乎没问题。 而且我读出寄存器或整个 Flash 内容也没问题。
由于我还没有应用程序,所以我编造了一些数据供刷新。 我用 0xAA 填充 0x11000000-0x1100000F,用 0x11000000-0x1100000F 填充 0x55。 只要通电,它就可以正常工作。 测试顺序包括擦除、写入、验证和读取闪存。
当我试图重复测试序列时,灾难来了。 现在,使用 bootrom 函数的第一个命令不起作用。 它仍然进入调试模式,我可以读出寄存器以及闪存内容,但是启动 CPU 命令总是会因超时而失败。
有人知道如何将设备重置为已删除状态吗?
写入前 32 个闪光灯位置时我是否触发了特殊模式? 我怀疑用户重置了向量。
我检查了几个寄存器中的错误闪存,但直到现在我还找不到奇怪的部分。 NVM 似乎没问题,没有错误。
▪ SCU_SYS_STRTUP_STRTUP_STS:0x50
▪ SCU_NVM_PROT_STS:0xF ▪ SCU_MEM_STS:0x0 ▪ SYS_STRTUP_CFG:0
还有其他寄存器可以检查吗?

也许是保护或安全标志?
我查看了 DHCSR 登记册。 它的值是 0x01090005。 我没想到会出现的部分是 S_LOCKUP。
有没有办法找出调用 bootrom 函数出了什么问题? 有状态寄存器吗?
还有其他方法可以调用这些函数吗? 我是在没有内存代码的情况下手动完成的,见下文:

    Halt();        WriteCoreRegister ( CoreRegister::LR, 0x18000B01 );  // return addr is breakpoint:        WriteToMemory ( 0x18000B00, (uint32)0xbe00be00 );    // write bkpt (0xBE00) to memory        //set arguments        WriteCoreRegister ( CoreRegister::R0, 0x18000400 );  // uint32* cbsl_nvm_size        WriteCoreRegister ( CoreRegister::R1, 0x18000404 );  // uint32* code_nvm_size        WriteCoreRegister ( CoreRegister::R2, 0x18000408 );  // uint32* data_nvm_size        WriteCoreRegister ( CoreRegister::SP, 0x18000AFC );  // set SP, don't know if it's used        WriteCoreRegister ( CoreRegister::PC, 0x000038B5 );  // user_nvm_config        Run();        WaitForHalt ( 100_ms );
谢谢。
smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/MOtiX-MCU/TLE9877-bootrom-functions-not-working-after-programming-flash/td-p/651276




关键词: Flash     TLE9877     bootrom    

助工
2024-05-14 18:39:39     打赏
2楼

1. 引导程序区域被破坏: bootrom 函数通常位于启动程序的固定内存地址,如果该内存区域被写入了其他数据或被破坏,bootrom 函数将无法正常工作。您可以检查一下您的程序是否有可能覆盖了这部分内存。

2. 引导模式配置错误: TLE9877通常具有不同的启动模式(如正常启动、调试模式、ISP模式等)。确认您是否正确配置了启动模式,以便 bootrom 函数能够正常工作。

3. 引导程序版本不匹配: 您提到正在使用遗留代码,可能引导程序的版本与你的硬件或其他库文件不匹配。尝试检查并更新引导程序以确保与您的硬件兼容。

处理这个问题的方法如下:

1. 确认您的代码没有破坏引导程序区域。可以通过调试工具或读取闪存内容来验证引导程序区域的完整性。

2. 检查和确保正确配置引导模式。。

3. 检查并更新引导程序版本。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]