I2C的定义
I2C是由飞利浦公司(没错就是你刮胡刀的那个飞利浦)开发的两线式串行同步总线(串口的通信速率是BPS波特率)
通信使用两根线 时钟线 数据线
一个时钟周期传输一位数据
SCL: 时钟线 (用于区分异步)
SDA: 数据线【
IIC的速率:标准模式 100Kb/s
快速模式 400Kb/s
高速模式 3.4Mb/s
超高速模式 5Mb/s
了解IIC总线的连接方式 —- 下面参考图
uart和IIC的的对比
UART 一根数据线 tx rx
由于没有时钟线, 没有办法调节通信时序, 所以通信的时序需要在通信之前就协商好
低位先出
IIC 两根线 SCL SDA
由于有时钟线, 所以将来可以自己调节读写时序
高位先出
了解通信的辅助信号:
start data stop ……
设备有主从之分
主设备需要知道从设备的设备地址
主设备 —》 从设备
《—
接受/发送
时序
空闲状态下 SDA 和 SCL上应该呈现高电平
开始信号: SCL处于高电平期间, SDA由高到低产生一个下降沿
终止信号: SCL处于高电平期间, SDA由低到高产生一个上升沿
开始信号和终止信号都由cpu(主设备)产生
数据位: 一次传输8bit 在SCL处于低电平期间, 将数据放在SDA上
ack: 应答信号,第9个时钟周期 SCL处于高电平期间 接收方将SDA拉低 (低电平保持一个时钟周期)
nack: 应答信号,第9个时钟周期 SCL处于高电平期间 接收方将SDA拉高(拉高电平保持一个周期)
设备地址+读写位
高位先出 低送高取 –》低送高取,低电平发送方发,高电平接收方取,画图还是依旧画不按照这句
R/W非—》1电平读,0电平写

图中的start错了并不独占一个时钟周期,只要体现出下降沿就可以
实际应用
大多数I2C从设备(如EEPROM、传感器)内部有一个地址指针寄存器,用于指示当前操作的数据位置。
工作原理 写地址阶段:主设备发送寄存器地址(如0x00),从设备收到后将该地址存入指针寄存器,相当于 设置数据读取的起点。 读数据阶段:从设备根据指针寄存器的值返回对应地址的数据,并在每次读取后自动递增指针(连续读时)。
说白话就是当你用I2C总线操作外设寄存器时,写只需要写一遍,读需要先写在读。














暂无评论内容