总线超时导致的bus hang 相关问题介绍

1、前提背景:

在一些嵌入式机器的系统运行过程中,时常会发生一些bus hang的问题,直接导致的后果是系统卡住或者触发重启,最终整体系统运行异常。

2、什么是bus hang:

简单说,就是系统的某个模块已经停止关闭了工作(关闭了power or clock),但是此时其他模块或者代码还继续对此模块的寄存器进行操作(读or写),由于无法对关闭的模块进行读写,此时在这块进行耗时操作,导致总线超时。

3、分析问题:

针对于此类问题的分析,首先需要对问题进行确认是不是发生了bus hang,不管是拿到系统的trcace,db,log,或者有效的解析信息后,需要确认涉及到上次cpu的 log中是否有异常的地址在被读取,然后再针对于此地址进行详细分析。

eg:针对于如下cpu log:

read = 0 , vaild = 0x0,tid = 0x1 , read id = 0x111, address =0x11111234,data = 0x01, length = 0x0

read = 1 , vaild = 0x0,tid = 0x0 , read id = 0x0, address =0x0,data = 0x0, length = 0x0

read = 2 , vaild = 0x0,tid = 0x0 , read id = 0x0, address =0x0,data = 0x0, length = 0x0

read = 3 , vaild = 0x0,tid = 0x0 , read id = 0x0, address =0x0,data = 0x0, length = 0x0

write = 0 , vaild = 0x0,tid = 0x0 , read id = 0x0, address =0x0,data = 0x0, length = 0x0

write = 1 , vaild = 0x0,tid = 0x2 , wrtie id = 0x222, address =0x22221234,data = 0x2, length = 0x0

write = 2 , vaild = 0x0,tid = 0x0 , wrtie id = 0x0, address =0x0,data = 0x0, length = 0x0

write = 3 , vaild = 0x0,tid = 0x0 , wrtie id = 0x0, address =0x0,data = 0x0, length = 0x0

从上述就可以看到address =0x11111234,address =0x22221234 这两个地址分别在进行读写寄存器的时候发生了bus hang .

4、解决问题:

发生bus hang ,一般两种运行,一个是代码出现问题(栈被踩坏),第二就是硬件不良。

代码问题需要通过对应的寄存器问题去通过机器的固件文件进行分析,有些需要fdt文件,有些需要so等库,然后结合读写的地址进行代码分析。硬件不良需要确认是涉及那个module ,以及分析是否还受其它硬件影响进行分析。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值