首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

I2C总线架构 之 总线驱动

这种做法完全不适应Linux的通用性的设计理念,对于Linux来讲:同样的事情我只做一遍,向外提供接口,不管你是什么IIC设备挂载那条IIC总线上,都可以用。...因此,这就需要Linux在代码架构上有非常严谨的模块化设计。 架构设计 在Linux设计中,将I2C代码框架分为三个部分:I2C总线I2C核心、I2C驱动。...「I2C总线驱动(i2c adapter):」 根据平台定制的i2c驱动,其中包含i2c传输的算法设计。...I2C设备驱动对上和用户应用程序打交道,对下和I2C核心对接。 ? 本篇主要对IIC总线驱动的总结。...i2c总线结构体 Linux在分层中,必不可少的将每一层模块封装成一个结构体,然后将结构体作为一个与外接交互的桥梁。

1.4K30

I2C 同步串行总线

I2C 概述 I2C(Inter Integrated Circuit)集成电路间总线是由 Philips 公司开发的一种简单、双向二线制同步串行总线I2C 以主从方式工作。...I2C 总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址,当主设备需要和某一个从设备通信时,通过广播的方式,将从设备地址写到总线上,如果某个从设备符合此地址,将会发出应答信号...I2C 接口定义了完成 I2C 传输的通用方法集合,包括: I2C 控制器管理:打开或关闭 I2C 控制器; I2C 消息传输:通过消息传输结构体数组进行自定义传输 I2C 时序主要有四个元素组成:起始信号...I2C 操作流程如下: 初始化I2C 设置I2C 波特率 I2C 写操作 I2C 操作 I2C 模块相关 API 接口名 描述 unsigned int IoTI2cInit(unsigned int...short deviceAddr, unsigned char *data, unsigned int dataLen); I2C操作 unsigned int IoTI2cSetBaudrate

78230
您找到你想要的搜索结果了吗?
是的
没有找到

MCU常见通信总线串讲(三)—— I2C总线协议

