记录外部EEPROM读写有问题排查过程

声明:记录工作的时候一些调试方法和解决问题过程,写的很杂碎,主要写给自己看的,大家就图一乐就行

由于EEPROM的IIC驱动是用模拟IO写的

1.用示波器抓IIC的波形
2.将SDA和SCLK和GND引脚用线引出,探头连接
3.检查并确保探头衰减是X1而不是X10。
4.软件触发写EEPROM,示波器设置下降沿捕获
5.如果有波形,对波形进行Decode,看解码出来的数据是否与写入EEPROM数据移植(首先看写的地址信息正不正确)
OK,示波器写EEPROM波形排查没问题
6.排查软件问题
7.清除EEPROM里面的DTC故障码后,在软件复位或者重新上电会从DTC码中读出DTC的8个状态位
8.先清除DTC码,下电或者软件复位
9.打断点在上电读EEPROM的地方
10.目前系统有86个故障,对应86个DTCCode,问题出错在后面49号故障,但是这86号故障通过For遍历的,打断点也有技巧,右击Breakpoint Properties断点属性内设置Condition(i == 49)(调试平台为S32DS3.5)
11.到断点后,查看该变量的内存,先找到地址加载在Memory窗口展开,发现49号故障之后并不是自己想要的值。
先说一下出错原因:
该函数是先将EEPROM的数据读出到一个很大的局部数组A[430],然后再从数组数据依次拷贝到DTC结构体,但是这个函数在一个任务里面跑,这个任务只分配了256字节的堆栈,而局部数组太大,导致堆栈溢出。
解决方法:1.将数组设为全局数组
2.或者For遍历从EEPROM读出拷贝到DTC结构体内(该种方法会增加EEPROM读次数)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式历练者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值