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

I2C总线架构 之 设备驱动

添加硬件信息(设备树) b. 搭建驱动框架 c. 构建i2c_driver,并注册到linux i2c中 d. 注册字符设备 e. 向应用层提供i2c设备操作接口 f....添加硬件信息设备树(设备树) 首先观察硬件i2c设备挂载到哪个i2c总线上,然后在设备树文件找到该总线的设备节点,在节点下创建子节点描述i2c设备硬件信息即可。...而在Linux中,如何与i2c设备的具体通信已经被封装成固定的API,在程序中填充这些API的数据参数调用即可,列举读写单个字节的实现: static int ap3216c_read_regs(struct...由于Linux内部的实现较为复杂,本篇主要以设备驱动的角度来分析整个驱动的代码走向,涉及到内部API的实现,本篇只大概介绍其功能,剩余部分会放在i2c核心继续分析。...参考: 《Linux设备驱动开发详解》 《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.4》 https://blog.csdn.net/Egean/article/details/81085077

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

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

I2C外设 1) 确定I2C适配器的设备文件节点 2) 打开适配器对应的设备节点 3) IOCTL控制 4) 使用I2C协议和设备进行通信 5) 用read和write读写I2C设备 6) 用数据包的方式操作...Linux系统(也就是内核)为每个I2C适配器生成了一个主设备号为89的设备节点(次设备号为0-255),它并没有针对特定的I2C外设而设计,只是提供了通用的read(),write(),和ioctl(...操作流程: 1) 确定I2C适配器的设备文件节点i2c适配器的设备节点是/dev/i2c-x,其中x是数字。...当用户关闭设备节点时,它自动被释放。 3) IOCTL控制 ​ 这个可以参考内核源码中的include/linux/i2c-dev.h文件。.../i2c-dev.h> 07 #include 08 09 /* eeprom所对应的I2C控制器的设备节点 */ 10 #define EEPROM_DEVICE

3.4K31

I2C 子系统(九)

比较 I2C 设备节点的 compatible 属性和 of_device_id 中的 compatible 属性是否相等,如果相当的话就表示 I2C 设备和驱动匹配。.../11f00000.i2c6/i2c-6/6-0058 ,这里是挂在某个 i2c bus 上的,从机地址为 0x58 的设备节点。...到这里,大家应该能看懂下图,这些节点I2C 控制器驱动加载时,自动创建的。大家在 I2C 控制器的子节点中声明的 I2C 从机设备,也会在这一步创建节点。...因此,对于 Linux 来讲,不区分 I2C 控制器和 I2C 从机设备,用的都是同一套东西,即【总线、设备、驱动】框架,都有 probe 函数。...然后主设备开始传送寄存器地址 (RA),接到应答后,开始传送寄存器数据,然后仍然要有应答信号,连续写入多字节时依次推。

1.2K20

13 - sysfs设备节点的创建

实际项目过程中应用层需要操作内核中GPIO, 除了应用层直接通过export方式操作,具体操作方法[Linux驱动炼成记] 02-用户空间控制GPIO, 还可以通过sysfs设备节点方式操作...&dev_attr_key_trigger_tool); if (ret){ dev_err(dev, "Failed to device create file: %d\n",ret); } 定义设备属性..., _store) // 按键中具体实现, 相当于在 /sys/devices/platform/gpio_keypad/key_trigger_tool 创建了key_trigger_tool设备节点...__,value,key_trigger_pin); //返回GPIO状态 return snprintf(buf,PAGE_SIZE,"%d\n",value); } 到这里为止,驱动中的按键的设备节点已经创建...,应用层完全可以操作设备节点 //获取按键的状态 cat /sys/devices/platform/gpio_keypad/key_trigger_tool 执行这条命令之后,就会调用驱动中key_attribute_trigger

2.8K20

Linux系统驱动之无需编写驱动直接访问设备_I2C-Tools介绍

视频观看 百问网驱动大全 无需编写驱动直接访问设备_I2C-Tools介绍 参考资料: Linux驱动程序: drivers/i2c/i2c-dev.c I2C-Tools-4.2: https://...使用I2C-Tools操作传感器AP3216C 百问网的开发板上有光感芯片AP3216C: AP3216C是红外、光强、距离三合一的传感器,以读出光强、距离值为例,步骤如下: 复位:往寄存器0写入...0x4 使能:往寄存器0写入0x3 读光强:读寄存器0xC、0xD得到2字节的光强 读距离:读寄存器0xE、0xF得到2字节的距离值 AP3216C的设备地址是0x1E,假设节在I2C BUS0上,操作命令如下...I2C-Tools的访问I2C设备的2种方式 I2C-Tools可以通过SMBus来访问I2C设备,也可以使用一般的I2C协议来访问I2C设备。...i2c-dev.c提供为每个I2C控制器(I2C Bus、I2C Adapter)都生成一个设备节点:/dev/i2c-0、/dev/i2c-1等待 open某个/dev/i2c-X节点,就是去访问该I2C

