陈祥生
摘要:简要介绍了 I2C 总线及其接口电路, 分析了I2C 总线的寻址方式和工作时序, 通过MS89C51单片机的I/O口线模拟,利用C语言程序对I2C 总线的数据传输过程进行了模拟编程。
关键词: I2C 总线; 单片机; 接口; 器件地址; 串行
中图分类号:TP34 文献标识码:A 文章编号:1009-3044(2015)14-0213-03
Abstract: I2C-bus and the interface circuit are briefly introduced in this paper. The paper also makes an analysis of the I2C bus addressing mode and working sequence. First ,we achieve the function of I/O port simulation on the MS89C51 MCU, then we make a simulation programming of I2C bus data transmission process by using the C program language.
Key words:I2C-bus; microcompute; interface; device address; serial
1 概述
I 2 C总线是Philips公司推出的一种两制串行数据传输总线,由串行时钟线SCL和串行数据线SDA组成,SCL线传送时钟信号,SDA线传送数据地址信号,实现全双工同步数据传送。在I2C总线中,器件地址采用硬件设置方法 ,通过软件寻址,不需要使用器件的片选线寻址,从而可以更简单的扩展硬件系统。I2C总线具有严格的规范,随着I2C总线技术的成熟,具有I2C总线接口的外围器件越来越多,它已经广泛应用于家电、智能仪器仪表和工业测控等领域。下面就I2C总线技术及其C语言模拟编程进行探讨。
2 I2C总线技术
2.1 I2C总线
I2C总线通过2根线(SDA,SCL)即可实现完善的全双工同步数据传送,I2C总线有单主模式和多主模式两种模式。不过,多主模式(即系统中有多个I2C总线接口的单片机)可能会出现多主竞争的复杂状态,所以在单片机应用系统中常用单主模式。I2C接口芯片是把I2C协议植入芯片的I/O接口,使用时直接接到总线上,这一特点极大的方便了用户设计应用系统。是否选中I2C接口芯片不需要片选信号,而是由主器件发出的I2C从地址决定。而且I2C器件从地址已经由I2C总线委员会实行统一编制,器件出厂时就已给定。例如:I2C总线的EEPROM AT24CXX的器件地址为1010,点阵式LCD驱动器PCF8578/79的器件地址为0111。不带I2C总线接口的单片机扩展I2C接口芯片电路示意图如图1所示。
2.2 I2C总线的寻址方式
I2C总线上连接的所有外围器件都称为总线上的节点,其中由单片机或MCU组成的节点称为主节点,其余节点称为从节点。当I2C工作时,任何一个主节点都能实现总线控制,当某个主节点控制了总线,它就成了主控制器。系统中的所有节点都采用器件地址或引脚地址的编址方法。主控制器采用纯软件寻址方法对任何节点进行寻址,若有地址冲突可改变地址引脚的电平设置来解决。I2C总线规定起始信号后的第一个字节为寻址字节,规定了器件地址、器件的引脚地址及数据的传送方向,寻址字节SLA的格式如表1所示。
起动信号:时钟线SCL为高电平,数据线SDA出现由1到0的下降沿,并且SDA的下降沿与SCL的下降沿至少间隔4.7us。
停止信号:当时钟线SCL为高电平时,数据线SDA出现由0到1的上升沿,并且SCL的上升沿与SDA的上升沿至少间隔4.7us。
应答信号:总线上第9个时钟脉冲是应答位。在时钟的高电平期间,相应SDA低电平时为“应答”信号,高电平时为“非应答”信号。
数据变换规定 : 数据传输期间,SCL=1时,SDA上的信号必须保持稳定,只有SCL=0时才允许SDA上的信号发生变化。因此,单片机用应该在SCL=1时读SDA线上的数据,在SCL=0时将数据传送到SDA线上。
数位传输顺序:传送数据以字节为单位,且高位在前,低位在后。当I2C总线启动后, 不限制传送的字节多少,但每传一个字节后,接收方必须回应一个应答位。也就是说每传输一个字节需要9个时钟,前8个对应8个数据位,第9个时钟对应应答信号。
3 I2C总线模拟C语言编程
根据上述分析,假设利用51系列单片机,晶振频率为11.0592MHz,并且I2C总线的SDA、SCL分别接在P1.0、P1.1引脚,即有如下定义:
4 结束语
I2C总线提供了一种完善的集成电路间的串行总线扩展技术,以MCS-51单片机普通 I/O 接口通过软件编程,模拟I2C总线时序,使得单片机外围的接口电路有了更多的选择,如带有I2C总线接口的时钟芯片、存储芯片、D/A转换等。而且其硬件接口简单, 大大简化了电路设计,同时还可以节省单片机I/O接口资源,应用十分广泛。但是,需要注意的是:由于I2C总线为串行扩展总线,所以不适用于实时数据采集等速度要求较高的系统。
参考文献:
[1] 石宗义.I2C总线时序分析及其模拟[J]. 太原理工大学学报,2004, 35 (1): 53-55.
[2] 赵辉,董德存.I2C总线技术及其应用实例[J]. 微型电脑应用,2005, 21(4):61-62.
[3] 李文华. 单片机应用技术(C语言版) [M]. 大连: 大连理工大学出版社, 2014:225-227.
[4] 庞媛媛,崔建明. 一种I2C总线接口设计在EEPROM的应用[J]. 电脑知识与技术,2011,7(30):61-62.