调试经验
总结下最近处理的一些典型问题
1低压峰实验:
问题a导致黑屏
手顺:触发限流后,电源会给一个低压峰出来,很快恢复正常电压。
触发限流,soc掉电 mcu没有复位。开始计时35s的心跳超时。
mcu没有复位的原因:lvi低电平由一个小ic给出,有概率无法输出lvi低电平(绿色)此时如果soc的3.3v电(黄色)也不正常了,没抗住,就会黑屏开始等心跳复位。
问题b导致黑屏无法启动
在debug版本下(不接can唤醒)
通过低压峰的方式触发lvi导致mcu无法唤醒。
一开始以为是mcu卡死无法启动的原因,后检测 lvi以及mcu3.3v供电都正常。
排查软件逻辑发现,低压lvi后恢复lvi会再触发一次恢复中断,再调一次清除唤醒源的操作。
导致最后休眠时走了 设为can唤醒的唤醒源。属于唤醒源设置错误
2 mcu3.3v供电ic会出现 正弦波
导致供电不稳,导致异常复位。走的是上电启动。
3 刷机复位问题
A在app中,如果编译器版本不对会导致各种未知问题。
例如:刷写flash过程中,需要将部分代码copy到ram中去,
用ram去擦写rom,(为什么要这样做?因为core0 需要进行任务调度切换,rom中的代码还需要继续运行,使用fcl的 user模式的话,代码要copy到ram中去,internel模式可以运行rom擦rom
开始擦写前,需要将flash 进入 PEMODE(program/erase),然后运行ram的代码。
如果此时read rom的话(运行代码段里的问题),就会产生eccerror,然后复位。
非法访问rom原因:
代码在ram中执行,编译器不同的话,通用寄存器未存储上相对地址,导致pc指针中的下一步范围地址未跳转正确,访问了已经处于PEmode的flash,就会复位。
(flash置起PEmode类似于 FLMD的打开(保护寄存器要置A5 101的方式) .具体时序参考手册。
B刷机过程中,由于时序问题,导致未关中断可能会影响到flash权限的交换。(刷写时flash权限需交给另一个核,刷写完交回权限)
hsm收回flash权限后,开始处理app的报文校验会访问flash,但是此时还处于PEmode,导致复位。详见时序图