‘壹’ I2C传输数据是怎么回事
要学好I2C通信,你必须了解I2C通信协议,就是实现制定的规则,时序可以自己写,只要满足条件就好,起始信号之后,如果写数据,就要通过SDA线将数据发送出去,SDA上信号变化都是在SCL低电平期间变化的,在SCL高电平期间要保证SDA上的信号稳定,一般读数据是在SCL高电平期间读写的。
‘贰’ 嵌入式基础IC2总线
姓名 魏子勋
学号20009101910 竹园三号书院
【嵌牛鼻子】一种串行通信的介绍
【嵌牛正文】
1. 简介
I2C (Inter-Integrated Circuit),是一种串行通信总线,用于连接微控制器及其外围设备,实现主控制器和从器件间的主从双向通信,是一种同步半双工通信(两端时钟频率一致,双向通信,但不能同时进行数据收发)。
2. 原理
I2C通信属于串行通信,具有两根串行信号线:数据线(SDA),时钟线(SCL)。如下图所示,主控制器与从器件(一个或多个)都通过两根信号线连接,信号线上主机和从机都可以扮演发送器和接收器的角色。为确保传输过程的指向准确性,每个接到I2C总线上的器件都有唯一的地址(7位从器件专用地址码),可实现制定从机的定向传输与群发传输。
2.1 信号类型
同时,为确保传输稳定,所有连接在同一I2C总线上的设备共用一个时钟。I2C 总线在传送数据过程中共有以下几种类型信号:
(1) 开始信号/结束信号
SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
(2) 应答信号/非应答信号
IIC 总线协议规定,每传送一个字节数据后(8bit),都要有一个应答信号以确定数据传送是否被对方收到。即一个字节传输的8个时钟过后的第9个时钟期间,接收器必须回一个ACK应答信号给发送器,这样才能进行数据传输。
应答信号由接受设备产生,在SCL为高电平期间,接受设备将SDA拉低为低电平,表示数据传输正确,产生应答(ACK),SDA拉高则表示数据传输失败,产生非应答位(NACK)。
(3) 闲置状态/被占用状态
在主机发送起始信号后,且未发送终止信号期间,总线处于被占用状态。
发送终止信号后,总线处于闲置状态,SCL与SDA同时为高电平。
2.2 总线读写流程
I2C总线进行数据传送时,SCL时钟信号为高电平期间,SDA数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。 当一个字节按数据位从高位到低位的顺序传输完后,紧接着从机将拉低SDA线,回传给主设备一个应答位ACK, 此时才认为一个字节真正的被传输完成 ,如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
I2c总线写通信过程:
主机在检测到总线空闲的状况下,首先发送一个START信号掌管总线;
发送一个地址字节(8 bit),其中bit0-6位为从机地址,存放从机唯一地址;bit7位为读写位(R/W),0表示write主机 ->从机,1表示read 从机->主机;
主机发送地址时,总线上每个从机都会将7位地址与自己的地址进行比较,若相同,则将匹配成功,发送应答信号(ACK),确定发送器和接收器;
主机收到ACK后开始发送第一个字节(Command),对应从机中要写入的寄存器;
从机接收到Command后,从机发送ACK;
主机收到ACK后开始发送第一个数据字节:bit0-7(8bit数据,高到低),从机收到数据后,发送应答ACK;
继续发送数据,n帧;
主控发送完全部数据后,发送一个停止位STOP,结束
整个通讯并且释放总线;
I2c总线读通信过程:
主机产生START信号,随后发送从机地址(7bit)+0(Write);
*方向仍然是写,待接收到从机发送的ACK应答后,配对成功。
主机接收到ACK后,发送8bit内存地址(Command对应从机相应寄存器地址),从机接收到后,内部寻址并提取数据,返回ACK;
主机接收到ACK后,重新产生START信号,再一次发送从机内存地址,(7bit)+1(Read),从机接收到后返回ACK;
*方向设置为读,主机设置为接收模式
主机接收到ACK后,做好接收从机信息的准备,现在即可接收1bit的数据。
*主机不向从机发送应答信号,接收完毕后直接发起终止信号。
主机接收全部数据后,产生STOP信号,终止通信,总线变为闲置状态。
‘叁’ I2C总线字节传送与应答时数据传送格式是什么
是这样的,I2C总线传送的是串行数据,数据的传送格式为:
1)从master模块到slave模块(写的工作方式)时的数据传送格式start
slave
address
R-W
A
DA
TA
A
DA
TA
A
stop
2)从slave模块到master模块(读的工作方式)时的数据传送格式start
slave
address
R-W
A
DA
TA
A
DA
TA
A
stop
首先传送起始状态start,然后传送第一个字:master所选中的slave模块的地址slave
address,地址长为7位,这个字的第8位(L
SB)RW表示读写状态,“0”表示写操作,从master模块到slave模块;“1”表示读操作,从slave模块到master模块。当地址被传送后,总线上的每个物理设备会将自己的地址和start位后的七位地址比较,如果地址相匹配,该设备就会认为是自己的地址,然后等待第8位(读写位)以决定它将是从接收装置(slave-receiver)还是从发送装置(slave-transm
itter)。其后是slave模块发送到master模块的应答信号(acknow
ledgment),值得注意的是,每个字(地址和数据)被传送后其后必须跟随应答信号(为master控制总线生成的第9个时钟),当一个正向的应答信号有效时,SCL时钟为高电平且稳定,同时,接收装置将SDA数据线置为低。接下来是按字节来传送数据,每传送完8位数据,接收装置会发送一个应答信号,传送结束时由master生成stop位,表示处于结束状态。