调试经验


总结下最近处理的一些典型问题

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,导致复位。详见时序图