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

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

第一时间看干货文章 1 Linux内核将 I2C 驱动分为两部分: I2C 总线驱动I2C总线驱动就是SOC的 I2C控制器驱动,也叫做 I2C适配器驱动。...I2C驱动 i2c_driver 类似 platform_driver,是我们编写 I2C 设备驱动重点要处理的内容, i2c_driver 结构体定义在 include/linux/i2c.h 文件中...Linux I2C总线的运行机制: 注册I2C驱动I2C驱动添加到I2C总线的驱动链表中 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe...对于我们 I2C 设备驱动编写人来说,重点工作就是构建i2c_driver,构建完成以后需要向Linux内核注册这个i2c_driver。 那么如何注册呢?...设备驱动的时候需要将前面注册的 i2c_driver 从 Linux 内核中注销掉,需要用到i2c_del_driver 函数,此函数原型如下: void i2c_del_driver(struct

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

LinuxI2C驱动框架分析

Linux总线设备框架的工作原理 如果想要弄清楚I2C驱动框架,必须深刻的理解Linux的总线设备框架。之所以会形成这样的框架,很重要的原因是为了代码的复用性。...因为驱动和设备的关系是一对多的,对于相同类型的不同的设备,可共用同一套驱动程序接口。为了提高驱动的可移植性,Linux抽象出一套管理资源的函数。...在传输过程中,需要注意以下三种类型的信号: (1)开始信号(S):SCL为高电平时,SDA由高向低电平跳变,开始传输数据 (2)结束信号(P):SCL为高电平时,SDA由低向高电平跳变,结束传输数据 (...3)响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA的电平 ?...3.LinuxI2C驱动程序的体系结构 ---- 对于Linux下的I2C驱动,其体系结构的组成主要分为三个部分 (1)I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法

4.6K11

Linux系统驱动I2C协议

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 I2C协议 参考资料: i2c_spec.pdf 1....数据发送完之后,主芯片就会发送一个停止信号。 下图:白色背景表示"主→从",灰色背景表示"从→主" 3.3 I2C信号 I2C协议中数据传输的单位是字节,也就是8位。...主设备不驱动三极管 从设备决定数据,要发出回应信号的话,就驱动三极管让SDA变为0 从这里也可以知道ACK信号是低电平 从上面的例子,就可以知道怎样在一条线上实现双向传输,这就是SDA上要使用上拉电阻的原因...当它就绪后,就可以不再驱动三极管,这是上拉电阻把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 文件中...Linux I2C总线的运行机制: 注册I2C驱动I2C驱动添加到I2C总线的驱动链表中 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe...对于我们 I2C 设备驱动编写人来说,重点工作就是构建i2c_driver,构建完成以后需要向Linux内核注册这个i2c_driver。 那么如何注册呢?...设备驱动的时候需要将前面注册的 i2c_driver 从 Linux 内核中注销掉,需要用到i2c_del_driver 函数,此函数原型如下: void i2c_del_driver(struct

2.9K20

Linux驱动实践:驱动程序如何发送【信号】给应用程序?

目录 kill 命令和信号 使用 kill 命令发送信号 多线程中的信号 信号注册和处理函数 驱动程序代码示例:发送信号 功能需求 驱动程序代码 驱动模块 Makefile 编译和加载 应用程序代码示例...在 Linux 系统中,所有的信号都使用一个整型数值来表示,可以打开文件 /usr/include/x86_64-linux-gnu/bits/signum.h(你的系统中可能位于其它的目录) 查看一下...编译、执行: $ gcc app_handle_signal.c -o app_handle_signal $ ./app_handle_signal 此时,应用程序开始执行,等待接收信号。...| O_NDELAY)) < 0){ printf("open dev failed!.../mysignal 根据刚才驱动程序的代码,当驱动程序接收到设置PID的命令之后,会立刻发送两个信号: 先来看一下 dmesg 中驱动程序的打印信息: 可以看到:驱动把这两个信号(10 和 12)

2.7K30

Linux驱动I2C子系统剖析

I2C是广泛应用于计算机中的串行总线,用于处理器和其外设之间的通信。 I2C硬件基本概念 I2C总线由两根传递数据的双向信号线与一根地线组成,半双工、主从方式通信。...一般在驱动中无需关心具体时序,只需操作SoC中的I2C控制器即可,只有在裸机下需要用GPIO模拟I2C通信时才需用到,所以笔者在本文不阐述I2C时序(其实就是懒 O__O “…)。...= i2c_device_shutdown, .pm = &i2c_device_pm_ops, }; 根据Linux设备驱动模型的原理,I2C总线下会挂载两条链表,分别为设备链和驱动链...进行赋值,从上文在I2C核心层分析可知,I2C总线是根据id_table进行匹配,所以这里并不会按照常规的Linux驱动模型进行match后probe,况且这个驱动里也没有probe方法。...该函数还设置了I2C控制器的从地址,该地址用来在控制器作为从地址时使用,但是这种情况的出现微乎其微。除此之外使能Tx/Rx Interrupt和ACK信号,配置了I2C的时钟频率。

6.4K20

Linux系统驱动I2C视频介绍

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...AT24C02驱动: 它知道AT24C02要求的地址、数据格式 它知道发出什么信号才能让AT24C02执行擦除、烧写工作 它知道怎么判断数据是否烧写成功 它构造好一系列的数据,发给I2C控制器...I2C控制器驱动 它根据I2C协议发出各类信号I2C设备地址、I2C存储地址、数据 它根据I2C协议判断 3....我们讲什么 3.1 对于Linux 从上到下: 先讲I2C协议 APP可以通过两类驱动程序访问设备 I2C设备自己的驱动程序 内核自带的i2c-dev.c驱动程序,它是i2c控制器驱动程序暴露给用户空间的驱动程序...(i2c-dev.c) I2C Device Driver I2C设备自己的驱动程序 内核自带的i2c-dev.c驱动程序,它是i2c控制器驱动程序暴露给用户空间的驱动程序(i2c-dev.c)

2.3K40

Linux信号信号产生&&信号处理&&信号保存&&信号详解

> int main() { while (1) { printf("I am a process, I am waiting signal!...Linux是这样实现的:常规信号在递达之前产生多次只计一次,而实时信号在递达之前产生多次可以依次放在一个队列里 3.3 sigset_t 从上图来看,每个信号只有一个bit的未决标志,非0即1,不记录该信号产生了多少次...= 0; i <= 31; i++) sigaction(i, &act, &oact); while(true) { std::cout << "I...O库函数。...标准I/O库的很多实现都以不可重入的方式使用全局数据结构 4.4 volatile volatile 作用:保持内存的可见性,告知编译器,被该关键字修饰的变量,不允许被优化,对该变量的任何操作,都必须在真实的内存中进行操作

11810

Linux系统驱动之使用GPIO模拟I2C的驱动程序分析

视频观看 百问网驱动大全 使用GPIO模拟I2C的驱动程序分析 参考资料: i2c_spec.pdf Linux文档 Linux-5.4\Documentation\devicetree\bindings...\i2c\i2c-gpio.yaml Linux-4.9.88\Documentation\devicetree\bindings\i2c\i2c-gpio.txt Linux驱动源码 Linux...-5.4\drivers\i2c\busses\i2c-gpio.c Linux-4.9.88\drivers\i2c\busses\i2c-gpio.c 1....1.2 I2C信号 I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。传输时,先传输最高位(MSB)。...主设备不驱动三极管 从设备决定数据,要发出回应信号的话,就驱动三极管让SDA变为0 从这里也可以知道ACK信号是低电平 从上面的例子,就可以知道怎样在一条线上实现双向传输,这就是SDA上要使用上拉电阻的原因

3.1K32

Linux进程信号信号产生】

---- 前言 在 Linux 中,进程具有独立性,进程在运行后可能 “放飞自我”,这是不利于管理的,于是需要一种约定俗成的方式来控制进程的运行,这就是 进程信号,本文将会从什么是进程信号开篇,讲述各种进程信号的产生方式及作用...可以通过 man 7 signal 进行查询 man 7 signal 简单总结一下,1~31 号信号对应的功能如下(表格内容引用自 2021dragon Linux中的31个普通信号信号编号 信号名...21 SIGTTIN 后台进程读终端控制台时,由终端驱动程序产生此信号并发送给该后台进程,该信号的默认处理动作是暂停进程 22 SIGTTOU 后台进程向终端控制台输出数据,由终端驱动程序产生此信号并发送给该后台进程...,该信号的默认处理动作是忽略 29 SIGIO 此信号指示一个异步 I/O 事件,该信号的默认处理动作是终止进程 30 SIGPWR 电源故障,该信号的默认处理动作是终止进程 31 SIGSYS 该信号指示一个无效的系统调用..." << endl; } int main() { //给所有普通信号注册新方法 for(int i = 1; i < 32; i++) signal(i, handler

25310

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券