1.5K42

Linux音频系统编程之芯片平台适配功放Codec Driver解读

Codec 绑定用的节点配置确认(外挂 Codec 的 codec name 与 codec_dai name 可通过外挂 Codec 驱动源码等方式确认); 外挂 Codec 的相关节点配置添加确认...端本身就没有回ACK,表现为I2C_ACKERR,大多是slave(从设备)问题,从设备上电是否符合SPEC等; 另外一种就是问题出在在master端(我们的CPU),表现为I2C_TIMEOUT。...在I2C bus没有上电的情况下去操作I2C 可通过外挂 Codec 提供的模块寄存器调试节点,实时操作节点来读写外挂 Codec 寄存器来确认 I2C 通讯是否正常; 如果I2C 不通,可通过i2c-tool...按照Codec Datasheet 配置 I2C 从机地址,但I2C 一直Timeout 查看硬件电路 I2C SCK / SDA 是否接反以及从机设备供电是否正常 按照Codec Datasheet...配置 I2C 从机地址,当频繁的操作I2C 的时候,出现少部分写入Timeout 查看从机设备的上拉电阻是否按照Datasheet 标准来的 按照流程配置好Codec的音频通路以及I2C Addr

2.2K30

手把手创建Linux设备属性节点,触发cat, echo操作

手把手教你在 Linux 中创建节点,使其可以进行 cat 和 echo 。...我们测试驱动加载是否正常工作,一般都会写应用程序去测试,这样驱动程序中需要实现 open、read 函数和 write 函数,然后写一个应用程序通过 open 打开节点,获取 fb 文件描述符,进而对文件进行读写操作...这里我介绍另外一种方法,我们可以在驱动中实现 show_xxx 和 set_xxx 函数,使这个节点可以进行 cat 和 echo 操作,源码如下: test.c #include <linux/module.h...buf, size_t len) { sprintf(mybuf, "%s", buf); return len; } //定义一个名字为my_device_test的设备属性文件...mydev = device_create(cls, 0, MKDEV(major,0),NULL,"mytest_device"); //在mytest_device设备目录下创建一个

3.1K20

Linux节点inode

Linux节点 inode inode是存储文件元信息的区域,中文译名为“索引节点”。所谓元信息,即文件的创建者、创建日期、文件的大小等等。...包含文件的元信息有以下内容: 文件名以及文件的大小(字节数),链接数,Uid 文件拥有者的ID,Gid 文件所属组的ID 文件的权限,包括读写执行权限(rwx) inode文件数据块的位置、数据块数、IO块大小、设备号码...最近访问时间、最近更改时间、最近变动时间 inode占用硬盘空间,每个inode节点的大小,一般是128字节或256字节。...inode节点的总数,在格式化的时候就给定,一般是1KB或每2KB就设置一个inode。 查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。...Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

6K30

【玩转ESP32】6、驱动i2c设备

前言:在上文中聊了i2c-tools,主要使用命令行,本文使用代码驱动设备。...本文以驱动oled展开,关于oled的详细说明,可查看一文彻底了解SSD1306驱动0.96寸OLED,在这里只聊esp32的i2c如何使用。...1、初始化 (1)配置i2c:指定i2c的引脚、模式、速率等; (2)安装i2c驱动:设置发送、接收缓冲,指定中断等; 这个代码基本是固定的,当做主机的时候都可以使用以下代码来初始化 static esp_err_t...(1)创建一个句柄 (2)产生起始信号 (3)写设备地址 (4)写数据 (5)结束信号 (6)主机发送命令,通知阻塞任务 (7)删除句柄 其中2、3、4、5属于标准i2c的流程,1、6、7属于esp32...(1)创建一个句柄 (2)产生起始信号 (3)写设备地址 (4)读数据 (5)结束信号 (6)主机发送命令,通知阻塞任务 (7)删除句柄 其中2、3、4、5属于标准i2c的流程,1、6、7属于esp32

1.7K20

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

