https://blog.csdn.net/ctyqy2015301200079/article/details/83830326  (此文章可能有误)

从目前来看,所有读写操作(包括ACK的读写)都是CLK=0,保持, 读取SDA后,CLK=1, 保持

起始信号和终止信号,都是先保持CLK=1,  然后前者SDA从1变为0, 后者SDA从0变1

其实CLK=0的作用代表要读写了, CLK=1的作用为恢复普通态, TODO。。。 占从设备角度看待是如何接受主设备的CLK命令的

起始信号

  SDA,SCL设置为输出模式

  SDA=1, SCL=1, 保持

  SDA=0, 保持

终止信号

  SCL=0, SDA=0, 保持

  SCL=1, 保持

  SDA=1, 保持

  SDA, SCL设置为输入模式  

  // 有些人的描述为 SCL高电平时,SDA由低变高  

单字节读

  SDA设置为输入模式

  循环8次:

    SCL=1, 读SDA, 保持

    SCL=0, 保持

  从设备在SCL=0时可能已经准备好了SDA给主设备去读取

主控器发送ACK (读入一个字节后需要发送ACK)

  SDA设置为输出模式

  SCL=0, SDA=0, 保持

  SCL=1, 保持

  SCL=0, 保持

单字节写

  SDA设置为输出模式

  循环8次:

    SCL=0,保持

    写SDA, SCL=1, 保持

  最后

    SCL=0

  此处,输出SDA后, 怀疑是保持了一段时间, 再设置SCL=1,

  实际上输出SDA可能不需要保持一段时间再设置SCL=1,因为SCL=1在SDA之后设置的,SCL=1时,从设备才开始读入主设备设置的SDA

主控器读取ACK (写入一个字节后需要读ACK)

  SDA设置为输入模式

  SCL=1, 读SDA, 保持

  SCL=0, 保持

(这里可能是SCL=0, 读SDA, 保持,然后再SCL=1保持)

  此处写字节的最后一个位写完之后, 主设备SDA更换为读入模式, 而从设备马上就拉低了SDA代表收到了写入的字节

读数据流程:

  1. 先发送开始信号S

  2. 再发送从设备地址(7位,bit7~bit1), 再发送读标记1 (bit0为1代表读数据), 再读入ACK (用于判断从设备是否收到了地址)  

  3. 读入一个字节, 再发送ACK(告诉从设备已经读入了该字节)

  4. 重复3去读取多个数据 (其实在3之前可能要写入一个寄存器地址或者寄存器的起始,之后才是读入多个数据)

  5. 发送停止信号P

写数据流程

  1. 先发送开始信号S

  2. 再发送从设备地址(7位,bit7~bit1), 再发送读标记0 (bit0为0代表写数据), 再读入ACK (用于判断从设备是否收到了地址)

  3. 写入一个字节, 再读入ACK(用于判断从设备是否收到了此字节)

  4. 重复3去写入多个数据 (通常是写入两个数据, 一个寄存器地址和一个数据, 但是有些从设备定义的应用协议为寄存器起始地址 + 一大堆数据)

  5. 发送停止信号P

  

硬件协议之i2c的更多相关文章

  1. 硬件GPIO,UART,I2C,SPI电路图

  2. I2C总线通讯协议

    I2C总线通讯协议 1. I2C总线简介 I2C是Inter-Integrated Circuit的简称,读作:I-squared-C.由飞利浦公司于1980年代提出,为了让主板.嵌入式系统或手机用以 ...

  3. SPI、I2C、UART三种串行总线协议的区别

    第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous R ...

  4. SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)

    SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...

  5. 转载:关于STM32硬件I2C读写EEPROM代码实现原理的理解与总结

    http://home.eeworld.com.cn/my/space-uid-716241-blogid-655190.html 一.I2C协议简介 I2C是两线式串行总线,用于连接微控制器及其外围 ...

  6. I2C的协议层和物理层

    I2C 协议简介 I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART.CAN 等通讯协议的 ...

  7. i2c协议简要分析(转载)

    声明 本文大部分内容为转载,因此标定为转载 源地址: http://www.cnblogs.com/zym0805/archive/2011/07/31/2122890.html http://blo ...

  8. I2C的基本概念和协议

    概念   I2C总线是由Philips公司开发的一种简单.双向二线制同步串行总线.它只需要两根线即可在连接于总线上的器件之间传送信息.  主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任 ...

  9. I2C总线和S5PV210的I2C总线控制器

    一.什么是I2C通信协议? 1.物理接口:SCL + SDA (1)SCL(serial clock):时钟线,传输CLK信号,一般是I2C主设备向从设备提供时钟的通道. (2)SDA(serial ...

  10. Linux I2C总线设备驱动模型分析(ov7740)

    1. 框架1.1 硬件协议简介1.2 驱动框架1.3 bus-drv-dev模型及写程序a. 设备的4种构建方法a.1 定义一个i2c_board_info, 里面有:名字, 设备地址 然后i2c_r ...

随机推荐

  1. i春秋Hash

    打开题目页面是一个超链接 先查看源码得到一段信息 没什么,这只是超链接跳转的信息 点击跳转到下一个界面 提示我们如果我们的传入不是123,123也就是key了,在上面的url就可以看到 如果key!= ...

  2. Vue使用Element表单校验错误Cannot read property ‘validate’ of undefined

    在做注册用户的页面使用表单校验一直提示Cannot read property 'validate' of undefined错误,其实这个错误的提示根据有多种情况,比较常见的就是 ref 的名字不一 ...

  3. Python: 对程序做性能分析及计时统计

    1.对整个程序的性能分析 如果只是想简单地对整个程序做计算统计,通常使用UNIX下的time命令就足够了. (base) ➜ Learn-Python time python someprogram. ...

  4. Spring Boot+Mybatis:实现数据库登录注册与两种properties配置参数读取

    〇.参考资料 1.hutool介绍 https://blog.csdn.net/abst122/article/details/124091375 2.Spring Boot+Mybatis实现登录注 ...

  5. web框架推导 wsgiref模块 jinja2模板语法 django框架简介 django基本操作

    目录 纯手撸web框架 web框架的本质 手写web框架 存在的问题 基于wsgiref模块 基本介绍 推导流程 代码封装优化 总结 动静态网页 jinja2模块 前端.后端.数据库三者联动 推导流程 ...

  6. VSCode编辑器极简使用入门

    VSCode(Visual Studio Code)是一款开源.跨平台.轻量级的代码编辑器,具有非常丰富的插件生态.他本身就是JavaScript + Electron ( /ɪˈlektrɒn/电子 ...

  7. python 之定时任务(schedule)

    import schedule import time def job(): print("定时通报...") # 定义一个叫job的函数,函数的功能是打印'定时通报...' sc ...

  8. Spring中使用@RequestBody注解接收的实体类中的某些参数为null

    1.问题描述 我写完一个接口,在用postman测试的时候,发现其中有一个参数cEnterpriseId明明是有值的,但接口controller接收到的该参数为null,但其他参数都不为null的. ...

  9. WCF 服务容器化的一些问题

    背景 目前项目当中存有 .NET Framework 和 .NET Core 两种类型的项目,但是都需要进行容器化将其分别部署在 Windows 集群和 Linux 集群当中.在 WCF 进行容器化的 ...

  10. [OpenCV实战]46 在OpenCV下应用图像强度变换实现图像对比度均衡

    本文主要介绍基于图像强度变换算法来实现图像对比度均衡.通过图像对比度均衡能够抑制图像中的无效信息,使图像转换为更符合计算机或人处理分析的形式,以提高图像的视觉价值和使用价值.本文主要通过OpenCV ...