电力电子技术
直播中

陈辉

7年用户 212经验值
私信 关注
[问答]

IIC总线和SPI总线通信详解

IIC总线和SPI总线通信介绍

回帖(11)

张秀兰

2020-12-23 14:36:10
IIC总线协议

在硬件上,IIC总线是由时钟总线SCL和数据总线SDA两条线构成,其中SCL为时钟线,SDA为数据线,如图6-1所示。总线上可以同时连接多个器件,所有器件的SCL都连到一起,所有SDA都连到一起。




6-1 IIC总线时序图
起始信号:IIC通信的起始信号的定义是SCL为高电平期间,SDA由高电平变化到低电平产生的一个下降沿,表示一次通信过程的开始,如图6-2中的Start部分所示。
数据传输:IIC通信是高位在前,低位在后。IIC通信要求当SCL在低电平的时候,SDA允许变化,也就是说,发送方必须先保持SCL是低电平,才可以改变数据线SDA,输出要发送的当前数据的一个位;而当SCL在高电平的时候,SDA绝对不可以变化,因为这个时候,接收方要来读取当前SDA的电平信号是0还是1,因此要保证SDA的稳定,如图6-1中的每一位数据的变化,都是在SCL的低电平位置。8位数据位后边跟着的是一位应答位,应答位我们后边还要具体介绍。
停止信号:IIC通信停止信号的定义是SCL为高电平期间,SDA由低电平向高电平变化产生一个上升沿,表示一次通信过程的结束,如图6-1中的Stop部分所示。
举报

王思敏

2020-12-23 14:36:21
IIC寻址模式

上一节介绍的是IIC每一位信号的时序流程,而IIC通信在字节级的传输中,也有固定的时序要求。IIC通信的起始信号(Start)后,首先要发送一个从机的地址,这个地址一共有7位,紧跟着的第8位是数据方向位(R/W),“0”表示接下来要发送数据(写),“1”表示接下来是请求数据(读)。
Kingst-32F1板子上的EEPROM器件型号是24C02,在24C02的数据手册3.6节中可查到,24C02的7位地址中,其中高4位是固定的0b1010,而低3位的地址取决于具体电路的设计,由芯片上的A2、A1、A0这3个引脚的实际电平决定。IIC总线器件是开漏引脚,因此外部要添加上拉电阻,保证总线空闲时为高电平。来看一下24C02的电路图,如图6-2所示。


从图6-2可以看出来,A2、A1、A0都是接的GND,也就是说都是0,因此24C02的7位地址实际上是二进制的0b1010000,也就是0x50。
IIC通信分为标准模式100kbit/s、快速模式400kbit/s和高速模式3.4Mbit/s。因为所有的IIC器件都支持标准模式,但却未必支持另外两种速度,所以作为通用的IIC程序我们选择100k这个速率来实现,也就是说实际程序产生的时序必须小于等于100k的时序参数,有特殊速度需求的器件再针对性写高速通信程序。
IIC引脚属于开漏并联结构,并且STM32的GPIO端口引脚设置为开漏输出时,可以直接从输入数据寄存器获取I/O电平状态,因此将IIC引脚配置为开漏输出模式。由于IIC总线空闲时默认为高,初始化时还需要设置引脚输出高电平,不过设置引脚输出高电平并不是在初始化之后,而应该放在初始化之前。这是因为STM32在上电复位时I/O口为高阻状态,复位结束后,GPIO端口引脚默认为浮空输入,由于上拉电阻的存在,IIC引脚被拉高;当程序执行到IIC初始化时又被配置为开漏输出模式,由于GPIO端口输出数据寄存器初始值默认全为0,初始化后I/O口输出低电平,如果初始化之后再设置引脚输出高电平,势必会在I/O口上产生一个低电平的毛刺。如果在IIC引脚初始化之前先设置输出数据寄存器相应位为高,初始化IIC引脚后,I/O口会直接输出高电平,避免毛刺信号。
举报

贵奂

2020-12-23 14:36:41
IIC总线的驱动程序:
举报

张易

2020-12-23 14:36:56
初识EEPROM

在实际的应用中,保存在单片机RAM中的数据,掉电后就丢失了,保存在单片机内部FLASH中的数据,又不能随意改变。但是在某些场合,我们需要记录下某些数据,而它们还需要时常改变或更新,并且掉电之后数据还不能丢失,比如我们的家用电表度数,电视机里边的频道记忆,一般都是使用EEPROM来保存数据,特点就是掉电后不丢失。Kingst-32F1板子上使用的这个器件是24C02,是一个容量大小是2Kbits,也就是256个字节的EEPROM。一般情况下,EEPROM拥有30万到100万次的擦除寿命,也就是它可以反复写入30-100万次,而读取次数是无限的。
24C02是一个基于IIC通信协议的器件,因此从现在开始,IIC和EEPROM就要合体了。但要分清楚,IIC是一个通信协议,它拥有严密的通信时序逻辑要求,而EEPROM是掉电后数据不丢失的一种存储器件的统称,24C02就属于EEPROM,只不过24C02采样了IIC协议的接口与单片机相连而已,二者并没有必然的联系,EEPROM可以用其它接口,IIC也可以用在其它很多器件上。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分