目录
I2C,两线式串行总线,可发送和接收数据
SCL和SDA都必须上拉
I2C协议
1. 空闲状态
SCL和SDA同时处于高电平
2. 开始信号
SCL为高电平期间,SDA由高电平转为低电平
3. 停止信号
SCL为高电平期间,SDA由低电平转为高电平
4. 应答信号ACK
发送器每发送8个字节,就在时钟脉冲9期间释放数据线SDA,由接收器反馈一个应答信号
拖接收器成功接收该信号,则拉低SDA,表示ACK
若没有成功接收该信号,则不拉低,SDA仍为高,表示NACK
5. 数据的有效性
SDA高电平表示1,低电平表示0,时钟线SCL高电平期间SDA应保持稳定
6. 数据传输
在SCL控制下传送数据
I2C的实现
定义SCL与SDA的引脚
SDA需要能够转变IO的方向
IIC_Init
II2_START![](https://img-blog.csdnimg.cn/d6858f2c87c94be687870e24adbf6bd3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ29kZUZvckNvZmZlZQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
IIC_Stop![](https://img-blog.csdnimg.cn/8e5dc1cb079b40d8bf0669cc6390fd3c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ29kZUZvckNvZmZlZQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
IIC_Wait_Ack![](https://img-blog.csdnimg.cn/92972cb64b514c14bb5a770368eee5d8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ29kZUZvckNvZmZlZQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
IIC_Ack
IIC_NAck ![](https://img-blog.csdnimg.cn/fa6aeda9717c4d97894dcf9ef31b1107.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ29kZUZvckNvZmZlZQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
IIC_Send_Byte
IIC_Read_Byte
如果读到1,则最低位+1
通过I2C操作24C02
初始化
写一个字节
地址是2个字节u16,高8位是一个字节,即高字节,低8位是一个字节,即低字节
写入的是一个字节,8位,u8
读一个字节
写入读出多个地址