中科因仑“3+1”工程特种兵精英论坛
标题: IIC总线 [打印本页]
作者: 伊海 时间: 2015-3-23 14:42
标题: IIC总线
I2C总线由数据线SDA和时钟线SCL两条线构成通信线路。既可以用来发送数据又可以接收数据,可以在单片机与I2C器件进行双向数据传递。总线在空闲状态下保持高电平,由于总线和I2C器件是线与的关系因此连接到总线上的I2C器件一旦有低电平输出都将把总线拉为低电平。在主从工作方式中单片机与I2C外围器件进行数据传送时是单片机发出起动信号,产生时钟信号,最后发出停止信号。
总线空闲:数据线SDA和时钟线SCL都保持高电平
起始信号:时钟信号保持高电平期间数据线电平从高到底的跳变
停止信号:时钟信号保持高电平期间数据线电平从低到高的跳变
数据的有效状态:
SCL高电平期间,SDA线上的数据才有效,SDA上的数据必须在SCL为低电平这个时刻才能改变,以传输下一字节的
数据。每传送完一个字节就会有一个时钟的暂停。
应答信号:
被寻址到的设备接收到一个字节后都必须产生一个应答信号在SCL高电平期间接受设备把SDA拉为低电平就可以产生
一个应答信号。
1. 任何将数据传送到总线的器件作为发送器,任何从总线接收数据的器件作为接收器,数据传送是由产生时钟信号和发出起动停止信号的主器件控制的。
2. 只有在总线空闲时才允许启动数据传送
3. 数据传送过程中当时钟为高电平时数据必须保持稳定,不允许有跳变。时钟线为高电平时,数据线的任何电平变化将被看做总线的起始或停止信号
AT24C02的读写操作
因为AT24C02支持I2C总线的标准因此读写数据要遵守I2C总线的规定。
号结束连续读操作
寻址:
单片机发送起始信号后,接着就要发送它要寻址的器件的地址,AT24C02的地址高四位固定为1010,接下来三位为器件的地址。
最后一位是读写操做(为0时表示对芯片进行写操作,为1时表示对芯片进行读操作。)
字节写操作:
AT24C02的要写的字节地址,单片机在接受到应答信号后再发送数据到被寻址的单元中,AT24C02再次应答并在单片
机产生停止信号后开始数据的檫写操作,在写过程中不再应答单片机的任何请求。
立即读操作:
单片机发送起始信号和AT24C02地址信息(R/W为0)给AT24C02,AT24C02发出一个应答信号给单片机,单片机接收到后,
AT24C02发送数据给单片机,这时单片机不需要发送应答信号,但要产生一个停止信号,这时AT24C02停止传输数据。
选择性读操作:
单片机发送起始信号和AT24C02地址信息(R/W为1)给AT24C02,从器件响应后,单片机再发送要读取的字节的地址,AT24C02
响应后,单片机再重新发送起始信号和从器件的地址(R/W此时为1),AT24C02响应后然后串行输出指定地址的8位字节数据到
SDA线上,单片机不发送应答信号但发送一个停止信号,此时AT24C02停止传输数据。
连续读操作:
不同的是AT24C02发送完一个字节数据后单片机要产生一个应答信号,接着AT24C02地址会自动加1,然后再发送,当要停止时,
单片机产生一个停止信号结束连续读操作
作者: 伊海 时间: 2015-3-23 14:42
由于51单片机没有IIc总线的协议,但是可以控制单片机模拟出来IIC的时序,从而与从器件进行数据传输的操作
总结:
模拟起始信号:scl在高电平期间(持续时间4us多),sda有一个从从高到低的跳变,且低电平要保持4us多
模拟停止信号:scl在高电平期间(持续时间4us多),sda有一个从从低到高的跳变,且高电平要保持4us多
模拟应答信号: scl在高电平期间(持续时间4us多), 先释放sda总线,检测从器件在scl高电平期间是否有低电平响应
单片机向从器件写字节:scl在低电平期间,让sda线上的数据变化,之后scl置高,数据保持稳定从器件接收数据
单片机从器件读字节:sda线先释放,scl低电平期间准备接收从器件的数据,置scl为高使数据稳定有效同时读取。
下面这个是验证从AT24C02中读出一个字节数据并送至发光二极管显示从而验证读出的数据是否正确。
首先当然是写一个字节到AT24C02芯片中,然后读出来。
原理图
AT24C02的A2,A1,A0我都接的是0,所以寻址时器件的地址为1010 0000,即0xa0
因为向AT24C02中写入的是0x00即 0000 0000,读出送至P1口,结果应该是发光二极管全点亮。
仿真如下:
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) |
Powered by Discuz! X3.4 |