打印
[其他ST产品]

stm32 IIC详解

[复制链接]
楼主: 舒伯特玫瑰
手机看帖
扫描二维码
随时随地手机跟帖
41
舒伯特玫瑰|  楼主 | 2023-8-27 00:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
IIC协议
IIC总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号。这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。同时我们还要介绍其空闲状态、数据的有效性、数据传输。

使用特权

评论回复
42
舒伯特玫瑰|  楼主 | 2023-8-27 00:52 | 只看该作者
先来看一下IIC总线的时序图:

                  

使用特权

评论回复
43
舒伯特玫瑰|  楼主 | 2023-8-27 00:52 | 只看该作者
这可能会比较复杂,可以先看一份简化了的时序图:

使用特权

评论回复
44
舒伯特玫瑰|  楼主 | 2023-8-27 00:52 | 只看该作者
空闲状态
当IIC总线的数据线SDA和时钟线SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

使用特权

评论回复
45
舒伯特玫瑰|  楼主 | 2023-8-27 00:52 | 只看该作者
起始信号与停止信号
起始信号:当时钟线SCL为高期间,数据线SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号;
停止信号:当时钟线SCL为高期间,数据线SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。

使用特权

评论回复
46
舒伯特玫瑰|  楼主 | 2023-8-27 00:53 | 只看该作者

应答信号
发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。

使用特权

评论回复
47
舒伯特玫瑰|  楼主 | 2023-8-27 00:53 | 只看该作者
应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;
应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

使用特权

评论回复
48
舒伯特玫瑰|  楼主 | 2023-8-27 00:53 | 只看该作者
对于反馈有效应答位ACK的要求是:接收器在第9个时钟脉冲之前的低电平期间将数据线SDA拉低,并且确保在该时钟的高电平期间为稳定的低电平。 如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放数据线SDA,以便主控接收器发送一个停止信号P。

使用特权

评论回复
49
舒伯特玫瑰|  楼主 | 2023-8-27 00:53 | 只看该作者
数据有效性
IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定;只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。

使用特权

评论回复
50
舒伯特玫瑰|  楼主 | 2023-8-27 00:54 | 只看该作者
即:数据在时钟线SCL的上升沿到来之前就需准备好。并在在下降沿到来之前必须稳定。

使用特权

评论回复
51
舒伯特玫瑰|  楼主 | 2023-8-27 00:54 | 只看该作者
数据的传达
在IIC总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。

使用特权

评论回复
52
舒伯特玫瑰|  楼主 | 2023-8-27 00:54 | 只看该作者
延时时间

使用特权

评论回复
53
舒伯特玫瑰|  楼主 | 2023-8-27 00:54 | 只看该作者
IIC总线的数据传送
IIC总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(地址通过物理接地或者拉高),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。

使用特权

评论回复
54
舒伯特玫瑰|  楼主 | 2023-8-27 00:54 | 只看该作者
也就是说,主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。

使用特权

评论回复
55
舒伯特玫瑰|  楼主 | 2023-8-27 00:55 | 只看该作者

使用特权

评论回复
56
舒伯特玫瑰|  楼主 | 2023-8-27 00:55 | 只看该作者
主设备往从设备中写数据。数据传输格式如下: 淡蓝色部分表示数据由主机向从机传送,粉红色部分则表示数据由从机向主机传送。

使用特权

评论回复
57
舒伯特玫瑰|  楼主 | 2023-8-27 00:55 | 只看该作者
写用0来表示(高电平),读用1来表示(低电平)。

主设备从从设备中读数据。数据传输格式如下:

使用特权

评论回复
58
舒伯特玫瑰|  楼主 | 2023-8-27 00:55 | 只看该作者
在从机产生响应时,主机从发送变成接收,从机从接收变成发送。之后,数据由从机发送,主机接收,每个应答由主机产生,时钟信号仍由主机产生。若主机要终止本次传输,则发送一个非应答信号,接着主机产生停止条件。

使用特权

评论回复
59
舒伯特玫瑰|  楼主 | 2023-8-27 00:56 | 只看该作者
主设备往从设备中写数据,然后重启起始条件,紧接着从从设备中读取数据;或者是主设备从从设备中读数据,然后重启起始条件,紧接着主设备往从设备中写数据。数据传输格式如下:

使用特权

评论回复
60
舒伯特玫瑰|  楼主 | 2023-8-27 00:56 | 只看该作者
在多主的通信系统中,总线上有多个节点,它们都有自己的寻址地址,可以作为从节点被别的节点访问,同时它们都可以作为主节点向其它的节点发送控制字节和传送数据。但是如果有两个或两个以上的节点都向总线上发送启动信号并开始传送数据,这样就形成了冲突。要解决这种冲突,就要进行仲裁的判决,这就是I2C总线上的仲裁。

I2C总线上的仲裁分两部分:SCL线的同步和SDA线的仲裁。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则