系列文章,主要讲解以下几个总线协议,读者可以按需选择: UART和USART RS232、RS485总线 IIC总线 SPI总线 CAN总线 USB总线 一、I2C总线的概念 其实站在我个人开发的角度来说...特点: I2C是一个支持设备的总线,多个设备共用的信号线,他支持多个主机或者多个从机 一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。...I2C总线上的从机设备,都有一个单独的地址,主机通过这个地址来实现对不同设备的访问 总线通过上拉电阻接到电源。...二、 I2C的协议层 I2C协议层规定了在I2C通信中需要遵循的一些基本规则和标准,其中包括以下内容: 物理层规定: 定义了I2C总线的物理结构、传输介质(通常是双绞线)、电气特性(如电压电平、...主机写数据到从机 主机读数据在从机 复和形式 和写数据除了基本的读写,I2C通信更常用的是复合格式,该传输过程有两次起始信号(S)。

30530

I2C总线架构 之 I2C核心

引言 在之前的 「《I2C总线架构 之 设备驱动》」 和 「《I2C总线架构 之 总线驱动》」 中一再提到i2c核心,本篇文章就总结一下i2c核心的主要功能。...分层思想 在之前的篇章中,大致能够了解i2c核心功能主要是为i2c设备驱动和i2c总线驱动的注册操作提供API。这种设计的好处在于实现:高内聚,低耦合。...i2c总线i2c设备相互独立,互无联系;两者都是通过调用i2c核心提供的API实现匹配。即两者只与i2c核心有联系,这样也就可以实现一个固定i2c总线驱动可以和任一符合条件的设备驱动匹配。...具体API 这里对i2c总线驱动和i2c设备驱动进行分析,关键在于分析i2c_client与i2c_driver如何实现匹配的。...然后将i2c_client注册到Linux。 bus_for_each_drv:匹配机制。

2.6K21

一文搞懂I2C总线通信

---- 本来不打算写这篇文章,因为网上关于I2C总线通信的资料很多很全。...总结来说,I2C总线具有以下特点: 只需要SDA、SCL两条总线; 没有严格的波特率要求; 所有组件之间都存在简单的主/从关系,连接到总线的每个设备均可通过唯一地址进行软件寻址; I2C是真正的多主设备总线...2、物理特性 I2C 总线使用连接设备的 "SDA"( 串行数据总线)和"SCL"( 串行时钟总线 ) 来传送信息。...7 位寻址模式,地址帧(8bit)的高 7 位为从机地址,地址帧第 8 位来决定数据帧传送的方向:7 位从机地址 + 1位 /写位,/写位控制从机的数据传输方向(0:写; 1:) 。...I2C 总线上应答信号 3.5、总线仲裁 I2C 总线上的仲裁分为两个部分: SCL 线上的同步和 SDA 线上的仲裁。

1.3K30

I2C总线架构 之 设备驱动

构建i2c_driver,并注册到linux i2c中 d. 注册字符设备 e. 向应用层提供i2c设备操作接口 f. 注销i2c设备 本篇文章会按照以上六个阶段展开解析。 流程解析 a....添加硬件信息设备树(设备树) 首先观察硬件i2c设备挂载到哪个i2c总线上,然后在设备树文件找到该总线的设备节点,在节点下创建子节点描述i2c设备硬件信息即可。...通过以上读写的实现,与上一篇文章 《I2C总线架构 之 I2C协议》 读写时序是对应的: (1) 写操作只需要一个msg结构体: 起始位 + 写操作(msg[0]) + 停止位。...(2) 操作需要两个msg结构体 : 起始位+ 写操作(写入地址 msg[0])+ 起始位 + 操作(存入msg[1]) + 停止位。 f....通读文章大致了解,会发现本篇i2c设备驱动与虚拟总线platform架构类似。不同的是platform是软件实现的虚拟总线,在soc上并不存在;而i2c总线,在soc上是实际存在的。

1.8K70

i2c总线的通信协议(i2c通信协议原理)

简介 I2C(Inter-integrated Circuit)总线支持设备之间的短距离通信,用于处理器和一些外围设备之间的接口,它只需要两根信号线来完成信息交换。...I2C数据传输的时序图如下: 开始条件(start condition): 为了标识传输正式启动,master设备会将SCL置为高电平(当总线空闲时,SDA和SCL都处于高电平状态),...一个7-bit的地址是从最高位(MSB)开始发送的,这个地址后面会紧跟1-bit的操作符,1表示操作,0表示写操作。...Master继续产生时钟脉冲,而数据则由master(写操作)或slave(操作)放到SDA上。每个数据帧8bits,数据帧的数量可以是任意的,直到产生停止条件。...[1]: http://www.nxp.com/docs/en/user-guide/UM10204.pdf I2C总线规格书和用户手册Rev.6 [2]: https://learn.sparkfun.com

1.2K10

Linux应用开发【第十二章】I2C编程应用开发

简述I2Clinux驱动 1) I2C核心层: 2) I2C总线驱动层: 3) I2C总线驱动层: 12.3 在linux应用层使用I2C 12.3.1 如何使用I2C tools测试I2C外设 1...12.2 在linux系统下操作I2C总线的外设 12.2.1 概述 ​ 下图是在linux系统环境里操作i2c总线上的外设流程框图。我们按照从下向上的顺序研究一下该流程中各个角色的功能。 ​...在内核中,驱动程序对下要完成I2C总线上的I2C通信协议,收集硬件传感器的I2C数据并封装成标准的linux操作接口供用户空间的应用程序操作。...12.2.2 简述I2Clinux驱动 ​ I2Clinux内核层的驱动框架主要由三部分组成: 1) I2C核心层: ​ I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(algorithm...i2ctransfer是一个创建I2C消息并将其合并为一个传输发送的程序。对于消息,接收缓冲区的内容被打印到stdout,每个消息一行。 ​

3.3K31

RT-Thread I2C总线设备学习笔记

前面我们学习了RTT的ADC设备的使用,文章链接: RT-Thread ADC设备学习笔记 I2C的基本原理之前在公众号就有相应的文章了,很早之前发的,接下来我们来学习RT-Thread I2C总线设备的使用...如何看懂时序图(以SPI/I2C为例) 浅谈总线通信机制(通信基础+串口+I2C) 我们接下来将基于小熊派开发平台进行实践。...本节,我们将会学习到RT-Thread I2C总线设备的基本使用。 接下来,我们将基于RT-Thread Studio来构建。...I2C设备驱动使用起来非常简单,就两个接口,分别是: rt_device_find rt_i2c_transfer 接口1:rt_device_find 查找 I2C 总线设备 rt_device_t...总线设备,获取I2C总线设备句柄 */ i2c_bus = (struct rt_i2c_bus_device*) rt_device_find(BH1750_DRI_NAME); if

1.5K20

浅谈总线通信机制(通信基础+串口+I2C)

我先来说下上面这幅图具体是什么含义,然后接下来再来说说I2C是怎么操作数据的。I2C总线就是通过SDA总线(数据)、SCL总线(时钟)来传输数据的,那为什么I2C总线上还要接两个上拉电阻呢?...根据I2C规格设计上手册上了解到,由于I2C接口设计大多采用的是集电极开路或者是开漏输出的接口,当总线为空闲的时候,两根线均为高电平,由于I2C的SDA和SCL都具有线与功能,什么是线与?...那不能的话,假设输出低电平,由于I2C总线的线与关系,那不就相当于违背了I2C协议所说的条件了吗?所以这就是上拉电阻存在的必要性了。...因此为什么I2C总线外要接两个上拉电阻的原因就在于此。这时候疑问就来了,为什么有些MCU不需要加上拉电阻也可以正常驱动I2C总线呢?...答:有些MCU内部带了弱上拉电阻,这样也可以与I2C总线实现线与的功能,这样可以保证I2C在空闲的时候都为高电平。

1.8K10

20.Linux-IIC驱动(详解)

1.I2C体系结构分析 1.1首先进入linux内核的driver/i2c目录下,如下图所示:   其中重要的文件介绍如下:   1)algos文件夹(algorithms)   里面保存I2C的通信方面的算法...4) i2c-core.c   这个文件实现了I2C核心的功能(I2C总线的初始化、注册和适配器添加和注销等相关工作)以及/proc/bus/i2c*接口。   ...应用层可以借用这些接口访问挂接在适配器上的I2C设备的存储空间或寄存器, 并控制I2C设备的工作方式   显然,它和前几次驱动类似, I2C也分为总线驱动和设备驱动,总线就是协议相关的,它知道如何收发数据...总线对应一个编号,下文中称为I2C总线号.这个总线号的PCI中的总线号不同.它和硬件无关,只是软件上便于区分而已.   ...#include #include #include #include #

