51单片机快速入门之 IIC I2C通信
51单片机快速入门之 IIC 总线通信
协议:
- 空闲时 SCL/SDA 为高电平
- SCL高时 SDA下降沿 为开始信号
- 开始信号之后:
SCL高电平时 SDA不能变化 ,
SCL低电平时 SDA才可变
SDA 传数据时 从高到低按位传输 SCL一个脉冲高电平对应一位数据
4.SCL高电平时 SDA上升沿 为停止信号
数据格式:
1.单字节格式:
开始信号>数据(高到低)>应答(ACK)信号接收方SDA低电平>停止信号
2.多字节格式:
开始信号>发送设备地址和读写方向>应答(ACK)信号>数据传输>应答(ACK)信号接收方SDA低电平>停止信号
I2C 元器件 24c02(E^2PROM)
读/写操作:
1.单字节写流程:
开始信号>7位地址(1010固 0A 0B 0C)+读1/写0>24C02回复ACK信号>发送一个字节>ACK信号>停止信号
2.页写流程(多字节):
开始信号>7位地址(1010固 0A 0B 0C)+读1/写0>24C02回复ACK信号>发第一个字节数据地址>ACK>第一个字节数据>ACK>第二个字节数据...>一直到停止信号 或者16字节
最多可一次写入2-16字节!
超出会自动从初始位置覆盖数据 17时覆盖第一个字节数据,之后还有数据往后递增覆盖
3.立即地址读操作:
N范围(0~255)00H~FFH
开始信号>7位地址(1010固 0A 0B 0C)+读1/写0>ack回复>读取一个字节数据(上次操作地址N+1的数据)>停止信号
N=255时 下一个跳转读取 0
4.选择读操作:
任选地址读
开始信号>7位地址(1010固 0A 0B 0C)+读1/写0>低0伪写操作>ack>N字节地址>从ack>开始信号>7位地址(1010固 0A 0B 0C)+读1/写0>读信号 1>从ack>获取N地址下的数据>停止信号
5.连续读操作:
立即地址读操作 连续
开始信号>7位地址+读1>读取FFH(255)为第一个数据,>主ACK>00H>主ack...直到出现主ack不回复 停下来>停止信号才结束本次读取
选择读操作 连续
开始信号>7位地址(1010固 0A 0B 0C)+读1/写0>低0伪写操作>ack>N字节地址>从ack>开始信号>7位地址(1010固 0A 0B 0C)+读1/写0>读信号 1>从ack>获取N地址下的数据>ack>N+1数据>ack .....直到停止信号