协议I2C
SCL SDA 同步,半双工
开漏+弱上拉,谁用这跟线,就下拉成低电平
想输出,去拉杆子或放手,操作杆子变化
想输入,直接放手,看电平高低就行
线与,一个低电平,全部低电平,可以利用这个执行多主机下的时钟同步和总线仲裁
时序
主机发出起始信号(SCL高,SDA下拉),从机捕获这个状态时,就复位自己,等待召唤。 然后主机再把SCL拉低(1.占用总线,2时序单元低电平开始,低电平结束)
主机不着急,可以在任意时刻在高电平时放入数据就行(间隔几个也行)
在SCL同步下:主机发,从机读
可以这样理解,主机从机一直处于输入模式,当主机需要发送的时候,可以主动拉低SDA,需要接收时就自然需要释放SDA
实线-主机,虚线-从机(实线变虚线,就是释放SDA的过程)
从机发送一个数据,若无主机应答,则停止发送
一主多从,每个从机有一个名字(7位10位地址),在主机开始发送之前,会发送信号,从机都会收到这个信号,并与自己名字对比,若不一致则不管
IIC设备的地址,高位由厂商决定,低位可以通过相关引脚的高低电平,自定义其数值
主从控制流程:
主机发送唤醒,发送7位地址,和一位读写(0主机写,1主机读)
指定地址写
在RA:0上面是应答,主机发送完后松开SDA(将要回弹到高电平),但从机应答拉低电平,所以这里显示是低电平
后面的上升沿是从机应答后释放,然后同样的时序再来一遍,发送数据到从机的内部,
从机设备可以自己定义第二个字节和后续字节的用途,一般是寄存器地址(MPU6050),或者是指令控制字(AD转换器)等,存储器地址等
发送完毕后,先拉低下面的SDA,然就释放SCL,再释放SDA (SCL高电平期间的SDA上升沿)
当前地址读(不能指定寄存器):
主机发送一个字节,指定从机地址和读写标志位,然后接受从机应答位,然后从机在SCL低电平时写数据,主机在相邻的SCL高电平读取数据
问题:从机怎么知道主机想读哪个寄存器里面的地址呢?
用 当前地址指针 从机的寄存器练成一片,有一个地址指向他们,默认上电从0开始,每次写入或读取一个字节后,指针自增
比如:在0x19位置写入数据FF,那么读取的时候指针+1就指向0x1A
指定地址读:(相当于指定地址写Pro)
对指定设备,在指定地址下,读取指定的数据
官方:指定地址写,指定从机A写+指定指针地址; 然后再来个起始条件,重新指定从机A,指定读,就可以读到对应的地址 (曲线救国)
也可以两个时序,在指定写后停止然后再起始条件重新开始
可以连续读写多个数据,利用读写后指针自增的原理
有参宏
#define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x))
通过传地址,实现返回多个值
int16_t AX, AY, AZ, GX, GY, GZ;
MPU6050_GetData(&AX, &AY, &AZ, &GX, &GY, &GZ); void MPU6050_GetData(int16_t *AccX, int16_t *AccY, int16_t *AccZ,
int16_t *GyroX, int16_t *GyroY, int16_t *GyroZ)
{
uint8_t DataH, DataL; DataH = MPU6050_ReadReg(MPU6050_ACCEL_XOUT_H);
DataL = MPU6050_ReadReg(MPU6050_ACCEL_XOUT_L);
*AccX = (DataH << 8) | DataL;
}
定义多主机模式
1。固定多主机 2主N从固定,2个主机冲突时,需要仲裁
2、可变多主机,每个都可以在某个时刻成为主机,其他的都变成从机,多个学生跳出的话就需要仲裁(STM32)
10位地址开头11110 +10位地址+读写标志位 ,七位地址不允许11110开头
硬件IIC
当需要发送数据,把一个字节数据写到数据寄存器DR,当数据寄存器空闲时,数据寄存器的值会转到移位寄存器(置状态寄存器为TXE1,发送寄存器空),在移位的过程中可以把下一个数据放到DR等待,这样无缝衔接。
接收时,收到的数据从SDA到数据控制电路(完成读写控制,起始终止条件应答位),一位一位的到移位寄存器,一个字节齐后,整体转移到DR(置标志位RXNE,接收寄存器非空),这是可以直接读DR数据。
自身地址寄存器 双地址寄存器 作为从机时使用,当接收到主机传呼,会使用比较器对比自身地址,响应外部主机召唤
一主多从图
硬件IIC,使用的两个IO,配置成复用开漏输出模式 (也可以输入)
STM32默认是从模式,通过写控制寄存器的START位写1来开启,EVX是组合几个标志位的大标志位
协议I2C的更多相关文章
- [I2C]I2C总线协议图解
转自:http://blog.csdn.net/w89436838/article/details/38660631 1 I2C总线物理拓扑结构 I2C 总线在物理连接上非常简单,分别由S ...
- I2C总线协议图解(转载)
转自:http://blog.csdn.net/w89436838/article/details/38660631 另外,https://blog.csdn.net/qq_38410730/arti ...
- 嵌入式Linux内核I2C子系统详解
1.1 I2C总线知识 1.1.1 I2C总线物理拓扑结构 I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成.通信原理是通过对SCL和SDA线高 ...
- STM32F10x_模拟I2C读写EEPROM
Ⅰ.写在前面 说到IIC,大家都应该不会陌生,我们初学单片机的时候或多或少都知道或了解过,甚至使用I2C控制过器件.但是,有多少人真正去深入理解,或者深入研究过I2C通信协议呢? 1.我们有必要学习I ...
- Little-endian和Big-endian
谈到字节序的问题,必然牵涉到两大CPU派系.那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU.PowerPC系列采用big endian方式存储数据,而x86系列则采用l ...
- 人工智能"眼睛"——摄像头
摄像头机器视觉人工智能的"眼睛",其重要性在嵌入式领域不言而喻.但是如何理解和使用摄像头却是一个非常棘手的问题.本文主要针对调试摄像头过程中遇到的问题,对摄像头的基本原理及概述进行 ...
- i2c协议
i2c协议 http://blog.csdn.net/g_salamander/article/details/8016698 总线设备驱动模型 http://blog.csdn.net/u01395 ...
- i2c协议简要分析(转载)
声明 本文大部分内容为转载,因此标定为转载 源地址: http://www.cnblogs.com/zym0805/archive/2011/07/31/2122890.html http://blo ...
- (原创) 巩固理解I2C协议(MCU,经验)
题外话:这几天天气突然转冷了.今天已是11月23日了,查查黄历,昨天(11月22日)刚好是小雪,一夜温度骤降,果然老祖先的经验有灵验!冬天来了,还是多加加衣服,注意保暖! 1.Abstract ...
- I2C总线协议的简要说明
为了快速的了解I2C总线协议,此处采用另类的方式进行说明. 倘若你和另外一个人只能通过一个开关加灯泡的装置在不同的两个房间进行交流,以下是很简单能说明的一个模型: 你的房间有一个开关,另外一间房间有一 ...
随机推荐
- JavaScript获取浏览器的显示区域大小测试
JavaScript获取浏览器的显示区域大小测试 Now we get the screen size about this browser 网页可见区域宽 document.body.clientW ...
- 百度飞桨:ERNIE 3.0 、通用信息抽取 UIE、paddleNLP的安装使用[一]
相关文章: 基础知识介绍: [一]ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?_汀.的博客-CSDN博客_ernie模型 百度飞桨: ...
- 从嘉手札<2024-1-29>
补一下以前的几篇日记 2018-4-6 当一个人不在纠结没有什么 而是开始珍视他所拥有的一切的时候 才算得上真正的成熟 个人的意志 不能因受到社会的压力而软弱 也不能受到自然的压力而萎缩 而应当如冬日 ...
- uni-app 介绍及使用
一.什么是uni-app uni-app由dcloud公司开发的多端融合框架,是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.Web(响应式).以 ...
- 使用HttpServletResponse实现curl接口时控制台输出(续)
上一篇文章的问题 在上一篇文章 Spring Boot RestController接口如何输出到终端 中讨论了如何使用 HttpSerlvetResponse 写入输出流,使应急接口通过 curl ...
- 2023年多校联训NOIP层测试6
2023年多校联训NOIP层测试6 打了 \(10min\) 骗分,就溜了. T1 弹珠游戏 \(0pts\) 没听懂讲评,暂时咕了. T2 晚会 \(20pts\) 部分分( \(20pts\) ) ...
- NC16810 [NOIP1999]拦截导弹
题目链接 题目 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达 ...
- springboot 实现拦截的 3 种方式介绍及异步执行的思考
springboot 拦截方式 实际项目中,我们经常需要输出请求参数,响应结果,方法耗时,统一的权限校验等. 本文首先为大家介绍 HTTP 请求中三种常见的拦截实现,并且比较一下其中的差异. (1)基 ...
- Vue实现简单图书管理例子
以下内容整理自网络. 说明 本例主要涵盖以下知识点: 数据绑定 条件与循环 计算属性 监听器 过滤器 常见数组和对象操作 vue生命周期 示例演示 代码 <!DOCTYPE html> & ...
- powerdesigner自定义实体显示的属性
我做概要设计的时候需要画实体的逻辑模型图,默认的时候是这样的: 但是我想只保留属性名,隐藏数据类型和下面的横线怎么办?效果如下: 按以下操作即可实现: