IIC简介
I 2 C I^2C I2C通讯协议是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强没不需要USART、CAN等通讯协议的外部收法设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
IIC物理层的特点
电阻一般为4.7k
它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个IIC通讯总线中,可连接多个IIC通讯设备,支持多个通讯主机及多个通讯从机。
一个IIC总线只使用两条总线线路,一条双向串行数据线(SDA),一个串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。
每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
IIC的协议层
IIC的协议定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。
1. IIC基本读写过程
主机写数据到从机:
主机由从机中读取数据
例如:刚开始主机产生传输开始信号,再发送从机地址以及读信号,如果存在该地址,从机产生应答信号,将数据传输给主机,如果主机还需要数据,主机产生应答信号,从机传输数据给主机,如果主机产生非应答信号,则主机再接着发出停止信号。
通讯复合格式
2.通讯的起始和停止信号
当SCL线是高电平时SDA线从高电平向低电平切换,这个情况表示通讯的起始。
当SCL时高电平时SDA线由低电平向高电平切换,表示通讯的停止。
起始和停止信号由主机产生。
3.数据有效性
IIC使用SDA信号线来传输数据,使用SCL信号线进行数据同步,SDA数据线在SCL的每个时钟周期传输一位数据。
SCL为高电平的时候SDA表示的数据有效,即此时的SDA为高电平时表示数据“1”,为低电平时表示数据“0”。
当SCL为低电平时,SDA的数据无效,一般在这个时候SDA进行电平切换,为下一次表示数据做好准备。
4.地址及数据方向
IIC总线上的每个设备都哦有自己独立地址,主机发起通讯时,通过SDA信号线发送设备地址(SLAVE_ADDRESS)来查找主机。设备的地址可以是7为或10位。
紧跟设备地址的一个数据为R/W用来表示数据传输方向,数据方向位为"1"时表示从机由主机读取数据,改位为"0"时表示主机向从机写数据。
5.响应
IIC的数据和地址传输都带响应。响应包括"应答(ACK)"和“非应答信号(NACK)”两种信号。
传输时主机产生时钟,在第9个时钟时,数据发送端会释放SDA的控制权,有数据接受端控制SDA,若SDA为高电平,表示非应答信号(NACK)低电平表示应答信号(ACK)。
注意:数据发送端与接收端既可以为发送端也可以为接收端。
STM32的IIC特性及架构
软件模拟协议:使用CPU直接控制通讯引脚的电平,产生出符合通讯协议标准的逻辑。
硬件实现模拟:由STM32的IIC片上外设负责实现IIC通讯协议,只需要配置好该外设,它就会自动根据协议要求产生通讯信号,收法数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。这种由硬件外设处理IIC协议的方式减轻了CPU的工作,且使软件设计更加简单。
STM32的外设可用作通讯的主机及从机·,支持100Kbits/s和400Kbits/s的速率,支持7位、10位设备地址,支持DMA数据传输,并具有数据校验功能。
注意:硬件实现比软件实现方便。STM32的IIC不够稳定。
IIC框图
STM32的IIC架构剖
IIC-读写EEPROM
通讯引脚
STM32芯片有多个IIC外设,它们的IIC通讯信号引出到不同的GPIO引脚上,使用时必须配置到这些指定引脚,以《STM32F103xCDE_DS_CH_V5》为准。
注意:SMBA与SMbus协议对应。
时钟控制寄存器
数据控制逻辑
IIC的SDA信号主要连接到数据移位寄存器上,数据移位寄存器的数据来源及目标是数据寄存器(DR)、地址寄存器(OAR)、PEC寄存器以及SDA数据线。
当向外发送数据时,数据移位寄存器以“数据寄存器”为数据源,把数据一位一位地通过SDA信号线发送出去;
当从外部接收数据时,数据移位寄存器把SDA信号线采样到的数据一位一位地存储到“数据寄存器中”。
总体控制寄存器
用来发送起始信号、结束信号、以及判断总线是否被占用。