1.7K20

详述I2C总线协议、时序,入门不再是难事

器件地址的D7-D4一般都是被厂家固定了为1111,余下的D3,D2和D1连接到芯片的A2,A1和A0决定;D0为0x00表示写,D0为0x01表示。...EEPROM的器件地址 读写过程 1.写数据过程 1.主机发送I2C总线停止信号,防止总线忙写数据失败 2.主机发送I2C总线复位信号,确保写数据之前总线处于空闲状态 3.主机发送I2C总线开始信号....主机接收到ACK的应答信号后,发送2IC总线停止信号,确保总线处于空闲状态 2.读数据过程 1.主机发送I2C总线停止信号,防止总线忙写数据失败 2.主机发送I2C总线复位信号,确保读数据之前总线处于空闲状态...3.主机发送I2C总线开始信号,启动一次数据读取 4.主机发送I2C丛机地址和模式(W/R=1)信号,并且等待一个丛机的应答信号 5.主机接收到ACK的应答信号后,开始多个字节的读取,每读完一个字节需要给丛机发送一个...主机/写数据过程 结语 I2C总线在嵌入式应用中非常广泛,基本上所有的电力电子设备都会用到这个总线; 笔者根据自身多年的工作经验,记录下了我对它的理解,如果有写的不对,希望大家能多多指出,今天的I2C

