初识I2C
SCL是时钟线,SDA是数据线。在总线空闲状态的时候,这两根线一般为上拉电阻拉高,保持高电平
I2C总线上的设备存在主(Master)/从(Slave)之分。
同时每一个设备既可以当作主设备也可以是从设备
每个设备都必须对应一个唯一的地址
意味着可以存在多个主设备,但是同时工作的只能有一个
I2C是通过地址来区分不同的设备的
I2C的通信方式为半双工的方式,因为只有一跟SDA线,所以同一时间只可以实现单向通信
信号起始\停止
默认状态下SDA和SCL都是高电平保持
起始
当某一设备开始触发的时候,SDA会进行降压处理(下降沿触发),SCL高电平保持,代表当前设备传输开始
终止
当SCL为高电平保持,SDA为上升沿触发的时候,判断为传输停止
中间过程
起始条件产生之后,总线位于忙状态,由负责本次数据传输的主从设备独占,其他I2C器件无法访问总线。
而在停止条件产生之后,本次数据传输的主从设备将释放总线,总线再次位于空闲状态。
数据的实际传输
- 设备间是 按照SCL线上的每个时钟脉冲周期 为单位 在SDA线上 以 bit 传输数据
是一种 串行传输
数据传输以字节(8个bit一组)为单位,高位优先发送;
高位优先:
比如要发送0x11,转换为二进制为00010001,高位低位如下图所示
高位优先传输数据从示波器上采样之后看到的第一个数据为高位。
同时,在设计上是区分为发送方和接收方,并且在协议上要求握手。
-
发送方传输完一个字节之后,接收方拉低SDA线,在总线上产生一个 bit 的ACK信号,表示正确应答,此时才认为一个字节真正的完成传输。如果接收方不执行拉低SDA线的操作,则总线上产生的是一个 bit 的NACK信号,则表示接收方返回错误或者无响应
-
主设备在发送传输有效数据之前要先指定从设备的地址,大多数从设备的地址是7位的,协议规定再给地址添加一个最低位用来表示接下来数据传输的方向
0表示主设备向从设备写数据
1表示主设备向从设备读数据
发起的第一个单元标识**地址 **
下面这个图是一个完整的粒子:
- 由主机开始,在SCL位高点平的时候,SDA由高到低切边,形成开始信号
- 接着是7位地址位和1位读写标志,这里7位地址表示0111100,即0x3c;最后一位为0表示写操作。
- 接着在下一个时钟,主机以高电平状态释放SDA;这时从机相应,将SDA拉低表示ACK;
- 接着是两个8位数据00101110与响应,即0x2E
- 其他的数据和最后的停止位,图中未显示。
暂时更新这么多,如果感觉帮助到了你,我很开心o( ̄▽ ̄)ブ
标签:SCL,高电平,总线,SDA,I2C,初始,设备 From: https://www.cnblogs.com/OnHaiping/p/18307543