IIC挂死问题解决过程

猜测1:认为IIC device程序有问题

检查1:查看程序发现有可能溢出的部分,使用IIC 工具刷过量数据到slave,未出问题。

猜测2:认为IIC device寄存器进入异常状态未能恢复

检查2:检查正常IIC寄存器和异常状态IIC寄存器,未能发现问题。

猜测3:时钟分频问题

检查3:询问同事,答固定分频。

猜测4:看波形分析

检查4:波形未量到,测量波形导致通信异常,部分设备破坏,放弃该方法。

猜测1:串口中断导致IIC初始化时被打断产生问题。

检查1:删除调试串口设备树节点,发现IIC启动100%出现问题 T-T。

猜测2: 100%复现的问题和之前的概率出现的问题相同

检查2:检查寄存器,检查设备detect 表现,认为是相同问题。

删除串口设备树节点,IIC device 必出问题。

猜测1:怀疑调试串口外部硬件电平高低导致IIC外设受影响

检查1:检查原理图,未发现影响的可能性。

猜测2:怀疑串口初始化部分处理了部分IIC设备依赖的初始化(导致不初始化串口IIC不能正常工作)。

检查2:查看串口初始化代码未能发现有值得注意的初始化。

猜测3:怀疑串口初始化影响公共寄存器间接影响IIC。

检查3:发现公共寄存器IIC div分频部分和正常工作的分频不一样,改回后问题解决。

删除串口设备后公共寄存器值不正常,串口收到数据后公共寄存器值不正常。

猜测1:调试串口或IIC代码异常导致寄存器值被修改。

检查1:增加打印,发现问题原因在于IIC初始化过程中分频寄存器设置失败。但是同样方法在IIC device端初始化时设置该寄存器是成功的。

猜测1: 特定配置下IIC 分频寄存器为只读

检查1:芯片设计方核实不存在这样的设计。

检查1:在写入分频寄存器前增加打印,dump所有公共寄存器。和正常公共寄存器做比较,未发现问题。写入IIC分频器成功。

猜测2:增加打印信息后写入成功为必现,去掉打印会写入不成功。

检查2:证实猜测。

猜测3:写入成功和读取公共寄存器相关

检查3:减少dump范围,小范围dump写入失败,大范围dump写入成功。

猜测4:写入成功和写入时间相关

检查4:dump的寄存器次数不变dump相同寄存器。证实写入成功与写入时间相关。

思考:可能和时钟初始化相关,但是公共寄存器的时钟初始化状态dump是正常的。

猜测1:dump过程中时钟初始化完成(证据:增加dump后写入正常)。

检查1:减少dump范围,发现公共寄存器的mpll稳定寄存器未稳定。

猜测2:时钟相关初始化未完成导致写入失败。

检查2:根据时钟依赖,在写入前增加等待,同时去掉打印,写入成功。

去掉串口设备导致问题100%复现,原因是串口不用初始化导致IIC 时钟分频更早初始化,写入IIC分频寄存器失败。

1.解决问题过程中,曾经怀疑过时钟分频问题但是未检查寄存器,导致问题解决时间拉长。

2.最开始未能考虑问题和时间相关的情况,如果直接思考该可能性,预计提高解决问题速度。

Original: https://www.cnblogs.com/fanguang/p/11808700.html
Author: 反光
Title: IIC挂死问题解决过程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578093/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • WPF 推荐一个剪贴板内容查看工具

    本文来安利大家一个好用的 Windows 剪贴板的内容查看工具 这是在 GitHub 上完全免费开源的应用,由 walterlv 开发的应用,详细请看 https://github…

    Linux 2023年6月6日
    0119
  • 笔记:linux 总结

    1.开始 Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和…

    Linux 2023年6月14日
    0100
  • 搭建Nginx四层反向代理

    需求背景: 前段时间公司因为业务需求需要部署一个正向代理,我已经分享出来了https://www.cnblogs.com/Dfengshuo/p/11911406.html,现有因…

    Linux 2023年6月8日
    0103
  • 消费税

    1994年税制改革时,我国才设置了独立的消费税,与实行普遍征收的增值税配套,对特定消费品进行特殊调节。 消费税的特点: (一)征税范围具有选择性 有选择地确定若干个征税项目,在税法…

    Linux 2023年6月14日
    0100
  • 什么是可调CAP策略?为什么需要可调CAP策略?

    在说可调CAP策略之前,我们要先说说CAP理论。 CAP理论是设计分布式系统必用的黄金法则,它提出了设计分布式系统的三个基本要求:一致性(Consistency)、可用性(Avai…

    Linux 2023年6月6日
    0106
  • OpenStack cinder对接NFS后端存储

    配置NFS服务 安装NFS服务 查询是否安装 [root@nfs ~]# rpm -qa |grep nfs nfs-utils-1.3.0-0.8.el7.x86_64 如没有安…

    Linux 2023年6月8日
    0127
  • Linux at命令详解

    大家好,我是良许。 在生活中,我们有太多的场景需要使用闹钟,比如早上7点起床,下午4点开会,晚上8点购物,等等。 [En] In life, we have too many sc…

    Linux 2023年5月27日
    0101
  • 会计学包含的两种程序设计思想

    下班路上坐地铁的时候看了一本会计学的书,目前看了50多页。过程中,发现会计学和程序设计在思想上有惊人的相似之处。今天举两个例子做说明。 CR设计和账簿 CR设计介绍 CR设计就是只…

    Linux 2023年6月14日
    080
  • Linux 学习笔记

    Linux 学习笔记 作者:Grey 原文地址: 博客园:Linux 学习笔记 CSDN:Linux 学习笔记 说明 本文如果没有特别说明,环境是 CentOS 7, 主要是日常学…

    Linux 2023年5月27日
    0108
  • NGINX压力测试

    Nginx可以作为HTTP服务器和反向代理服务器。反向代理服务器取决于后端服务器的性能,这次只针对HTTP服务器做性能测试。Nginx作为服务器对于网络的性能必然是非常依赖的,尤其…

    Linux 2023年6月14日
    089
  • Web Api单元测试写法

    例如我们在Web Api项目中有个Controller 如果你在单元测试中直接调用 SomeController 的Get()方法,那么你将会收到一个Exception提示Requ…

    Linux 2023年6月14日
    077
  • Kafka入门实战教程(8):常用的shell工具脚本

    1 Kafka提供的命令行脚本 Kafka默认提供了多个命令行脚本,用于实现各种各样的功能和运维管理。从2.2版本开始,提供了多达30+个Shell脚本。 今天我们来看一些其中比较…

    Linux 2023年5月28日
    097
  • Redis和Memcache

    redis 和memcached都支持集群 Redis支持的数据类型要丰富得多,Redis不仅仅支持简单的k/v类型的数据,同时还提供String,List,Set,Hash,So…

    Linux 2023年5月28日
    084
  • Linux显示IP和主机名

    (1) ifconfig:Linux ifconfig命令用于显示或设置网络设备。 语法: ifconfig [网络设备][down up -allmulti -arp -prom…

    Linux 2023年6月8日
    099
  • 安装Redis

    1、下载redis 2、解压缩、安装 安装完之后,可以执行以下make test,执行make test之前需要先安装tcl 3、配置 redis服务后台启动 找到: 修改为: 4…

    Linux 2023年5月28日
    082
  • openssh升级

    bash;gutter:false; ssh -V</p> <p>cp -a /etc/ssh/sshd_config /etc/ssh/sshd_conf…

    Linux 2023年6月7日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球