当前位置:网站首页>I2C驱动实现的两种思路(i2c-dev.c和i2c-core.c)
I2C驱动实现的两种思路(i2c-dev.c和i2c-core.c)
2022-06-21 06:40:00 【正在起飞的蜗牛】
1、将I2C控制器暴露给应用的方式(i2c-dev.c)
(1)i2c-dev.c方式的思想就是提供和I2C总线上设备的收发数据的方式,但是不负责具体时序或者业务,具体的时序和业务由上层业务去实现;
(2)这种方式的体现方式:在注册I2C驱动后,会看到"/dev/i2c-n(n=0,1,2······)"设备节点,用于通过打开设备节点,然后通过read、write、ioctl等接口去和I2C接口的设备通信;
(3)这种方式并不常用,因为要把操作具体硬件的时序放到应用去实现,要求应用开发人员既要了解具体的硬件操作时序,也要了解I2C总线协议。而一般时序都是要放到驱动程序去实现,尽量对应用屏蔽硬件的差异;
(4)比如读取数据:应用先open打开设备节点,然后ioctl设置要操作的设备在I2C总线上的地址,最后按照I2C总线协议和设备之间读/写数据;
重点:这种方式就是直接提供给应用I2C控制器的操作方法,每一个"/dev/i2c-n(n=0、1、2、······)",每一个设备节点就代表Soc中的一个I2C控制器,应用可以通过操作设备节点也就是操作I2C控制器,去和挂载在I2C总线上的从设备进行通信;
2、将I2C控制器抽象成公共驱动的方式( i2c-core.c)
(1)将I2C通信时序抽象成单纯的读写接口,供I2C接口设备驱动进行调用,这种方式一般都是和其他的驱动框架一起使用;
(2)这种方式实现的I2C驱动相当于把内核中I2C通信给抽象出来,因为所有的I2C接口设备都是采用I2C总线协议进行通信,那我们就将I2C通信抽象成一个供其他I2C接口设备驱动调用的基础功能驱动;
(3)相当于把I2C驱动作为一种共用的驱动进行实现,类似于platform总线,可以不涉及具体的硬件差异,所有I2C接口的设备都可以共用I2C驱动进行读写数据;
(4)例如I2C接口的触摸屏:应用操作触摸屏是通过input子系统进行操作的,通过open"/dev/eventn"设备节点,应用只需要接受上报的输入事件,并不关心触摸屏是怎么上报的,甚至都不知道触摸屏是使用I2C总线和主机进行数据交互;
3、两种方式的比较
(1)i2c-dev.c的方式把I2C设备的操作方法暴露给应用,具体操作硬件的时序由应用控制,可以做一些非标准I2C协议的功能,但是增加应用开发的难度和工作量,并不常用;
(2)将I2C控制器抽象成公共驱动供其他驱动调用的方式,向应用屏蔽了I2C通信的内容,简化了应用的开发难度;
(3)将I2C控制器抽象成公共驱动供其他驱动调用的方式,I2C驱动本身的框架比较复杂,增加负责驱动开发的人员学习难度;
(4)i2c-dev.c的方式最终也是调用i2c-core.c文件的接口,只是进行了封装;
边栏推荐
- Are you sure about this filter?
- 打造硬核敲门砖——简历
- 数据可视化实战:数据处理
- PyG教程(1):初识Pytorch Geometric
- (programming exercises of various regular numbers) the prime number in the output range, the factorization prime factor of an integer, the maximum common divisor and minimum common multiple of two num
- [graduation season] a brief talk on the learning experience before sophomore year
- 【基于栈的二叉树中序遍历】二叉树的中序遍历+栈,O(h)的空间复杂度
- 双列集合(Map集合)
- Sqlmap command Encyclopedia
- 【MySQL】数据库多表操作通关教程(外键约束、多表联合查询)
猜你喜欢

不给糖就捣蛋svg万圣节js特效
![Small program [phase I]](/img/2d/1319e630f133e85dd8dd191a78a87d.png)
Small program [phase I]

Use the loupe cell browser to view the results of 10x single cell transcriptome analysis

PyG教程(2):图数据

Geo2r: difference analysis of data in geo database

Course design of simulated bank deposit and withdrawal management system in C language (pure C language version)

Mysql database foundation: connection query

Issue 12: Spark zero foundation learning route

156 rust and Solana environment configuration

浅了解泛型机制
随机推荐
第8期:云原生—— 大学生职场小白该如何学
scikit-learn中的Scaler
Mysql database foundation: connection query
Issue 12: Spark zero foundation learning route
C语言程序设计——三子棋(学期小作业)
Sqlmap命令大全
Summary of each layer of the five layer reference model
Excel_submit
NOP法破解简易登录系统
MySQL使用什么作为主键比较好
PyG教程(2):图数据
PyG教程(1):初识Pytorch Geometric
TweenMax示波器3d动画
Filtre Bloom
C skill tree evaluation
How to select PostgreSQL and MySQL
Leetcode database mysql topic (difficulty: simple)
Sqlmap tool
Two column set (map set)
Pyg tutorial (3): neighbor sampling