今日没事做,忽然想起来了IIC,所以决议回忆一下下,呵呵,忘记了不少,所以计划写出来,便于今后回忆。。。,这儿的比如就拿CAT24WCXX的EEPROM来解说吧~~(我也是边写文章,边写代码~~~累啊)
一、IIC总线简介
1.IIC总线的主要特点
IIC总线是一种简略、双向二线制同步串行总线。
(1)总线只要两根线,既串行时钟线(SCL)和串行数据线(SDA),这在规划中大大减少了硬件接口
(2)每个连接到总线上的器材都有一个用于辨认的器材地址,(留意,器材地址由芯片内部硬件电路和外部地址引脚一起决议,这样就避免了~~你懂得)然后树立了简略的主从关系,然后每个器材都能够作为发送器,也能够作为接纳器。
(3)同步时钟答应器材以不同的波特率进行通讯。
(4)同步时钟能够作为中止和重新启动串行口发送的握手电路(便是开端和完毕信号)。
(5)串行的速率不定(规范100kb/s。。。其它的就不必关怀了)。
(6)连接到同一总线的%&&&&&%只受400pf的最大总线%&&&&&%。
2.IIC总线的根本结构
机构图网上一推推的~~~
每个器材都有仅有的地址,器材两两之间都能够进行信息传送。当某个器材向总线上发送信息时,它便是发送器(也叫做主控制器),而当其从总线上接纳信息时,它又成为接纳器(从控制器)。在信息的传送过程中,主控制器发送的信号分为器材地址码、器材单元地址和数据3部分(这儿你完全能够联络EEPROM,它们三个的功能看姓名也能才出来,我就不写了)。
3.IIC总线的信息传送(这儿才它XX的是要点,上边的都是废话)
当IIC总线没有数据传送时,数据线(SDA)和时钟线(SCL)都为高电平。当主控制器向某个器材传送信息时,首要应向总线传送开端信号,然后才干传送信息(这儿信息包含地址啊,数据啊~~)当信息传送完毕时还应该传送个完毕信号,开端信号和完毕信号的规则如下:
~~~~~~~~~~开端信号:SCL为高电平时,SDA由高变为低的跳变,开端传送数据。
汇编的代码:
START:
当然然后便是c的代码了:
void IIC_start()
{
}
~~~~~~~~~~~完毕信号:SCL为高电平时,SDA由低变为高的跳变,完毕传送数据。
仍是先是汇编:(这儿就不注释了,太烦了)
STOP:
c文件:
void
{
}
开端信号和完毕信号之间的传送的是信息,信息的字节没有约束,但每个字节有必要为8位,高位在前,低位在后。数据线SDA上每一位信息状况的改动只能发生在时钟线SCl为低电平期间(这儿由于方才开端信号和完毕信号,SCl为高电平的期间SDA状况的改动现已被用来表明开端信号和完毕信号)。一起每个字节后边有必要承受一个应对信号(ACK),ACK是从器材接纳到8位数据后向主控制器宣布的特定的低电平脉冲,用来表明现已接纳到数据(留意是在SCL为高,检测SDA是否为低电平,之前SDA要拉高),假如主器材没有遭到应对信号,转到犯错处理~~
~~~~~~~检测应对位的程序:
汇编程序:
;回来值ACK=1时表明应达
CACK:
CEND:
void I%&&&&&%_ack()
{
}
主控器材每次传送的信息的第一个字节有必要是器材的地址码,第二个字节为器材的单元地址,用于完成挑选所操作的器材的内部单元,从第三个字节开端为传送的数据(这儿器材的地址码自己能够上网上搜,高四位为器材的类型码,最低位为读写位,其他三位你懂得,自己的设置位~~~,然后便是器材的单元地址,这个就看你的器材的存储器地址了,最终便是数据~~~呵呵)。