Android的i2c协议笔记

本文详细介绍了I2C通信协议的基本原理,包括其半双工特性、两条总线(SCL和SDA)、四种基本信号(起始、应答、非应答、结束)以及数据传输规则。通过实例解析了起始和停止信号的生成,应答与非应答信号的反馈,以及数据有效性的条件。此外,还探讨了数据传输的步骤和时序,帮助读者理解I2C协议的工作机制。
摘要由CSDN通过智能技术生成

一、I2C的两条总线

I2C 总线是一个半双工通信协议,I2C上有两条总线,一条为时钟线(SCL),一条为数据线(SDA),这两条线默认被拉高。原因是I2C的设计者设计的原理就让这两条线只能被拉低,而不能被拉高。

二、通讯方式

在 I2C 协议中有四种信号:起始信号、应答信号、非应答信号和结束信号。当 SDA 和 SCL 同时为高电平时,总线处于空闲状态。
I2C 的协议定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。其实说这么多我们只需要知道他是怎么工作的就好了。
我们按照步骤来:

  1. 首先要找到从机的地址(起始信号)
  2. 从机应答(应答信号、非应答信号)
  3. 对从机的地址进行操作
  4. 结束通讯(结束信号)

2.1 I2C的通讯启止

起始信号:在 SCL 为高电平时,SDA 从高电平变为低电平。
停止信号:在 SCL 为高电平时,SDA 从低电平变为高电平。
在这里插入图片描述

2.2 I2C的应答信号和非应答信号

数据发送方每发送一个字节(8位),需要接收方反馈一个应答信号或非应答信号。非应答信号一般会在数据接收失败或主机数据接收完成回复一个非应答信号。
应答信号(ACK):第 9 个脉冲带来之前将 SDA 设置低电平,并且在时钟线为高电平期间保持 SDA 为低电平。

非应答信号(NACK):第 9 个脉冲带来之前将 SDA 设置高电平,并且在时钟线为高电平期间保持 SDA 为高电平。

在这里插入图片描述

2.3 数据的有效性

  1. I2C在进行数据传送时,SCL为高电平时,SDA上的数据必须稳定。
  2. 只有SCL为低电平时,SDA上的数据才允许变化。

在这里插入图片描述

2.4 数据的传输

I2C在进行数据传输时的一般规则如下:

  1. 发送到SDA 线上的每个字节必须为8 位,每次传输可以发送的字节数量不受限制,第八位为读写位。
  2. 首先传输的是数据的最高位(MSB),每个字节后必须跟一个响应位,所以,一帧数据共有9位,也就是说第九位为应答位。
  3. 如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL 保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL后数据传输继续。

在这里插入图片描述

2.5 完整的通讯信号图

这是通过i2ctool命令获取eeprom的地址上的一个值的波形图:

在这里插入图片描述
我自己画了一个简图:

在这里插入图片描述

从图上可以看出从机地址(需要有移一位,所以 从机地址位 0101 0000 转为16进制就是 0x50 )
至于后面16位地址是记不住多少了,但是可以通过波形看出来,后面的数据也可以看出来,我画的图不一定准确,所以你们可以自己试一试。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永不秃头的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值