结合单片机用汇编实现I2CBUS总线协议

出处:电子产品世界 发布于:2011-05-31 22:08:31

  I2C总线

    I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。PHILIPS公司早在十几年前就推出了I2C串行总线,用于连接微控制器及其外围设备。它具备多主机系统所需的包括裁决和高低速设备同步等功能高性能串行总线。

    I2C总线产生于在80年代,初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。

  I2C总线特征

  1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL;

  2、每个连接到总线的器件都可以通过的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器;

  3、它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;

  4、串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s;

  5、连接到相同总线的IC 数量只受到总线的电容400pF 限制。

  I2C总线硬件结构

  I2C串行总线有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线睥设备的串行数据SDA都接到总线的SDA线,各设备的时钟线SCL接到总线的SCL。典型的I2C总线结构如图1。

   

  为了避免总线信号的混乱,要求各设备连接到总线的输出端必须是开漏输出或集电极开路输出的电路结构。设备与总线的接口电路如图2所示。

  I2C总线数据传送率可达每秒十万位,高速方式可高达每秒四十万位。总线上允许连接设备数以总线上的电容量不超过400pF为限。

  I2C数据的传输

  在I2C总线传输过程中,如图3所示将两种特定的情况定义为开始和停止条件,开始和停止条件由主控器产生:录SCL保持“高”,SDA由“高”变为“低”时为开始条件,SCL保持“高”,SDA由“低”变为“高”是为停止条件。使用硬件接口可以很容易地检测开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样以便检测这种变化。

    只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变,在SDA线上的每个字节必须是8位,且传输的字节不限,但是每个字节必须有一个应答ACK。如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态,当接收器准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。I2C数据总线传达时序如图4。

  数据传送必须有应答。与应答对应的时钟脉冲由主控制产生,发送器在应答期间必须下拉SDA线。当导址的被控器件不能应答时,数据保护为高,接着主控制产生停止条件终止传输。

  I2C总线的应用

  下面就是用GMS97C2051(武汉力源公司产品,与AT89C2051兼容)的通用I/O口作为I2C总线接口,由软件控制实现数据传送,图5为其连线路图。

  在单主控器的系统中,时钟线仅由主控器驱动,因此可以用51的一根I/O线作为SCL信号线,将其设置为输出方式,由软件控制产生串行时钟信号,在实际系统中使用P1.3,另一根I/O线P1.2作为I2C总线的串行数据线,由软件控制在时钟的低电平期间读取或输出数据。系统传输数据的过程如下:先由单片机给出一个启始数据信号,接着送出要访问器件的7位地址数据,并等待被控器件的就答信号,当收到应答信号后,根据访问要求进行相应的操作。如果是读入数据,则数据线可一直设为输入方式,中间不需要改变SDA线的工作方式,在每读和主个字节,均应依次检测应答信号,如果是输出数据,则首先将SDA设置为输出方式,当发送完一个字节后,需要改变SDA线为输入方式,此时读入被控器件的应答信号,至此完成了一个字节的传送。当所有数据传输完比,应向SDA发出一个停止信号,结束该次数据传输。

    在一个串行数据通道中.I2C总线控制器可以配置成主模式或从模式。开发过程中,MPC8250的I2C总线控制器工作在主模式,作为主设备;与总线相连的I2C设备为AT24C01A型EEPROM,作为从设备。主设备和从设备都可以工作于接收和发送状态。总线必须由主设备控制,主设备产生串行时钟控制总线的传输方向,并产生起始和停止条件。

  以下用51汇编语言实现启始、停止、读、写、应答的程序。

  (1)启始位程序:

  ACK:CLR P1.3

  NOP

  NOP

  SETB P1.2

  NOP

  NOP

  NOP

  CPL P1.3 ;P1.3=1

  NOP

  NOP

  NOP

  DENGDAI:JB P1.2,DENGDAI RET

  (2)读数据程序:

  读字节可以在当前地址读(CURRENT READ),可以随机读(RANDOM READ),读出数据的一个字节后不用加应答信号。

  READ:PUSH 0EH

  CLR P1.4

  LCALL BSTART;START

  MOV A,#0A0H;SEND

  THE CONTROL BYTE

  LCALL SENDBYTE

  LCALL ACK

  MOV A,R1;SEND THE ADDRESS

  LCALL SENDBYTE

  LCALL ACK

  LCALL BSTART;START

  MOV A,#0A1H;SEND THE CONTROL BYTE

  LCALL SENDBYTE

  LCALL ACK

  LCALL READBYTE

  LCALL BSTOP

  POP 0EH

  RET

  送字节子程序:

  SENDBYTE:PUSH 0EH

  PUSH 00H

  MOV R0,#08H

  LOOP1:CLR P1.3

  NOP

  NOP

  RLC A

  MOV P1.2,C

  CPL P1.3; P1.3=1

  NOP

  NOP

  DJNZ R0,LOOP1

  POP 00H

  POP 0EH

  RET

  读字节子程序:

  READBYTE:PUSH 0EH

  PUSH 00H

  MOV R0,#08H;

  READ THE CONTENT

  CLR A

  LOOP4:CLR P1.3

  NOP

  NOP

  NOP

  SETB P1.3;P1.3=1

  MOV C,P1.2

  RLC A

  DJNZ R0,LOOP4

  MOV R2,A

  POP 00H

  POP 0EH

  RET

  (3)写数据程序:

  WRITE:PUSH 0EH

  CLR P1.4

  LCALL BSTART

  MOV A,#0A0H

  LCALL SENDBYTE;

  SEND CONTROL BYTE

  LCALL ACK

  MOV A,R1;SEND THE ADDRESS

  LCALL SENDBYTE

  CLALL ACK

  MOV A,R2;WERITE THE CONTENT

  LCALL SENDBYTE

  LCALL ACK

  LCALL BSTOP

  POP 0EH

  RET

  连续写的两个字节之间是要有10ms的延时。当然,也可以进行页写(PAGE WTITE),性连续写8个字节,每个字节后要一个应答信号。

  (4)停止位程序:

  BSTOP:CL的P1.3

  NOP

  NOP

  CLR P1.2

  NOP

  NOP

  NOP

  SETB P1.3

  NOP

  NOP

  NOP

  SETB P1.2

  RET


  
关键词:结合单片机用汇编实现I2CBUS总线协议

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

广告
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:
技术客服:

0571-85317607

网站技术支持

13606545031

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!