i2c总线协议

图形化编程娱乐于教,Kittenblock arduino实例解读,i2c地址扫描

断了今生、忘了曾经 提交于 2020-04-06 07:30:33
跟很多学生聊过,很多学生不是不努力,只是找不到感觉。有一点不可否认,同样在一个教室上课,同样是一个老师讲授,学习效果迥然不同。关键的问题在于,带入感,我能给出的建议,就是咬咬牙,坚持住,没有学不会的知识。会陆续分享图形化编程的经验,希望能够做成一个专题。如果您觉得有用,就给点个赞吧。涉及的软件包括 Kittenblock 、 arduino。 程序解读:i2c 地址扫描,在 i2c 协议里面,主设备在从设备获得的第一个字节的数据就是从设备的地址。如果从设备的设备号和总线上主设备发出的信号相同 , 那么从设备就会应答 , 所以 , 只要把所有设备号都发一遍 . 看看哪个应答了 , 对应的数字就是设备号啦 知识点:i2c 地址扫描 ,连接arduino板, 执行器,结构 , 传感器 重点: i2c 地址扫描 涉及的软件: Kittenblock、arduino 。 #include <Arduino.h> #include <Wire.h> int x; int error; void setup(){ Wire.begin(); Serial.begin(115200); x = 0; while(!(x==127)){; Wire.beginTransmission(x); error = Wire.endTransmission(); if(error==0){; Serial

I2C协议

﹥>﹥吖頭↗ 提交于 2020-03-17 07:53:27
什么是I2C协议? I2C协议是单片机与其它芯片常用的通讯协议,由于只需要两根线,所以很好使用。 1. I2C总线的特点 (1)只要求两条总线线路 一条串行数据线SDA 一条串行时钟线SCL (2) 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址;主机可以作为主发送器或主机接收器 (3)它是一个真正的多主机总线,如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏 (4)串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速模式下可达.4Mbit/s (5)片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整 (6) 连接到相同总线的IC数量只受到总线的最大电容400pF 限制 I2C协议总线信号时序分析 1 .数据的有效性: SDA线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在 SCL线的时钟信号是低电平时才能改变。 2 .起始和停止条件 当SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件。 当SCL线是高电平时,SDA线由低电平向高电平切换表示停止条件。如图3.2 I2C起始和停止条件所示。 3. 总线空闲状态 SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高; 4

rk3288 7.1 mlx90640调试

一笑奈何 提交于 2020-02-22 20:04:31
由于疫情的影响,最近在调试测温模块mlx90640 mlx90614,下面简单描述下mlx90640的驱动开发. 站在巨人( https://blog.csdn.net/qq_33487044/article/details/86565536 )的肩膀上做一些更为详细的说明. 我们看技术手册上可以了解到 mlx90640是一款红外热像仪模块, 32×24 像素, I2C 接口通信,兼容 3.3V/5V 电平。采用 MLX90640 远红外热传感器阵列,可精确检测特定区域和温度范围内的目标物体,尺寸小巧,可方便集成到各种工业或智能控制应用中。 ⚫ 采用 MLX90640 远红外热传感器阵列, 32×24 像素 ⚫ 支持 I2C 接口通信,可设置为快速模式(速率可达 1MHz) ⚫ 噪声等效温差(NETD)仅为 0.1K RMS@1Hz 刷新率,噪声性能好 ⚫ 板载电平转换电路,可兼容 3.3V/5V 的工作电平 通讯方式为 I2C,支持 I2C 高速模式(最高可达 1MHz),只能作为 I2C 总线上的从设备, SDA 和SCL 端口可以承受 5V 电压,可直接接入到 5V I2C 总线中,模块的设备地址是可以编程的,最多可以有127 个地址,出场默认值为 0x33,具体的i2c协议这边就不介绍了,根据上述我们可以得知通讯的i2c设备地址为0x33。 因此有dts的配置: &i2c4

I2C总线概述及时序总结

。_饼干妹妹 提交于 2020-02-22 18:12:47
I2C 是Inter-Integrated Circuit的缩写,发音为"eye-squared cee" or "eye-two-cee" , 它是一种两线接口。 I2C 只是用两条双向的线,一条 Serial Data Line (SDA) ,另一条Serial Clock (SCL)。 SCL:上升沿将数据输入到每个EEPROM器件中;下降沿驱动EEPROM器件输出数据。(边沿触发) SDA:双向数据线,为OD门,与其它任意数量的OD与OC门成"线与"关系。 二.输出级 I2C总线概述及时序 每一个I2C总线器件内部的SDA、SCL引脚电路结构都是一样的,引脚的输出驱动与输入缓冲连在一起。其中输出为漏极开路的场效应管,输入缓冲为一只高输入阻抗的同相器,这种电路具有两个特点: 1)由于SDA、SCL为漏极开路结构(OD),因此它们必须接有上拉电阻,阻值的大小常为 1k8, 4k7 and 10k ,但1k8 时性能最好;当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线"与"关系。 2)引脚在输出信号的同时还将引脚上的电平进行检测,检测是否与刚才输出一致,为"时钟同步"和"总线仲裁"提供了硬件基础。 三. 主设备与从设备 系统中的所有外围器件都具有一个7位的"从器件专用地址码",其中高4位为器件类型

