川大通信课程设计I2C通信
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
I²C通信及改进
一、I²C简介
I²C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
是微电子通信控制领域广泛采用的一种总线标准。
它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。
同时让系统的更改和扩充极为容易。
I²C总线有两根双线信号线:一根数据线SDA;一根时钟线SCL。
为使I²C总线数据传输有效,规定在传输时,SDA必须在SCL高电平期间保持稳定,SDA改变电平只能在SCL处于低电平期间进行
图1
I²C的起始终止信号基本由主机产生,规定SDA在SCL高电平期间由高电平变为低电平表示起始信号;SDA在SCL高电平期间由低电平变为高电平表示终止信号
图2
I²C数据传送格式为,每个字节保持8位长度,先传送最高位,字节传送完后跟一个低电平应答位ACK
图3
总线的传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。
I²C时序如图4
图 4
二、I²C的基础运用
1、运用I²C传送学号最后两位数据。
(1)器件地址是身份证最后两位19,转化为4位二进制数得0001 1001,舍弃第一位为001 1001。
(2)内部地址为1011 0110。
(3)学号最后两位是11,转化为4位二进制数得0001 0001。
2、主机传送数据到从机时序图(图5)
3、主机命令从机发回数据时序图(图6)
05
10
15
20
25
30
35
40
45
50
55
01
ACK
ACK
1
11
11
1
1
1
1
00
00
00
00
00
SC L
SD A
output ACK
1stop
5
10
15
20
25
30
35
40
45
50
55
01
start
图5 总线写时序
5
10
15
20
25
30
35
40
45
50
55
60
65
70
75
01
ACK
ACK
ACK
output 0
000
00
00
00
00
0start 11
input
11111111
111stop
start
5
10
15
20
25
30
35
40
45
50
55
60
65
70
75
01
SCL
SDA
图6 总线读时序
三、I²C的改进
I²C总线传输容量有限,而接入总线器件很多,每个器件都可以作为主机发出数据,因此需要制定规则,对I²C进行改进,使多个需要发出数据的主机只有一个能够控制总线,才能使发出的数据不会被损坏。
1、当前判定主机方式的缺陷
(1)仲裁方式
当前许多I²C采用仲裁方式来选择主控器,仲裁控制方式是利用总线的线“与”逻辑功能,检测所有节点是否与总线的数据一样,电平不一样就断开节点,电平相同就继续传输数据。
图7
但由于连接在一个总线上的器件很多,总线忙时会出现许多主机发送相似数据以至于仲裁需要花费过多时间,而总线传输速率有限,就容易发生拥塞。
如图8所示,有3个节点同时发生数据,而数据在49个时钟周期上都是一样的,在第50个周期上开始出现不同,节点1的数据和总线相符,可以继续发送数据,节点2和3就该退出竞争。
而实际中,会有更多的节点同时发送相似数据,数据可能会更长,这就导致仲裁时间过长,但是总线的传输速率有限,标准模式仅为100kbit/s,长时间仲裁就可能导致拥塞。
(2)CSMA/CD控制方式
CSMA/CD控制方式的原理是,在发送数据前先侦听信道是否空闲 ,若空闲,则立即发送数据。
若信道忙碌,则等待一段时间至信道中的信息传输结束后再发送数据;若在上一段信息发送结束后,由于CSMA/CD控制下,节点均为同级,若出现同时有两个或两个以上的节点都提出发送请求,则判定为冲突。
若侦听到冲突,则立即停止发送数据,等待一段随机时间,再重新尝试。
但是过程中可能会出现重发时出现新的节点请求发送数据,导致冲突再次产生的情况。
如图9
所示,有N个节点第一次同时请求发送数据,被判定冲突,于是各个节点被随机延时准备重新发送。
在第二次发送时候,被要求延时的节点1发送数据时刚好遇上新的节点同时请求发送数据,导致节点1和新节点又必须重新进行一次延时再发送。
这种情况下,节点1产生两次冲突将会被“惩罚”第二次延时时间增加,使得效率降低。
实际情况中,请求总线上请求发送数据的节点多,但是各个节点发送数据的时间随机,很容易造成图例中的情况,多个节点的数据被多次退回延时重发,极大地降低效率。
2、改进构想
采取仲裁与CSMA/CD综合的方式加入优先级控制来判定主机。
步骤如下:
1)总线从闲转忙时,有多个节点发送数据(冲突),采用仲裁方式判定主机,如果能在第N(N≤7)个时钟周期判定出主机,则使用仲裁控制方式。
2)如果在第7个时钟周期仍不能判定主机,则采取CSMA/CD控制方式,所有节点停止发送数据,各个节点随机延迟后重新发送。
3)在第2步开始引入优先级控制,将第一次仲裁判定的所有节点设置为最高级节点,在CSMA/CD控制下所有处于最高级的节点开始按顺序作为主机发出数据。
4)第三步完成中或完成后如果产生冲突,控制系统分配第二次冲突节点的优先级,使之低于最高级,高于之后冲突节点的优先级。
总线中节点按照1-4的步骤,可以使节点按顺序作为主机发送数据而避免了拥塞。
如图10所示,设有多个节点发送数据而仲裁控制未能在7个是时钟周期内成功判定主机,设立仲裁控制中所有主机的优先级为第一级,然后转为CSMA/CD控制方式,在各个节点随机延时之后重发时遇上新节点请求重发,重发节点和新发节点数据相似度高,前7个时钟周期数据相同,但是节点1被设置为第一级,新节点被设置为了第二级,节点1的数据直接跳过仲裁或是CSMA/CD的判定作为主机优先发送,而新节点回到仲裁控制方式,开始进行新的判定。
改进的优点是避免了长时间仲裁导致拥塞的问题,同时加入优先级控制优化了CSMA/CD在负载增大时效率低下的问题,改进方案可以提高I²C通信的效率。
3、流程图
图 11
图8 多个节点发送相似数据导致仲裁时间长
图9 CSMA/CD控制下随机延时节点与新节点冲突
图10 加入优先级控制的仲裁与CSMA/CD综合方式。