i2c总线协议

I2C总线设备驱动解析

痴心易碎 提交于 2019-12-26 18:57:36
1. I2C 协议 1.1 I2C总线工作原理 I2C总线是由数据线SDA和时钟SCL构成的串行总线,各种被控制器件均并联在这条总线上,每个器件都有一个唯一的地址识别,可以作为总线上的一个发送器件或接收器件(具体由器件的功能决定),I2C总线的接口电路结构如图1所示。 1.2 I2C总线的几种信号状态 1. 空闲状态:SDA和SCL都为高电平。 2. 开始条件(S):SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 3. 结束条件(P):SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。 4. 数据有效:在SCL的高电平期间, SDA保持稳定,数据有效。SDA的改变只能发生在SCL的底电平期间。 5. ACK信号: 数据传输的过程中,接收器件每接收一个字节数据要产生一个ACK信号,向发送器件发出特定的低电平脉冲,表示已经收到数据。 1.3 I2C总线基本操作 I2C总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL),同时控制总线的传输方向,并产生开始和停止条件。 数据传输中,首先主器件产生开始条件,随后是器件的控制字节(前七位是从器件的地址,最后一位为读写位 )。接下来是读写操作的数据,以及 ACK响应信号。数据传输结束时,主器件产生停止条件,具体的过程如图2所示。 2. Linux I2C 结构分析 2.1 层次分析 1. I2C Core

IIC设备驱动程序详解

倾然丶 夕夏残阳落幕 提交于 2019-12-25 15:50:43
转自: http://www.cnblogs.com/lfsblack/archive/2012/09/14/2685783.html IIC设备是一种通过IIC总线连接的设备,由于其简单性,被广泛引用于电子系统中。在现代电子系统中,有很多的IIC设备需要进行相互之间通信 IIC总线是由PHILIPS公司开发的两线式串行总线,用于连接微处理器和外部IIC设备。IIC设备产生于20世纪80年代,最初专用与音频和视频设备,现在在各种电子设备中都广泛应用 IIC总线有两条总线线路,一条是串行数据线(SDA),一条是串行时钟线(SCL)。SDA负责数据传输,SCL负责数据传输的时钟同步。IIC设备通过这两条总线连接到处理器的IIC总线控制器上。一种典型的设备连接如图: 与其他总线相比,IIC总线有很多重要的特点。在选择一种设备来完成特定功能时,这些特点是选择IIC设备的重要依据。 主要特点: 1,每一个连接到总线的设备都可以通过唯一的设备地址单独访问 2,串行的8位双向数据传输,位速率在标准模式下可达到100kb/s;快速模式下可以达到400kb/s;告诉模式下可以达到3.4Mb/s 3,总线长度最长7.6m左右 4,片上滤波器可以增加抗干扰能力,保证数据的完成传输 5,连接到一条IIC总线上的设备数量只受到最大电容400pF的限制 6,它是一个多主机系统

IIC总线的FPGA实现

余生颓废 提交于 2019-12-24 19:13:02
一、摘要   DE2_TV中,有关于寄存器的配置的部分,采用的方法是通过IIC的功能,这里对IIC总线的FPGA实现做个说明。 二、实验平台   软件平台:ModelSim-Altera 6.4a (Quartus II 9.0)   硬件平台:DIY_DE2 三、实验原理 1、 IIC 总线器件工作原理   在IIC总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号变为低电平,将使SCL线上所有器件开始并保护低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不影响SCL线的状态,这些器件将进入高电平等待的状态。   当所有器件的时钟信号都变为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件决定,而时钟高电平时间由时钟高电平期最短的器件决定。   IIC总线上数据的传输速率在标准模式下可达100kbit/s 在快速模式下可达400kbit/s 在高速模式下可达3.4Mbit/s ,连接到总线的接口数量只由总线电容是400pF 的限制决定。 2、IIC 总线的传输协议与数据传送时序 (1)起始和停止条件