关于IIC总线

二次信任 提交于 2020-02-08 12:51:45
关于IIC总线 I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。 1 I2C总线特点 I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。 I2C总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。 2 I2C总线工作原理 2.1 总线的构成及信号类型 I2C总线是由 数据线SDA 和 时钟SCL 构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。 各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作

Linux中IIC总线驱动分析

断了今生、忘了曾经 提交于 2020-01-21 07:26:01
虽然I2C硬件体系结构比较简单,但是I2C体系结构在Linux中的实现却相当复杂.通过阐述Linux系统中I2C总线体系结构,在此基础上完成嵌入式Linux系统中I2C总线驱动的开发. 1. 嵌入式Linux中I2C驱动程序分析 I2C(Inter2IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.嵌入式系统中,微控制器通过I2C总线可随时可对各个系统中的组件进行设置和查询,以管理系统的配置或掌握组件的功能状态来控制外围设备.I2C总线因为协议成熟,引脚简单,传输速率高,支持的芯片多,并且有利于实现电路的标准化和模块化,得到了包括Linux在内的很多操作系统的支持,受到开发者的青睐.在Linux环境下使用I2C总线协议,需要理解Linux的I2C总线驱动的体系结构,在此基础上来进行嵌入式驱动程序和应用程序的开发. 1.1 Linux的I2C驱动框架 Linux内核的I2C总线驱动程序框架如图1所示: Linux的I2C体系结构分为3个组成部分: I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法(即"al2gorithm")上层的,与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等.这部分是与平台无关的

I2C上拉电阻

删除回忆录丶 提交于 2020-01-15 08:55:47
在一些PCB的layout中,大家往往会看到在I2C通信的接口处,往往会接入一个4.7K的电阻,有的datasheet上面明确有要求,需要接入,有的则没有要求。 I2C接口 对于单片机来讲,有些IO内部的上拉电阻可以使能,这样就省去了外部的上拉电阻,这是对于单片机带有标准I2C通信协议接口,若是只带有模拟I2C协议接口,那么就需要考虑接入上拉电阻问题。下图是摄像头进行配置通信时SCL和SDA需要进行上拉电阻的连接。 在大多数情况下,由于I2C接口采用Open Drain机制,器件本身只能输出低电平,无法主动输出高电平,只能通过外部上拉电阻RP将信号线拉至高电平。因此I2C总线上的上拉电阻是必须的,如图1所示。 图1 因为I2C总线在空闲时必须拉高,只有是高的才能拉成低的,所以这是之所以规定空闲时必须为高的一个原因,要是保持“低”的话,那是不可能成为“多主”总线的。 其实I2C总线接口在工作时只会检测高低电平,他不会在乎有无上拉电阻的问题,所以总线必须满足时序要求。 上拉电阻的大小,会牵扯到两个问题,一个是功耗,一个是速度问题,两者是一个矛盾体。如果你想尽量提高速度,那么就牵涉到总线电容的问题,其实很容易理解,上拉电阻与总线的电容形成了RC,高速时将直接影响通讯!因为总线拉高时有个充电时间以及高电平的阀值

I2C通信(读写EEPROM)

谁都会走 提交于 2020-01-07 02:05:33
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> I2C协议简介 I2C通信协议(Inter-Integrated Circuit)是由Phiilps公司开发的,它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通信协议的外部收发设备,被广泛的应用在系统内多个集成电路(IC)间通讯。 它是一个多设备总线,即总线可以挂载多个I2C通信设备,支持多个通讯主机及多个通信从机。I2C总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。 每条连接到总线的设备都有一个独立的地址(7位地址或者10位地址),主机可以利用这个地址进行不相同设备之间的访问。 I2C物理层 在电路中有三种状态 ①高电平表示逻辑 1 ②低电平表示逻辑 0 ③高阻态 当通讯设备为高阻态时,即电阻很大,就像和总线断开一样 当通讯设备想表达逻辑1的时候或者空闲时,都要设置高阻态 所以当配置I2C引脚时不能配置成推挽输出,而是要配置成开漏输出(一般用在总线上输出高阻态) 总线数目受到电容限制 I2C协议层 主机写数据到从机 主机先广播从机的地址,在地址后面的这一位表示读写位,0表示写,当有这个地址的从机时,从机会回复一个应答位(ACK),然后主机向从机写数据,每发一个字节的数据,从机会回复一个应答位,当从机无法接收数据时,会回复给主机一个非应答信号

嵌入式Linux内核I2C子系统详解

萝らか妹 提交于 2019-12-31 19:44:41
1.1 I2C总线知识 1.1.1 I2C总线物理拓扑结构 I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。 1.1.2 I2C总线特征 I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(可以从I2C器件的数据手册得知),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。 I2C总线上可挂接的设备数量受总线的最大电容400pF 限制,如果所挂接的是相同型号的器件,则还受器件地址位的限制。 I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。一般通过I2C总线接口可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关。 I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。 1.1.3 I2C总线协议 I2C协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号总是由主设备产生

SMBus总线概述

情到浓时终转凉″ 提交于 2019-12-30 09:04:15
1.概述: 系统管理总线是一种两线制接口。它基于I2C 总线原理演变而来,可以认为是简化版的I2C总线。 SMBus最初 是 应用到 智能电池 ,如电池充电器和一个微控制器 。其 提供一个系统和电源管理相关的任务控制总线。如今,SMBus总线可以连接的设备类型更多样化,包括与电源相关的设备,系统的传感器,EEPROM的容量等设备的信息通信。 SMBus体现在OSI模型的下三层:物理,数据链路,网络。物理层定义了了SMBus的电气特性;数据链路层部分规范化位、字节的数据传输,仲裁和时钟信号;网络层处理处理SMBus地址解析协议和总线数据传输协议。 2.通用特性: 1)物理层: DC特性: AC特性: 2)数据链路层: 按通用思想,使用电平的高低代表逻辑的0和1: 数据有效性:数据必须在时钟的高电平周期保持稳定,数据的状态只能在时钟低电平的情况下才能改变; 开始和停止条件(与I2C相同): 在SMBCLK 线是高电平时,SMBDAT 线从高电平向低电平切换,表示数据传输开始; 当SMBCLK 线是高电平时,SMBDAT 线由低电平向高电平切换,表示数据传输停止; 总线空闲: SMBCLK 和SMBDAT 线都处于高电平期间,总线空闲。 数据传输: 数据传输以字节为单位,传输的字节数量不限,但是每个字节后必须紧跟一个ACK响应。 首先传输的是数据的最高位MSB。