前面我们学习了RTT的ADC设备的使用,文章链接: RT-Thread ADC设备学习笔记 I2C的基本原理之前在公众号就有相应的文章了,很早之前发的,接下来我们来学习RT-Thread I2C总线设备的使用...本节,我们将会学习到RT-Thread I2C总线设备的基本使用。 接下来,我们将基于RT-Thread Studio来构建。...I2C设备驱动使用起来非常简单,就两个接口,分别是: rt_device_find rt_i2c_transfer 接口1:rt_device_find 查找 I2C 总线设备 rt_device_t...rt_device_find(const char* name); 参数 描述 name I2C 总线设备名称 返回 —— 设备句柄 查找到对应设备将返回相应的设备句柄 RT_NULL 没有找到相应的设备对象..._t flags; /*I2C设备参数*/ rt_uint16_t addr; /*I2C设备地址*/

1.5K20

手把手教你使用 i2c-tools

i2ctransfer:一次性读写多个字节 该工具原本是在 Linux 上使用,因为 Android 系统的内核也是 Linux,故很方便的可以移植到 Android 中。.../i2cdetect -l 检测当前系统有几组i2c总线 i2cset:向i2c设备某个寄存器写入值 Usage: i2cset [-f] [-y] [-m MASK] [-r] [-a] I2CBUS...[Y/n] Y,不加参数y会有很多执行提示,可以帮助判断 r:写入后立即回读寄存器的值,并将结果与写入的值进行比较 i2cbus:总线编号 chip-address:i2c设备地址...data-address:i2c寄存器地址 value 要写入的值 mode:指定读取的大小,b字节,w字,s是SMBus块,i是i2c块 设置i2c-1上0x20器件的0x77...备注: i2c-tools 是通过操作 /dev 路径 i2c-× 设备文件完成,因此你的 kernel 必须开启 CONFIG_I2C_CHARDEV 宏控,否者会报找不到节点

2.2K11

Linux系统驱动之I2C协议

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

2.8K20

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 I2C总线的运行机制: 注册I2C驱动 将I2C驱动添加到I2C总线的驱动链表中 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe...对于我们 I2C 设备驱动编写人来说,重点工作就是构建i2c_driver,构建完成以后需要向Linux内核注册这个i2c_driver。 那么如何注册呢?

2.9K20

Linux系统驱动之I2C系统驱动程序模型

视频观看 百问网驱动大全 I2C系统驱动程序模型 参考资料: Linux内核文档: Documentation\i2c\instantiating-devices.rst Documentation...\i2c\writing-clients.rst Linux内核驱动程序示例: drivers/eeprom/at24.c 1....I2C驱动程序的层次 I2C Core就是I2C核心层,它的作用: 提供统一的访问函数,比如i2c_transfer、i2c_smbus_xfer等 实现I2C总线-设备-驱动模型,管理:I2C设备(...I2C总线-设备-驱动模型 2.1 i2c_driver i2c_driver表明能支持哪些设备: 使用of_match_table来判断 设备树中,某个I2C控制器节点下可以创建I2C设备节点...如果I2C设备节点的compatible属性跟of_match_table的某项兼容,则匹配成功 i2c_client.name跟某个of_match_table[i].compatible

2.6K40

linux 存储设备

存储结构与管理硬盘一、添加硬盘设备一、添加硬盘设备添加硬盘设备的操作思路:首先需要在虚拟机中模拟添加入一块新的硬盘存储设备,然后再进行分区、格式化、挂载等操作,最后通过检查系统的挂载状态并真实地使用硬盘来验证硬盘设备是否成功添加...fdisk命令用于新建、修改及删除磁盘的分区表信息分区 [root@rhel ~]# fdisk /dev/sdb 依次输入 p n p 1 +1024G 回车 p w Linux...、挂载硬件设备一般的硬盘设备都是以“/dev/sd”UUID是一串用于标识每块独立硬盘的字符串,具有唯一性及稳定性,特别适合用来挂载网络设备挂载硬件设备步骤1....-f模拟设备损坏-r移除设备-Q查看摘要信息-D查看详细信息-S停止RAID磁盘阵列mdadm命令用于创建、调整、监控和管理RAID设备,英文全称为“multiple devices admin”,语法格式为...这虽然不比LVM灵活,但起码也够用[root@rhel ~]# mkdir /LVM[root@rhel ~]# mount /dev/storage/vo /LVM第5步:查看挂载状态,并写入配置文件

12.2K20
领券