Zynq-Linux移植学习笔记之28-PS端I2C从模式实现

吃可爱长大的小学妹 提交于 2019-12-17 05:51:50
1、背景介绍 最近在调试集群处理平台,模块上使用了支持IPMI的BMC控制芯片。该芯片与ZYNQ通过I2C总线相连,上面跑IPMB协议。ZYNQ作机箱管理,对所有BMC进行控制,而BMC再控制本模块的负载上下电。 2、问题描述 ZYNQ与BMC通过I2C总线进行数据传输,按照VITA46.11规范,要求机箱管理既能做I2C的master,也能做i2c slave(此时BMC做master),于是要求ZYNQ能进行I2C主从模式切换。ZYNQ PS端的I2C控制器作为master很容易,之前也通过I2C控制器配置1848交换芯片,不会的是如何让I2C控制器运行在slave模式。问了一下AVNET代理,发现他们也没搞过。在Xilinx论坛上面发帖,老外给了一个他们ZYNQ作为i2c从的测试例子( 见链接 ),但帮助不大,唯一的帮助就是让我相信I2C控制器肯定支持slave模式。在xilinx wiki( 链接 )上面可以看到新发布的驱动版本已经支持了I2C slave mode。 3、解决思路 对i2c-cadence.c驱动进行了代码分析,发现CONFIG_I2C_SLAVE的宏定义随处可见,其中最重要的莫过于下面这个地方。 Cdns_reg_slave和cdns_unreg_slave这两个函数从字面意义来看明显是对寄存器配置成slave或unslave模式的意思

总线

若如初见. 提交于 2019-12-15 20:58:04
总线有三种:内部总线、系统总线和外部总线。内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连;而系统总线是微机中各插件板与系统板之间的总线,用于插件板一级的互连;外部总线则是微机和外部设备之间的总线,微机作为一种设备,通过该总线和其他设备进行信息与数据交换,它用于设备一级的互连。 除了总线外,还有一些接口,他们是多种总线的集合体,或者说来者不拒。 SPI SPI(Serial Peripheral Interface): MOTOROLA公司提出的同步串行总线方式。高速同步串行口。3~4线接口,收发独立、可同步进行。 因硬件功能强大而被广泛应用。在单片机组成的智能仪器和测控系统。如果对速度要求不高,采用SPI总线模式十个不错的选择。他可以节省I/O端口,提高外设的数目和系统性能。标准SPI总线由四根线组成:串行时钟线(SCK)、主机输入/从机输出线(MISO)、主机输出/从机输入线(MOSI)和片选信号(CS)。有的SPI接口芯片带有中断信号线或没有MOSI。 SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或者主设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。如果用通用IO口模拟SPI总线,必须要有一个输出口

I2C上拉电阻选择

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

I2C接口开漏输出输入双向

十年热恋 提交于 2019-12-13 22:03:17
I2C接口 原创 朝辞暮见 发布于2018-06-13 19:45:25 阅读数 8265 收藏 展开 一、I2C总线协议内容 1. I2C总线引脚定义 SDA (I2C数据引脚) CLK (I2C数据引脚) 2. I2C 总线物理连接 I2C总线物理连接如下图所示,SDA和CLK连接线上连有两个上拉电阻,当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低。 二、I2C总线的数据传送 1. 数据位的有效性规定 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化 1 scl处于高电平的时候,如果sda处于低电平:传输数据0,sda处于高电平:传输数据1 2.在scl处于高电平的时候,sda用来传输数据,必须保持电平稳定 3.如果要产生数据即sda需要变化时,只能在scl处于低电平的时候 2. 起始和终止信号 SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。 1. 信号的发起和终止,由主机发起,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。 2. scl处于高电平的时候,sda由高->低的跳变, 表示发起传输,产生起始信号s, 如果低-

I2C接口与SPI和UART接口的区别

