原创 IIC总线之原理及应用

2010-5-14 22:36 5607 10 12 分类: MCU/ 嵌入式

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

IIC总线之原理及应用


IIC总线是Philips公司推出的串行总线标准,它只需要数据线(SDA)和时钟线(SCL)就能实现完善的全双工数据传输,即CPU与各个外围器件仅靠这两条线来进行信息交换。总线上扩展的外围器件以及外设接口通过总线来寻址,是一种具备总线仲裁和高低速设备同步等功能的高性能多主机总线。所有挂接在IIC总线上的器件和接口电路都应该具有IIC总线接口,而且要依靠SDA发送的地址信号来寻址,不需要片选线。这样一来,系统的组成就非常简单了,芯片管脚的数量少,成本也低,因此IIC总线得到了非常广泛的应用。


下图是TI公司的IIC解决方案中一个典型的IIC总线系统结构,可知IIC总线上可以挂接多个器件,但是其中每个器件都必须支持IIC总线通讯协议。


点击看大图


而且所有的外围器件都需要有唯一的7位地址,它由器件地址(4位)和引脚地址(3位)两部分组成。


(1)器件地址:IIC器件在出厂时就已经确定下来了,例如AT24C系列的串行EEPROM的器件地址为1010,用户是不能更改的;


(2)引脚地址:由外围器件的地址引脚(A2A1A0)来确定,由用户根据需要来设置。


点击看大图


D7~D1位组成从机的地址,D0位是数据的传送位,“0”表示写操作,“1”表示读操作。


我这次调试的IIC器件是AT24系列的串行EEPROM,它的型号比较多,我手里用的是AT24C08这个芯片,它使用起来占用单片机的I/O端口很少,硬件连接也比较简洁,但是为了调通这个芯片,本人也是费了不少的心思!


IIC总线在数据传输过程中共有三种信号,即起始信号、终止信号和应答信号。分别如下图所示:


1Start and Stop Definition:


        1fd7c010-e8a3-4bca-9b93-47f18f69cc0e.jpg


析:起始信号是在时钟线SCL为高电平期间,数据线SDA上的下降沿信号表示,只有起始信号出现后,才可以进行后续的IIC总线寻址或数据传输等。在起始信号产生后,总线就处于被占用的状态。而且随后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W非),用“0”表示主机发送数据,“1”表示主机接收数据。


终止信号是在时钟线SCL为高电平期间,数据线SDA上的上升沿信号表示,只要终止信号一出现,则所有的IIC总线操作都立即结束,且释放总线控制权。在终止信号产生后,总线就处于空闲状态。


2Output Acknowledge:
        27d90529-ba71-49b7-8d69-6a2ae0f9fd92.jpg


析:应答信号用于表明IIC总线数据传输的结束。IIC总线传输数据时,一个字节数据传送完毕后都必须由主器件产生应答信号。主器件在第9个时钟位上释放数据总线SDA,使其处于高电平状态,此时从器件输出低电平拉低数据总线SDA作为应答信号。


注:我这个代码利用了AT24C08可以掉电保持数据的功能,设置了一个标准的电子时钟,在掉电重启之后(即使重新烧入程序),系统仍然会按照掉电之前的时间继续Moving


 


附录:


(1)源代码:    doc


 


(2)几个很好的参考资料


AT24C系列EEPROM数据手册:    https://static.assets-stash.eet-china.com/album/old-resources/2010/5/14/021e4034-5b28-4f47-b134-54f4bcdfcfdf.rar

IIC总线规范说明:       https://static.assets-stash.eet-china.com/album/old-resources/2010/5/14/0fe6fe7d-f377-47c2-938f-1c34588ffa12.rar


TI公司的IIC Guide:      https://static.assets-stash.eet-china.com/album/old-resources/2010/5/14/d56423f5-3fc0-47a3-9281-9895b44e4ed9.rarhttps://static.assets-stash.eet-china.com/album/old-resources/2010/5/14/35f0c27d-fd67-403c-b688-a430fd065851.rarhttps://static.assets-stash.eet-china.com/album/old-resources/2010/5/14/ef671f34-cc6f-4caa-b204-e6cda46aa1db.rar


 

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户267345 2011-7-24 14:09

请问,,支持iic的器件都有那些啊

用户315600 2010-12-17 10:04

这是我资料啊 正好公司要用到这方面的东西,谢谢分享
相关推荐阅读
用户1528479 2011-04-12 21:50
设计第一个六层板所得到的一个深刻体会
        今天中午,由于确实有点困,于是乎仰躺在座椅上眯了半个小时的眼,睡眼朦胧中,好消息随即到来——我的第一个六层板从深圳寄到长沙了!而且元器件都已经由深圳那边的人焊接好了,拆开包装袋一看,简...
用户1528479 2011-03-25 15:28
DDR2 SDRAM×32布局、布线经验谈
最近忙于一块以CycloneIII为核心主控芯片的六层板设计,开发环境是Capture+Allegro+CAM350,从原理图修改到PCB的布局、布线这整个过程中我遇到了相当多的问题,值得庆幸的是...
用户1528479 2011-03-25 13:30
DDR2 SDRAM×32布局、布线经验谈
DDR2 SDRAM×32布局、布线经验谈最近忙于一块以CycloneIII为核心主控芯片的六层板设计,开发环境是Capture+Allegro+CAM350,从原理图修改到PCB的布局、布线这整个过...
用户1528479 2011-02-27 19:48
使用Cadence16.2过程中遇到的一些问题(附解惑方法)
使用Cadence16.2过程中遇到的一些问题(附解惑方法) 很久没有写博文了!确实有点过意不去。最近两个多月以来,由于公司的需要,我不得不学习Cadence16.2的使用方法——用它来画高速板子...
用户1528479 2011-02-27 19:46
使用Cadence16.2过程中遇到的一些问题(附解惑方法)
使用Cadence16.2过程中遇到的一些问题(附解惑方法)很久没有写博文了!确实有点过意不去(呵呵,这意味着自己最近懈怠了)。最近两个多月以来,由于公司的需要,我不得不学习Cadence16.2的使...
用户1528479 2011-02-12 09:15
数字旋转编码开关的原理及使用方法
在电子产品设计中,经常会用到旋转编码开关,比如数码电位器等,它的英文名翻译过来就是Rotary Encoder Switch。在写这个元件的驱动程序之前,我google、baidu了一些它的使用说明资...
EE直播间
更多
我要评论
2
10
关闭 站长推荐上一条 /3 下一条