IIC总线协议的死锁问题

news/2024/11/25 19:26:47/

目录

1. IIC的特性

2. IIC死锁问题分析

3. 常见的IIC死锁问题解决方法


1. IIC的特性

IIC协议是一个允许一主多从通信的协议,只能用于短距离通信,并且只需要两根信号线来交换信息。

IIC的两根信号是SCL和SDA,SCL是时钟信号线,SDA是数据输入/输出线。因为有时钟线,所以IIC是同步通信。又因为输入输出数据均使用同一根线,因此通信方向为半双工。(这里有名词解释)

IIC的通信过程可以看这里:常见的接口汇总 

今天主要来看一下IIC的死锁问题

2. IIC死锁问题分析

补充一个知识点,IIC的SDA和SCL在空闲时都处于高电平状态。

在实际使用中,IIC比较容易出现一个问题就是死锁,主要表现是:SCL为高,SDA一直为低。

在IIC主设备进行读写操作的过程中,主设备在开始信号后控制SCL生产8个时钟脉冲,然后拉低SCL信号为低电平,在这个时候,从设备输出应答信号,将SDA信号拉为低电平。

如果这个时候主设备异常复位,SCL就会被释放为高电平。此时,如果从设备没有复位,就会继续IIC的应答,将SDA一直拉为低电平,直到SCL变为低电平,才会结束应答信号。而对于IIC主设备来说,复位后检测SCL和SDA信号,如果发现SDA信号为低电平,则会认为IIC总线被占用,会一直等待SCL和SDA信号变为高电平。

这样,IIC主设备等待从设备释放SDA信号,而同时IIC从设备又在等待主设备将SCL信号拉低以释放应答信号,两者相互等待,IIC总线进入一种死锁状态。

同样的,当IIC进行读操作,从设备应答后输出数据,如果在这个时候IIC主设备异常复位而此时从设备输出的数据正好为0,也会导致IIC总线进入死锁状态。

3. 常见的IIC死锁问题解决方法

1. 主设备在检测到SDA被拉低超过一段时间后,主动复位从设备从而使之释放SDA。这种方法的前提是主设备连接了从设备的复位引脚,主设备就可以控制从设备的复位管脚使之复位。

2. 主设备在检测到SDA被拉低超过一段时间后,推送9个Clock到时钟总线上,取走从设备的ACK位,从而使从设备释放SDA为高电平。

3. 在主从设备之间串联一个IIC缓冲器,该缓冲器可以自动检测死锁状态。当检测到死锁时会主动断开与主设备的连接,并发送9个Clock给从设备,等从设备释放SDA线后重新与主设备建立连接。

IIC的死锁问题无法从根本上避免,除了主设备的异常复位导致IIC死锁,从设备在正常通信过程中也有可能异常拉低SDA导致死锁。所以软件在设计时要考虑当死锁发生时能够从死锁中恢复,使得IIC通信可以继续进行。


http://www.ppmy.cn/news/108579.html

相关文章

Java之路:构建坚实基础,系统学习Java技术的终极指南

无论是初学者还是有经验的专业人士,在学习一门新的IT技术时,都需要采取一种系统性的学习方法。作为一名Java技术er,下面我将介绍我是如何系统的学习Java技术的。 一、Java技术介绍 Java是一种广泛应用于软件开发的高级编程语言,…

docker的基本相关知识和操作

镜像相关操作命令: 访问DockerHub搜索镜像,https://hub.docker.com/ 查看本地镜像:docker images 搜索镜像 docker search redis (搜索redis) 拉取镜像:docker pull redis (默认版本&#x…

【学习日记2023.5.30】之 订单处理 订单状态定时处理_来单提醒_用户催单

文章目录 10. 订单处理10.1 Spring Task10.1.1 介绍10.1.2 cron表达式10.1.3 入门案例10.1.3.1 Spring Task使用步骤10.1.3.2 代码开发10.1.3.3 功能测试 10.1.4提交代码 10.2 订单状态定时处理10.2.1 需求分析10.2.2 代码开发10.2.3 功能测试 10.3 WebSocket10.3.1 介绍10.3.2…

SQl Server 2008 知识点概括【数据库】

1. 第一章 数据库概述 什么是数据库? 数据库是采用计算机技术统一管理的相关数据的集合,数据库能为各种用户共享,具有冗余度最小、数据之间联系密切、有较高数据独立性等特点。Microsoft SQL Server 系统的体系结构 Microsoft SQL Server 20…

gitlab占用内存太大了如何解决?

大家好,我是雄雄,欢迎关注微信公众号雄雄的小课堂 现在是:2023年5月30日16:58:15 最近在家里自己搞了个服务器,因为这台机器都不用了,从朋友那拿过来,就当服务器用了,看了下,比云服…

UEFI开发环境搭建(Windows)

重拾UEFI学习。 第一步是搭建开发环境,记录如下: 1. 安装开发工具 Visual Studio 2017 python/ASL/NASM 安装到如下目录: c:\Python310 c:\ASL c:\NASM 更新系统变量Path: 新建系统变量PYTHON_HOME 下载EDK2 创建工作目录&#xff…

C++ > Cmake

目录 编译器 多文件编译与链接 Makefile构建系统 编译器 厂商 C C GNU gcc g main.cpp #include <cstdio>int main() {printf("Hello, world!\n");return 0; }编译器, 是一个根据源代码生成机器码的程序 g main.cpp -o a.out调用编译器程序g, 读…

8.Linux重命名文件或目录

在 Linux 中&#xff0c;可以使用 mv 命令来重命名文件或目录。重命名操作其实就是将原文件或目录的名称作为源路径&#xff0c;新名称作为目标路径即可。 下面是一些重命名操作及其示例&#xff1a; 重命名单个文件&#xff1a;将原文件名称作为源路径&#xff0c;新名称作为…