目录
一、初识IIC
1. 介绍
2. 理解
二、IIC的简单拆分
1. 物理层
特点:
2. 协议层
(1)IIC基本读写过程
具体过程描述:
(2)通信的起始和停止信号
(3)数据有效性
(4)地址及数据方向
(5)响应
四、IIC架构拆解
1. 通信引脚
2. 时钟控制
3. 数据控制逻辑
4. 整体控制逻辑
四、通信过程
1. 主发送器发送流程
2. 主接收器接收流程
一、初识IIC
1. 介绍
IIC通信协议是由Philips公司开发的,提供多主机功能,控制所有IIC总线特定的时序、协议、仲裁和定时。由于不需要使用USART、CAN等通信协议的外部收发设备,现在被广泛地用于系统内多个集成电路间的通信。
2. 理解
对于IIC通信协议,最基本的可以把它分为物理层和协议层。物理层规定通信系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体中的传输。协议层主要规定通信逻辑,统一收发双方的数据打包、解包标准。
简单来说,物理层规定我们是用嘴巴还是用肢体来交流,协议层则规定我是用中文还是英文来交流。
二、IIC的简单拆分
1. 物理层
特点:
① 它是一个支持设备的 总线(指多个设备共用的信号线)。在一个IIC通信总线中,可连接多个 IIC通信 设备,支持 多个通信主机 及 多个通信从机。
② 一个IIC总线只使用 两条总线线路,一条 双向串行数据线(SDA),用来 表示数据;一条 串行时钟线(SCL),用于 同步数据的收发。
③ 每个连接到总线的设备都有 一个独立的地址,主机可以利用这个地址进行 不同设备之间的访问。
④ 总线通过 上拉电阻接到电源。当 IIC设备空闲 时,会 输出高阻态,而当所有设备都空闲,都 输出高阻态时,由 上拉电阻把总线拉成高电平。
⑤ 多个主机 同时使用总线时,为了 防止数据冲突,会利用 仲裁方式 决定由哪个设备占用总线。
⑥ 具有 3种传输模式:标准模式传输速率为 100kbps,快速模式为 400kbps,高速模式可达 3.4Mbps(目前 大多IIC设备 尚不支持高速模式)。
⑦ 连接到相同总线的 IIC数量 受到 总线的 最大电容400pf 限制。
2. 协议层
IIC的协议定义了通信的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。
主机和从机 通信时,SDA线 的数据包 序列 。
(1)IIC基本读写过程
S表示由 主机的IIC接口 产生的传输起始信号,这时连接到IIC总线上的所有从机都会接收到这个信号。
起始信号产生后,所有从机就开始等待主机广播从机地址信号 (SLAVE_ADDRESS)。在IIC总线上,每个设备的地址都是唯一的,当主机广播的地址与某个设备地址相同时,这个设备就被选中了,没被选中的设备将会 忽略之后的数据信号。根据 IIC协议,这个 从机地址可以是7位或10位。
在地址位之后,是传输方向的选择位,该位为 0 时,表示后面的数据传输方向是 由主机传输至从机,即主机向从机写数据。该位为 1 时,则相反,即 主机由从机读数据。
从机接收到匹配的地址后,主机或从机 会返回一个应答(ACK)或非应答(NACK)信号,只有接收到应答信号后,主机才能继续发送或接收数据。
具体过程描述:
① 写数据
若配置的方向传输位 为“写数据” 方向。广播完地址,接收到应答信号后,主机开始正式 向 从机传输数据(DATA)。数据包 的大小为 8位,主机每发送完 一个字节数据,都要等待从机的 应答信号(ACK),然后 重复这个过程。可以向从机传输 N个数据, N没有 大小限制。当数据传输结束时,主机向从机发送一个 停止传输信号(P),表示不再传输数据。
② 读数据
若 配置的方向传输位 为“读数据” 方向。广播完地址,接收到应答信号 后,从机开始 向主机 返回数据(DATA)。数据包大小为 8位,从机每发送完 一个数据,都会 等待主机的应答信号(ACK),然后 重复这个过程。可以返回 N个数据,N 没有 大小限制。当主机希望 停止接收数据时,就 向从机返回一个 非应答信号(NACK),则 从机自动停止数据传输。
③ 读和写数据
除了 基本的读写,IIC通信更常用的是 复合格式。该传输过程 有 两次起始信号(S)。一般在 第 1次传输 负责告诉从机读写地址,主机 通过 SLAVE_ADDRESS 寻找到 从设备后,发送一段 “数据 ”,这段 数据 通常 用于 表示 从设备 内部的寄存器或存储器地址( 与SLAVE_ADDRESS不同 );在 第 2 次 的传输中 负责 读写的 实际内容,即 对该地址的 内容进行 读或写。
(2)通信的起始和停止信号
当 SCL线 是高电平时 SDA线 从高电平向低电平切换,表示通信的起始。当SCL是高电平时SDA线由低电平向高电平切换,表示通信的停止。
起始和停止信号一般由主机产生。
(3)数据有效性
IIC使用SDA信号线来传输数据,使用SCL信号线进行数据同步。SDA数据线在SCL的每个时钟周期传输一位数据。传输时,SCL为 高电平的时候 SDA表示的 数据有效,即此时的SDA为高电平时表示数据‘1’,为低电平时表示数据‘0’。当SCL 为 低电平时 SDA的数据无效,一般在这个时候SDA进行电平切换,为下一次表示数据做好准备。
每次数据传输都 以字节 为单位,每 次传输的字节数不受限制。
(4)地址及数据方向
IIC总线上的每个设备都有自己的独立地址,主机发起通信时,通过SDA信号线发送设备地址(SLAVE_ADDRESS)来查找从机。IIC协议 规定设备地址可以是 7位 或 10位( 7位的 地址应用比较广泛 )。紧跟设备地址的一个数据位用来表示数据传输方向,它是 数据方向位(R/W)( 第8位 或 第11位 )。数据方向位为 ‘1’ 时表示主机由从机读数据,该位为 ‘0’ 时表示主机向从机写数据。
读数据方向时,主机会释放对SDA信号线的控制,由 从机控制 SDA 信号线,主机 接收信号;写 数据方向时,SDA 由 主机控制,从 机接收信号。
(5)响应
IIC的数据和地址传输都带响应。响应包括“应答”(ACK)和“非应答”(NACK)两种信号。作为数据接收端时,当设备(无论主从机)接收到 IIC传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发送“应答”(ACK)信号,发送方会继续发送下一个数据;若接收端希望结束数据传输,则向对方发送“非应答”(NACK)信号,发送方接收到该信号后会产生一个停止信号,结束信号传输。
传输时 主机产生时钟,在第 9个 时钟时,数据发送端会 释放 SDA的 控制权,由 数据接收端控制 SDA,根据需要将其拉低或拉高。若SDA为高电平,表示 非应答信号( NACK ),低电平表示应答信号 ( ACK)。
四、IIC架构拆解
1. 通信引脚
IIC的所有硬件架构都是根据 SCL线和SDA线展开的(SMBA线用于 SMBus的警告 信号,IIC通信中不使用 ),STM32芯片有多个 IIC外设,它们的 IIC通信信号引出到不同的GPIO引脚上,使用时必须配置到这些指定的引脚。
2. 时钟控制
SCL线的时钟信号,由IIC接口根据时钟控制寄存器CCR控制,控制的参数主要为时钟频率。配置PC的CCR寄存器可修改通信速率相关的参数。
3. 数据控制逻辑
IIC的SDA 信号主要 连接到数据移位寄存器上,数据移位寄存器的数据来源及目标是数据寄存器(DR)、地址寄存器(OAR) 、PEC寄存器以及SDA数据线。
当向外发送数据的时候,数据移位寄存器以“数据寄存器”为数据源,把数据一位一位地通过SDA信号线发送出去;当从外部接收数据的时候,数据移位寄存器把SDA信号线采样到的数据一位一位地存储到“数据寄存器”中。
若使能了 数据校验,接收到的数据会经过 PEC计算器 运算,运算结果存储在 “ PEC寄存器”中。
当 STM32的 IIC 工作在 从机模式 的时候,接收到 设备地址 信号时,数据移位寄存器 会把接收到的 地址 与STM32 自身的 “ IIC地址寄存器 ” 的值 作比较,以便 响应主机的寻址。STM32的 自身的 IIC地址 可通过 “ 自身 地址 寄存器 ” 修改,支持 同时使用 两个 IIC设备地址,两个地址 分别存储在 OAR1和 OAR2 中。
4. 整体控制逻辑
负责协调整个PC外设。工作模式根据自己配置的控制寄存器 CR1/CR2的参数而改变。
在外设工作时,控制逻辑会根据外设的工作状态修改状态寄存器 SR1和SR2,只要读取这些寄存器相关的寄存器位,就可以了解IIC的工作状态。
控制逻辑 还 根据要求,控制 产生 IIC中断信号、DMA 请求及各种 IIC的 通信 信号(起始、停止、应答信号等)。
四、通信过程
使用IIC外设通信时,在通信的不同阶段会对状态寄存器SR1/SR2的不同数据位写入参数,可以通过读取这些寄存器标志来了解 通信状态。
1. 主发送器发送流程
(1)控制产生起始信号(S),当发生起始信号后,它产生事件EV5,并会对SR1寄存器的SB位置1,表示起始信号已经发送。
(2)发送设备地址并等待应答信号。若有从机应答,则产生事件EV6 及 EV8,这时 SR1寄存器的ADDR位及TxE位被置1( ADDR置1表示地址已经发送,TXE置1表示数据寄存器为空 )。
(3)上述步骤正常执行并对ADDR位清零后,往 IIC的数据寄存器DR 写入要发送的数据,这时TxE位 会被重置 0,表示数据寄存器非空,IIC外设通过 SDA信号线一位位 把数据发送出去后,又会产生EV8事件,即 TXE位 被置1( 重复这个过程,就可以发送多个字节数据 )。
(4)发送了足够的数据后,设置 控制寄存器 CR1 的 STOP 位,这种情况下,当 IIC发送了最后一个数据后会产生EV8_2事件,SR1 的TxE 位及BTF位 都被置1,然后 IIC总线 产生一个停止信号(P),表示通信结束。
假如 使能了 IIC 中断,以上 所有事件产生时,都会 产生 IIC 中断信号,进入 同一个中断 服务函数。进入 IIC中断 服务程序后,再 通过 检查 寄存器 位来 判断 是哪 一个事件。
2. 主接收器接收流程
(1)起始信号(S)由主机端产生,控制发生起始信号,同时产生事件EV5,并对SR1寄存器的SB位 置1,表示起始信号已经发送。
(2)发送设备地址并等待应答信号,若有从机应答,则产生事件EV6,这时 SR1寄存器的ADDR位被置1,表示 地址已经发送。
(3)从 机端 接收到地址后,开始向主机端发送数据。当主机接收到这些数据后,会产生EV7事件,SR1寄存器的RxNE 被置1,表示接收数据寄存器非空,读取该寄存器后,可对数据寄存器清空,以便接收下一次数据。此时可 控制 IIC 发送 应答信号(ACK) 或非应答信号(NACK)( 若应答则重复以上步骤接收数据,若非应答则停止传输 )。
(4)发送非应答信号后,产生停止信号(P)结束传输。
后面再进行补充。