匿名 (未验证) 提交于 2019-12-02 23:37:01
一、SPI I2C UART通信速率比较: SPI > I2C > UART 1、同步通信>异步通信; 2、同步通信时必须有一根时钟线连接传输的两端; 3、都是串行通信方式,并行通信用于内部存储间的通信,如flash; 4、适合传输的距离和通信速率成反比关系; 3-SPI:两条合一的数据线、1时钟线、1CS(设备片选线) SPI:2数据线、1时钟线、1CS(设备片选线)/串行 同步 通信全双工 I2C:1数据线、1时钟线/串行 同步 通信半双工 传输距离比UART短 UART:2数据线、 1地线/串行 异步 通信全双工 传输距离比I2C长些 (I2C接口是“器件间”接口,是在一块板子之内传输数据) (UART是 “设备间”接口,更多的是用于两台设备之间传输数据) 二、串行和并行、同步和异步的区别: 串行通信:利用一条数据线将数据一位一位的顺序传送,特点是通信线路简单,成本低,适合于长距离传送 并行通信:利用多条数据线将数据的各位同时传送,特点是传输速度快,适合于短距离传送 异步:在一个字符的传输时间范围内保持同步即可 同步:在数据传输过程中,需要一根时钟线同步,IIC总线,SPI总线 三、I2C接口与串行接口的区别: I2C 两线式串行总线 UART 通用串行异步收发器串口,UART是串行异步通信接口,它包括RS232、RS499、RS423、RS422和RS485等接口规范和

最新内核3.4)Linux 设备树加载I2C client adapter 的流程(内核3.4 高通)【转】

扶醉桌前 提交于 2019-12-02 16:50:04
转自: https://blog.csdn.net/lsn946803746/article/details/52515225 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/lsn946803746/article/details/52515225 BLSP(BAM Low-Speed Peripheral) , 每一个BLSP含有两个QUP, 每一个QUP可以被配置为I2C, SPI, UART, UIM接口, BLSP是高通对于低速接口的一种管理方式。 i2c@f9923000 { /* BLSP-1 QUP-1 */ cell-index = <1>; compatible = "qcom,i2c-qup"; #address-cells = <1>; #size-cells = <0>; reg-names = "qup_phys_addr"; reg = <0xf9923000 0x1000>; interrupt-names = "qup_err_intr"; interrupts = <0 95 0>; qcom,i2c-bus-freq = <100000>; qcom,i2c-src-freq = <19200000>; qcom,sda-gpio =

icm20948

与世无争的帅哥 提交于 2019-12-01 13:49:16
简介: icm20948由两个裸片(die)构成,QFN封装(3x3x1mm 24PIN)。一个die集成3轴陀螺仪,3轴加速计和一个DMP,另一个die集成旭化成的AK09913的3轴磁力计。它支持以下功能: 1.512字节的FIFO(FIFO的大小根据DMP功能集而定) 2.运行时校准功能 3.增强的FSYNC功能,可改善类似EIS(视频防抖)应用的时序 陀螺仪可编程量程范围:±250dps ±500dps ±1000dps ±2000dps 加速计可编程量程范围:±2g ±4g ±8g ±16g 这两个传感器的灵敏度初始化(工厂校准)降低了产线的校准要求。 其他关键功能,片上16位ADC,可编程数字滤波器,内嵌的温度传感器以及可编程中断。设备功能接口有I2C和SPI,VDD操作电压范围1.71V到3.6V以及一个独立的数字IO供电,VDDIO从1.71V到1.95V。 与设备上的寄存器进行通信是通过I2C(高达100KHZ-标准或400KHZ-快速),或者高达7MHZ的SPI。 应用场景: 1.智能手机和平板 2.可穿戴传感器 3.IoT场景 4.无人机 功能: 1.陀螺仪: ① 输出X,Y和Z轴方向的角速度,可编程范围±250dps ±500dps ±1000dps ±2000dps以及集成的16位ADC ② 自定义的ODR;自定义的低通滤波 ③ 自检 ④输出数据率: