IIC总线学习之一

IIC简要介绍

IIC英文全称Inter-Integrated Circuit,是一种串行通信总线,在线上可以存在多个主机以及多个从机。目的是为了让主板、嵌入式系统或手机用以连接低速周边设备,由飞利浦公司在上世纪80年代发明。

特征

	1、只要求两条总线线路,一条串行数据线(SDA),一条串行时钟线(SCL).
	2、每个连接到总线的器件都可以通过唯一的地址和一直存在的最简单的主机/从机关系软件设定地址;主机可以作为主机发送器或主机接收器。
	3、多主机总线,如果有两个或者两个以上主机同时初始化数据传输可以通过冲突检测或者仲裁防止数据被破坏。
	4、串行的8位双向数据传输在标准模式下可达100kbit/s,快速模式可达到400kbit/s,高速模式可到达3.4Mbit/s。
	5、片上滤波器可以滤去总线上的毛刺波,保证数据完整。
	6、连接到相同总线上的IIC器件数量只受到总线最大电容400pF的限制。

应用实例

概念

	IIC总线支持任何IC生产过程(NMOS、CMOS、双极性)。每个器件都有一个唯一地址识别,而且都可以作为一个发送器或者接收器。

IIC总线术语

硬件电路实现

两个主控器的IIC总线连接
SDA和SCL都是双向电路,都是通过一个直流源或者上拉电阻连接到正的电源电压。当总线空闲时,两条路都是高电平。连接到总线的器件的输出级必须是漏极开路或者是集电极开路才能执行***线与***的功能。
器件连接到总线方式

软件协议帧说明

位传输

由于连接到IIC总线的器件有不同的工艺,逻辑‘0’和逻辑‘1’的电平不是固定的,它由Vdd的相关电平决定。
每传输一个数据位就产生一个时钟脉冲。

数据的有效性

SDA线上的数据必须在时钟的高电平周期保持稳定。数据的高或低电平状态只有在SCL线是低电平时才能改变。
位传输

起始和停止条件

起始条件和停止条件一般由主机产生。总线在起始条件后被认为是***忙状态***,在停止后的某段时间后,总线再次被认为是***空闲状态***。
***起始条件***在SCL是高电平时,SDA由高电平向低电平切换。
***停止条件***在SCL是高电平时,SDA由低电平向高电平切换。
起始和停止条件

数据传输

字节格式

1、发送到SDA线上的每个字节必须是8位
2、每次传输的字节数量不受限制
3、每个字节后必须跟一个响应位
4、首先传输的是数据的最高位(MSB)
当从机正在处理其他事件(比如中断)才能接收或发送下一个完整的数据字节,可以使时钟线SCL保持低电平迫使主机进入等待状态。当从机准备好接收下一个字节并释放时钟线SCL后,数据继续传输。

响应

数据传输必须带响应。相关的响应时钟由主机产生。在响应的时钟脉冲期间,发送器释放SDA线(高电平),在响应期间,接收器必须将SDA线拉低,使它在这个时钟电平的高电平时期保持稳定的低电平。(考虑建立和保持时间)
IIC总线的数据传输
IIC总线的响应

仲裁和时钟发生

同步

当多主机存在时,每个主机都通过在SCL线上产生主机的时钟脉冲来传输报文。数据只在时钟的高电平周期有效,因此需要一个时钟来进行诸逐位仲裁。
SCL线被有最长低电平周期的器件保持低电平,此时低电平周期短的器件会进入高电平的等待状态。
当所有器件低电平周期结束后,时钟线被恢复为高电平。所有器件开始对高电平周期进行计数,首先完成高电平周期的器件会再次将SCL线拉低。

综上,产生同步时钟低电平周期由低电平时钟周期最长的器件决定,高电平周期由高电平周期最短的器件产生。
在这里插入图片描述

仲裁

当SCL线是高电平时,仲裁在SDA线产生。
仲裁过程

用时钟同步机制作为握手

时钟同步机制除了在仲裁过程使用外,还可以使能接收器处理字节级或位级的快速数据传输。
在字节级的快速传输中,器件可以快速接收数据字节,但需要更多的时间去保存接收到的字节或准备另一个要发送的字节。然后,从机以一种握手过程在接收和响应一个字节后使SCL线保持低电平,迫使主机进入等待状态,直到从机准备好下一个要发送的字节。
在位级的快速传输中,器件通过延长每个时钟总线的低电平周期减慢总线时钟。从而,任何主机的速率都可以适配这个器件的内部操作速率。

7位的地址格式

数据传输都遵从以下格式。在起始条件结束后,发送一个从机地址,紧接着第八位是数据方向位(R/W,'0’表示发送(写)、‘1’表示接收(读)),后面是一个响应信号。一般数据传输由主机产生的停止位终止。
完整的数据传输

数据传输格式

1、主机发送到从机(数据方向不变)
数据方向不变

2、在第一个字节后,主机由发送器变为接收器(数据方向改变)
数据方向改变

3、复合格式(传输方向改变时,起始条件和从机地址都会被重复)

复合格式

7位寻址

第一个字节的位定义

头7位为从机地址,最低位(LSB)是第8位。
第一字节定义
第一个字节中的位定义

版权声明:本文为CSDN博主「SKY -dada」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_29982209/article/details/122521790

生成海报
点赞 0

SKY -dada

我还没有学会写个人说明!

暂无评论

相关推荐

RT-Thread Studio移植LAN8720A驱动

RTT网络协议栈驱动移植(霸天虎) 1、新建工程 ​ 工程路径不含中文路径名,工程名用纯英文不含任何符号。 2、用CubeMx配置板子外设 2.1、配置时钟 ​ 按照自己板子配置相应时钟。

【STM32Cube笔记】12-配置外部中断

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配

stm32cubemx+HAL+串口接收中断

stm32cubemxHAL串口接收中断 在cubemx配置完串口和global interrupt后需要在keil中添加如下代码。 第一步:在main函数中添加接收中断标志位开启函数 HAL_UART_Receive_IT