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

Linux系统驱动之I2C协议

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 I2C协议 参考资料: i2c_spec.pdf 1....硬件连接 I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。 2....传输数据类比 怎么通过I2C传输数据,我们需要把数据从主设备发送到从设备上去,也需要把数据从从设备传送到主设备上去,数据涉及到双向传输。...下图:白色背景表示"主→从",灰色背景表示"从→主" 3.3 I2C信号 I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。

3.5K20

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

Linux内核将 I2C 驱动分为两部分: I2C 总线驱动, I2C总线驱动就是SOC的 I2C控制器驱动,也叫做 I2C适配器驱动。...I2C驱动 i2c_driver 类似 platform_driver,是我们编写 I2C 设备驱动重点要处理的内容, i2c_driver 结构体定义在 include/linux/i2c.h 文件中...I2C设备 I2C设备结构体i2c_client 结构体定义在 include/linux/i2c.h 文件中,内容如下: struct i2c_client { unsigned short...Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter, i2c_adapter 结构体定义在 include/linux/i2c.h 文件中,结构体内容如下: /*...Linux I2C总线的运行机制: 注册I2C驱动 将I2C驱动添加到I2C总线的驱动链表中 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe

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

    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

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

    第一时间看干货文章 1 Linux内核将 I2C 驱动分为两部分: I2C 总线驱动, I2C总线驱动就是SOC的 I2C控制器驱动,也叫做 I2C适配器驱动。...I2C驱动 i2c_driver 类似 platform_driver,是我们编写 I2C 设备驱动重点要处理的内容, i2c_driver 结构体定义在 include/linux/i2c.h 文件中...I2C设备 I2C设备结构体i2c_client 结构体定义在 include/linux/i2c.h 文件中,内容如下: struct i2c_client { unsigned short...Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter, i2c_adapter 结构体定义在 include/linux/i2c.h 文件中,结构体内容如下: /*...Linux I2C总线的运行机制: 注册I2C驱动 将I2C驱动添加到I2C总线的驱动链表中 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe

    3.5K20

    Linux的I2C驱动框架分析

    如I2C总线、USB总线、PCI总线等等。以I2C总线为例,在同一组I2C总线上连接着不同的I2C设备。 设备 设备代表真实的、具体的物理器件,在软件上用器件的独特的参数属性来代表该器件。...Linux总线设备框架的工作原理 如果想要弄清楚I2C驱动框架,必须深刻的理解Linux的总线设备框架。之所以会形成这样的框架,很重要的原因是为了代码的复用性。...为了提高驱动的可移植性,Linux抽象出一套管理资源的函数。设备是存在的硬件,在设备里包含自己的属性,也包含需要用到的资源。...3.Linux下I2C驱动程序的体系结构 ---- 对于Linux下的I2C驱动,其体系结构的组成主要分为三个部分 (1)I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法...(3)I2C设备驱动:I2C设备驱动(也称为客户驱动)是对I2C硬件体系结构中设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据。 ?

    5.9K11

    Linux驱动之I2C子系统剖析

    (比如E2PROM驱动) I2C核心层: drivers/i2c/i2c-coere.c I2C总线驱动层(主机控制器驱动层):drivers/i2c/busses/i2c-s3c2410.c I2C设备驱动层...这种方式仅仅只是封装了I2C的基本操作,相当于只是封装了I2C的基本时序,向应用层只提供了I2C基本操作的接口,该接口通用于所有的I2C设备。...I2C核心层 注册I2C总线 由内核开发人员编写的,不涉及具体硬件 给驱动编程人员提供编程接口 I2C总线驱动层 是I2C主机适配器的驱动程序 初始化I2C适配器(控制器) 实现操作方法:根据I2C操作时序进行操作...= i2c_device_remove, .shutdown = i2c_device_shutdown, .pm = &i2c_device_pm_ops, }; 根据Linux...核心层分析可知,I2C总线是根据id_table进行匹配,所以这里并不会按照常规的Linux驱动模型进行match后probe,况且这个驱动里也没有probe方法。

    7.6K20

    基于瑞芯微RV1109 Linux触摸屏GT911驱动调试心得

    1、确定I2C地址 1.1、使用i2cdetect工具查看系统i2c节点的情况 很明显这里可以看到系统已经配置了i2c-0、i2c-1、i2c-3、i2c-4、i2c-5,我们可以看下原厂在设备树里面的支持情况...节点注册成功了,说明I2C部分是没有问题的。...: 上图中: “--”表示没有这个地址对应的 I2C设备; “UU”表示这个地址的 I2C 设备已经有驱动在使用占用它了,那这个I2C 设备肯定是存在的; 其他数值表示该地址对应的 I2C 设备是存在的...2、GT911驱动移植 2.1、配置Linux内核支持gt9xx GT911在Linux内核中已经支持了,位于以下路径,如果没有的话就需要跟触摸屏厂商要驱动代码,如果要不到那么就拿着Datasheet自己干吧...由1部分我们已经知道“UU”表示这个地址的 I2C 设备已经有驱动在使用占用它了,那这个I2C 设备肯定是存在的;也就是说这个设备已经挂载成功了。

    10.7K70

    MS1112芯片ADC采样测试

    stdlib.h> #include #include #include #include #include linux...= 3) { perror("Failed to read from the i2c bus....(注:上面显示设备地址的就是设备在位,并且没有被Linux系统内核使用; 如果是 UU, 就表示设备在位但被Linux内核使用了; 如果是 --, 就表示这个设备地址上没有设备在位;) 用逻辑分析仪抓波形...: 问题解决 我把这个现象反应到项目leader,项目leader让硬件工程师去排查,看了原理图发现i2c信号上,有4.7k/4.7k/1.5k,三个电阻并联上拉,大概就是915欧姆,使得i2c信号上的上拉太强了...,导致i2c总线异常,扫描时收到错误的报文,有重发机制,所以能读到,但是很慢,于是把底板上上拉电阻都去掉。

    8410

    手把手教你使用 i2c-tools

    i2c-tools 工具是一个专门调试 i2c 的,开源,可获取挂载的设备及设备地址,还可以读写 I2C 设备寄存器。 调试新的设备驱动时,难免要反复修改寄存器,然后看结果现象。...i2cdetect:用于扫描 i2c 总线上的设备,并显示地址 i2cset:设置i2c设备某个寄存器的值 i2cget:读取i2c设备某个寄存器的值 i2cdump:读取某个i2c设备所有寄存器的值...i2ctransfer:一次性读写多个字节 该工具原本是在 Linux 上使用,因为 Android 系统的内核也是 Linux,故很方便的可以移植到 Android 中。.../i2cdetect -r -y 0 -- 表示该地址被检测,但是没有芯片应答,UU 表示该地址被当前内核驱动使用。...设备地址 data-address:i2c寄存器地址 mode:指定读取的大小,b字节,w字,s是SMBus块,i是i2c块 读取i2c-1上0x20器件的0x77寄存器值 .

    3.3K11

    I2C总线架构 之 I2C核心

    引言 在之前的 「《I2C总线架构 之 设备驱动》」 和 「《I2C总线架构 之 总线驱动》」 中一再提到i2c核心,本篇文章就总结一下i2c核心的主要功能。...分层思想 在之前的篇章中,大致能够了解i2c核心功能主要是为i2c设备驱动和i2c总线驱动的注册操作提供API。这种设计的好处在于实现:高内聚,低耦合。...i2c总线与i2c设备相互独立,互无联系;两者都是通过调用i2c核心提供的API实现匹配。即两者只与i2c核心有联系,这样也就可以实现一个固定i2c总线驱动可以和任一符合条件的设备驱动匹配。...然后将i2c_client注册到Linux。 bus_for_each_drv:匹配机制。...pinctrl-0 = ; }; }; 以上设备树代码记录i2c2总线下挂接的2个硬件设备信息;linux

    3.1K21

    【分享】i2c地址0x80导致Linux i2c驱动的probe函数不能被执行

    作者: 付汉杰 hankf@xilinx.com hankf@amd.com 测试环境: Vivado/PetaLinux 2021.2, Linux 5.10.0 在给Xilinx Versal的Linux...检查编译过程,i2c驱动被编译成了ko文件。 检查编单板的文件系统,i2c驱动已经在文件系统中。 手动加载ko文件,linux报告驱动已经存在。...卸载驱动后,再手动加载ko文件,执行正常,linux没有报告错误。检查内核输出,没有probe里的printk打印,即使是err级别的打印信息。...交换能正常加载的i2c驱动和新驱动的i2c地址,新驱动的probe函数能被执行,原来能正常加载的i2c驱动的probe函数也不能被执行。这说明probe和地址有关。...检查linux内核信息,由警告说0x80是无效地址。 原来设备树根据厂商的手册,把i2c的地址设置成了0x80。0x80可能是计算了r/w位的值,真实地址是0x40。

    2.4K30

    I2C 同步串行总线

    I2C 概述 I2C(Inter Integrated Circuit)集成电路间总线是由 Philips 公司开发的一种简单、双向二线制同步串行总线。I2C 以主从方式工作。...I2C 的通信方式为半双工,因为只有一根 SDA 线,所以在同一时间内只可以单向通信。...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

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

    简述I2C的linux驱动 1) I2C核心层: 2) I2C总线驱动层: 3) I2C总线驱动层: 12.3 在linux应用层使用I2C 12.3.1 如何使用I2C tools测试I2C外设 1...12.2.2 简述I2C的linux驱动 ​ I2C在linux内核层的驱动框架主要由三部分组成: 1) I2C核心层: ​ I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(algorithm...12.3 在linux应用层使用I2C ​ 前面我们讲解了I2C的协议及在linux驱动框架,那么当你拿到开发板或者是从公司的硬件同事拿到一个带有I2C外设的板子,我们应该如何最快速的使用起来这个I2C...可通过控制台输入i2cdetect -y 1:(其中"–"表示地址被探测到了,但没有芯片应答; "UU"因为这个地址目前正在被一个驱动程序使用,探测被省略;而16进制的地址号60,1e和50则表示发现了一个外部片选从地址为...而且众所周知,在linux系统中,每一个设备都是以文件的形式存在的,所以在linux中操作I2C外设就变成了操作I2C适配器设备文件。

    4.5K31
    领券