1.3K20

IIC接口下的24C02 驱动分析

本节来学习IIC接口下的24C02 驱动分析,本节学完后,再来学习Linux下如何使用IIC操作24C02 1.I2C通信介绍 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,是一个多主机的半双工通信方式...I2C总线系统结构,如下所示 ? 其中SCL时钟线的频率由主机提供,且从机不能主动来引起数据传输,必须等待主机先发信号才行 两个或多个主机同时发起数据传输时,可以通过冲突检测和仲裁来防止数据被破坏。...5)应答信号ACK I2C总线上的数据都是以8位数据(字节)进行的,当发送了8个数据后,发送方会在第9个时钟脉冲期间释放SDA数据,当接收方接收该字节成功,便会输出一个ACK应答信号,当SDA为高电平,...其中A2~A1表示硬件地址,P2~P0表示page页地址 bit[0]地址:表示/写状态(所有I2C器件都是这样,最低位表示方向位) 4.3.1 为什么需要page页地址?...地址会自动加1,直到发送停止信号结束 接下来,下节开始学习: Linux下如何利用linuxI2C驱动体系结构来操作24C02

1.1K90

Linux驱动开发的IIC设备驱动的投机取巧

i2c总线驱动。...他将会操作多个文件 上面的做法都有些困难及弊端存在,经过摸索了一遍LinuxI2C驱动框架,我发现可以很精简的写一个I2C设备的设备驱动。...投机取巧的I2C驱动 I2C设备驱动说明 投机取巧的I2C驱动是参考I2C总线驱动代码实现的。 投机取巧的I2C驱动不需要设备树,这也让一些不熟悉设备树的小伙伴能编写一个设备驱动。...投机取巧的I2C驱动精简,方便理解。 分析I2C总线驱动说明 I2C总线驱动的代码在linux的源码中--i2c-dev.c中。...return res; } 投机取巧的I2C驱动写法 通过i2c总线驱动的源码分析,实际我们的设备驱动可以通过这种模仿这个总线驱动来写。

1.8K20

28.Linux-IIC驱动(详解)

上一节 我们学习了:   IIC接口下的24C02 驱动分析 接下来本节, 学习Linux下如何利用linuxI2C驱动体系结构来操作24C02 1....I2C体系结构分析 1.1首先进入linux内核的driver/i2c目录下,如下图所示: ?...4) i2c-core.c 这个文件实现了I2C核心的功能(I2C总线的初始化、注册和适配器添加和注销等相关工作)以及/proc/bus/i2c*接口。...应用层可以借用这些接口访问挂接在适配器上的I2C设备的存储空间或寄存器, 并控制I2C设备的工作方式 显然,它和前几次驱动类似, I2C也分为总线驱动和设备驱动,总线就是协议相关的,它知道如何收发数据,...总线对应一个编号,下文中称为I2C总线号.这个总线号的PCI中的总线号不同.它和硬件无关,只是软件上便于区分而已.

2.9K70

SPI、I2C、UART、I2S、GPIO、SDIO、CAN总线

I2C (Inter-Integrated Circuit):由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。...I2C总线用两条线(SDA和SCL)在总线和装置之间传递信息,在微控制器和外部设备之间进行串行通讯或在主设备和从设备之间的双向数据传送。...I2C是OD输出的,大部分I2C都是2线的(时钟和数据),一般用来传输控制信号。 I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。...总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。...I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。

1.6K10
领券