首页
学习
活动
专区
圈层
工具
发布

I2C总线架构 之 总线驱动

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

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

    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...(unsigned int id, unsigned int baudrate); 设置I2C波特率 I2C 接口调用举例如下: 代码功能:定义了 I2C 接口功能以及 I2C 相关参数,GPIO_

    1.2K30

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

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

    2.1K31

    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:匹配机制。

    3.1K21

    I2C总线架构 之 设备驱动

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

    2.4K70

    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.9K20

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

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

    3.2K12

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

    EEPROM存储器系统架构图 今天笔者就和大家聊一聊I2C总线: 位传输 I2C总线是由飞利浦(Philips)公司开发的一种双向二线制同步串行总线,实现有效的IC间的控制,它只需要两根线(SDA和SCL...I2C总线数据传输 丛机地址 在I2C总线系统中,每个设备都有它的固定地址,一般由芯片的A0,A1和A2决定。丛机地址字节由七位地址位(D7-D1位)和一位方向位(为D0位)组成。...EEPROM的器件地址 读写过程 1.写数据过程 1.主机发送I2C总线停止信号,防止总线忙写数据失败 2.主机发送I2C总线复位信号,确保写数据之前总线处于空闲状态 3.主机发送I2C总线开始信号....主机接收到ACK的应答信号后,发送2IC总线停止信号,确保总线处于空闲状态 2.读数据过程 1.主机发送I2C总线停止信号,防止总线忙写数据失败 2.主机发送I2C总线复位信号,确保读数据之前总线处于空闲状态...ACK应答信号 6.主机接收到ACK的应答信号后,发送I2C总线停止信号,确保总线处于空闲状态 ?

    3.6K20

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

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

    2.4K10

    Linux PCI和PCIe总线

    ,PCIe规范中引入,比较快 – endpoint,x86主板上内置设备的总线号一般为0,而外挂EP的总线号一般从1开始 Figure 3-1 Type0 Header Figure 3-2 Type1...,所以总线编号是8位。...但对于大型系统而言,这是不够的,所以,引入了域的概念,每个PCI域可以拥有最多256个总线,每个总线上可支持32个设备,所以设备号是5位,而每个设备上最多可有8种功能,所以功能号是3位 – I210一般连接在...pcibios_init x86 BIOS专门提供了针对PCI总线的操作,这些操作里就包括了总线枚举的整个过程,Linux kernel中的宏CONFIG_PCI_BIOS。...在系统加电以后自检时,就会完成对PCI总线的枚举,之后Linux对PCI配置空间的访问都是通过BIOS调用的形式进行,提供有这些功能和服务的BIOS就称之为PCI BIOS 。

    7.5K40

    Linux系统驱动之I2C协议

    资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...硬件连接 I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。 2....下图:白色背景表示"主→从",灰色背景表示"从→主" 3.3 I2C信号 I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。...当SCL为低电平时候,大家都不应该使用IIC总线,只有当SCL从低电平变为高电平的时候,IIC总线才能被使用。...当它就绪后,就可以不再驱动三极管,这是上拉电阻把SCL变为高电平,其他设备就可以继续使用I2C总线了。 对于IIC协议它只能规定怎么传输数据,数据是什么含义由从设备决定。

    3.5K20

    Linux I2C驱动入门,建议收藏!

    Linux内核将 I2C 驱动分为两部分: I2C 总线驱动, I2C总线驱动就是SOC的 I2C控制器驱动,也叫做 I2C适配器驱动。...总线对应着/bus下的一条总线,这个i2c总线结构体管理着i2c设备与I2C驱动的匹配,删除等操作,I2C总线会调用i2c_device_match函数看I2C设备和I2C驱动是否匹配,如果匹配就调用i2c_device_probe...Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter, i2c_adapter 结构体定义在 include/linux/i2c.h 文件中,结构体内容如下: /*...小结 I2C驱动有4个重要的东西:I2C总线、I2C驱动、I2C设备、I2C设备器。 I2C总线:维护着两个链表(I2C驱动、I2C设备),管理I2C设备和I2C驱动的匹配和删除等。...Linux I2C总线的运行机制: 注册I2C驱动 将I2C驱动添加到I2C总线的驱动链表中 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe

    3.9K20

    面试中经常出现的I2C总线问题,你知道吗?

    点击上方蓝色字体,关注我们 在嵌入式开发的面试中,I2C总线是一个常见的考察内容。面试官通常会问一些关于I2C总线的基础知识、通信原理、常见问题以及调试方法等方面的问题。...以下是我整理的一些常见的I2C总线面试问题及回答。 拓展学习:一文搞懂I2C总线通信、如何检测和解决I2C通信死锁 1 I2C总线的基本原理是什么?...多主机模式:I2C总线允许多个主设备共享同一总线。在多主模式下,任何一个主设备都可以发起通信。 然而,必须确保多个主设备不会同时争用总线,因此需要总线仲裁机制。...总线仲裁:在多主机模式下,当两个主设备同时发起通信时,I2C协议会通过时钟同步和信号优先级来进行仲裁,确保只有一个主设备最终成功。 拉高电阻:I2C总线使用上拉电阻来保持总线的状态,避免总线的浮空。...硬件复位:如果出现总线锁死等严重错误,可以通过硬件复位I2C控制器来恢复通信。 通过这些方法,可以有效地提高I2C总线通信的可靠性和稳定性。 16 I2C总线上最多能连接多少设备?

    80810

    Linux I2C 驱动入门,建议收藏!!!

    第一时间看干货文章 1 Linux内核将 I2C 驱动分为两部分: I2C 总线驱动, I2C总线驱动就是SOC的 I2C控制器驱动,也叫做 I2C适配器驱动。...总线对应着/bus下的一条总线,这个i2c总线结构体管理着i2c设备与I2C驱动的匹配,删除等操作,I2C总线会调用i2c_device_match函数看I2C设备和I2C驱动是否匹配,如果匹配就调用i2c_device_probe...Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter, i2c_adapter 结构体定义在 include/linux/i2c.h 文件中,结构体内容如下: /*...小结 I2C驱动有4个重要的东西:I2C总线、I2C驱动、I2C设备、I2C设备器。 I2C总线:维护着两个链表(I2C驱动、I2C设备),管理I2C设备和I2C驱动的匹配和删除等。...Linux I2C总线的运行机制: 注册I2C驱动 将I2C驱动添加到I2C总线的驱动链表中 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe

    3.5K20

    Linux系统驱动之I2C视频介绍

    资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...I2C硬件框架 在一个芯片(SoC)内部,有一个或多个I2C控制器 在一个I2C控制器上,可以连接一个或多个I2C设备 I2C总线只需要2条线:时钟线SCL、数据线SDA 在I2C总线的SCL、SDA...I2C控制器驱动 它根据I2C协议发出各类信号:I2C设备地址、I2C存储地址、数据 它根据I2C协议判断 3....我们讲什么 3.1 对于Linux 从上到下: 先讲I2C协议 APP可以通过两类驱动程序访问设备 I2C设备自己的驱动程序 内核自带的i2c-dev.c驱动程序,它是i2c控制器驱动程序暴露给用户空间的驱动程序...: 先讲I2C协议 APP I2C Device Driver I2C Controller Driver(也被称为adapter)

    2.9K40
    领券