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

共1条 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    

共1条 1/1 1 跳转至

回复

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