硬件协议之i2c
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的更多相关文章
- 硬件GPIO,UART,I2C,SPI电路图
- I2C总线通讯协议
I2C总线通讯协议 1. I2C总线简介 I2C是Inter-Integrated Circuit的简称,读作:I-squared-C.由飞利浦公司于1980年代提出,为了让主板.嵌入式系统或手机用以 ...
- SPI、I2C、UART三种串行总线协议的区别
第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous R ...
- SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)
SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...
- 转载:关于STM32硬件I2C读写EEPROM代码实现原理的理解与总结
http://home.eeworld.com.cn/my/space-uid-716241-blogid-655190.html 一.I2C协议简介 I2C是两线式串行总线,用于连接微控制器及其外围 ...
- I2C的协议层和物理层
I2C 协议简介 I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART.CAN 等通讯协议的 ...
- i2c协议简要分析(转载)
声明 本文大部分内容为转载,因此标定为转载 源地址: http://www.cnblogs.com/zym0805/archive/2011/07/31/2122890.html http://blo ...
- I2C的基本概念和协议
概念 I2C总线是由Philips公司开发的一种简单.双向二线制同步串行总线.它只需要两根线即可在连接于总线上的器件之间传送信息. 主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任 ...
- I2C总线和S5PV210的I2C总线控制器
一.什么是I2C通信协议? 1.物理接口:SCL + SDA (1)SCL(serial clock):时钟线,传输CLK信号,一般是I2C主设备向从设备提供时钟的通道. (2)SDA(serial ...
- Linux I2C总线设备驱动模型分析(ov7740)
1. 框架1.1 硬件协议简介1.2 驱动框架1.3 bus-drv-dev模型及写程序a. 设备的4种构建方法a.1 定义一个i2c_board_info, 里面有:名字, 设备地址 然后i2c_r ...
随机推荐
- 【OpenStack云平台】Packmaker 集群
个人名片: 因为云计算成为了监控工程师 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying Packmaker 集群 1.1 安装软件包 1.2 Corosync 基本配置 1.3 启 ...
- i春秋Hello World
打开只有一句hello world,直接查看源码,发现一个flag.xmas.js文件 试试直接访问http://106.75.72.168:9999/flag.xmas.js http://106 ...
- (GCC) gcc编译选项 -Wl, -start-group,whole-archive,-Wl, Bstatic
1. start-group 编译选项 假设程序x依赖三个静态库:libX1.a.libX2.a和libX3.a,而libX2.a又依赖libX1.a,libX3.a依赖libX2.a和libX1.a ...
- Entity Framework Core 7中高效地进行批量数据插入
因为之前的版本中,EF Core无法实现高效地批量插入.修改.删除数据,所以我开发了Zack.EFCore.Batch这个开源项目,比较受大家的欢迎,获得了400多个star. 从.NET 7开始,微 ...
- JavaEE Day11 BootStrap
之前:前端知识 HTML+CSS+JavaScript 不好写 今日内容:前端的开发框架,内部定义了丰富的CSS样式和JS代码,只需要拿来用就行 会用即可 一.BootStrap ...
- 【每日一题】【初始节点初始化,前一个为空】2022年1月7日-NC78 反转链表
描述给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头. 数据范围: n\leq1000n≤1000要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) . 如当 ...
- mysql基础问题三问(底层逻辑;正在执行;日志观察)
背景:经常面试会遇到且实际工作中也会应用到的三个场景: 目录: 一.mysql查询时的底层原理是什么? 二.如何查看正在执行的mysql语句? 三.如何观察mysql运行过程中的日志信息? - - - ...
- 如何通过C#合并Word文档?
合并Word文档可以快速地将多份编辑好的文档合在一起,避免复制粘贴时遗漏内容,以及耗费不必要的时间,同时,也方便了人们阅读或者对其进行再次修改.例如,在我们进行团队作业的时候,每个人都会有不同的分工, ...
- 【py模板】missingno画缺失直观图,matplotlib和sns画箱线图
import missingno as msn import pandas as pd train = pd.read_csv('cupHaveHead1.csv') msn.matrix(train ...
- PHP 实现大文件视频推流
/** * 视频推流 * 返回视频流 */ function bofang(){ set_time_limit(0); ini_set('max_execution_time', 0);//秒为单位, ...