首页 > 其他分享 >编写设备驱动之i2c_driver -9

编写设备驱动之i2c_driver -9

时间:2023-07-30 19:34:29浏览次数:31  
标签:I2C driver source 寄存器 编写 i2c AP3216C

参考资料:

  • Linux内核文档:

    • Documentation\i2c\instantiating-devices.rst

    • Documentation\i2c\writing-clients.rst

  • Linux内核驱动程序示例:

    • drivers/eeprom/at24.c

  • 本节代码:GIT仓库中

    • 框架:

      • IMX6ULL\source\04_I2C\02_i2c_driver_example

      • STM32MP157\source\A7\04_I2C\02_i2c_driver_example

    • AP3216C

      • IMX6ULL\source\04_I2C\03_ap3216c

      • STM32MP157\source\A7\04_I2C\03_ap3216c

1. 套路

1.1 I2C总线-设备-驱动模型

 

1.2 示例

分配、设置、注册一个i2c_driver结构体,类似drivers/eeprom/at24.c

 

在probe_new函数中,分配、设置、注册file_operations结构体。 在file_operations的函数中,使用i2c_transfer等函数发起I2C传输。

 

2. 编写i2c_driver

2.1 先写一个框架

2.2 在为AP3216C编写代码

百问网的开发板上有光感芯片AP3216C:

 

AP3216C是红外、光强、距离三合一的传感器,以读出光强、距离值为例,步骤如下:

  • 复位:往寄存器0写入0x4

  • 使能:往寄存器0写入0x3

  • 读红外:读寄存器0xA、0xB得到2字节的红外数据

  • 读光强:读寄存器0xC、0xD得到2字节的光强

  • 读距离:读寄存器0xE、0xF得到2字节的距离值

AP3216C的设备地址是0x1E。

 

3. 构造i2c_client

下节视频。

标签:I2C,driver,source,寄存器,编写,i2c,AP3216C
From: https://www.cnblogs.com/liusiluandzhangkun/p/17591858.html

相关文章

  • 通用驱动i2c-dev分析
    参考资料:Linux驱动程序:drivers/i2c/i2c-dev.cI2C-Tools-4.2:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/AT24cxx.pdf1.回顾字符设备驱动程序怎么编写字符设备驱动程序?确定主设备号创建file_operations结构体在里面填充drv_open/dr......
  • 3-2 编写一个函数 escape(s, t),将字符串 t 复制到字符串 s 中,并在复制 过程中将换行
    ArchlinuxGCC13.1.1 202304292023-07-3012:57:46星期日 点击查看代码#include<stdio.h>voidescape(chars[],chart[]){inti,j;i=j=0;while(t[i]!='\0'){switch(t[i]){case�......
  • 使用python基于boto3和tkintrer模块-编写一个AWS-EC2的管理器界面
    当我们管理自己AWS账号下的EC2资源时,一般都是登录到Console界面进行管理笔者自己的AWS经常是用于做一些实验时,才会去创建EC2,部署一些环境等,为了不用登录Console操作于是使用python,tkinter模块写了一个GUI的管理工具,先看一下整体界面如下:这个小工具,有创建EC2,查询EC2,删除指......
  • Adobe InCopy 2023 v18.3 (macOS, Windows) - 编写和副本编辑软件
    AdobeInCopy2023v18.3(macOS,Windows)-编写和副本编辑软件Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、AdobeXD......
  • 使用Delphi编写DLL劫持内存补丁
    在有些破解程序时,不能暴力修改程序,修改后,程序就不能正常运行,因为很多程序启动时有自我的校验,但是当程序加载到内存后,在内存中修改相应的地方就可以达到破解的效果。那么怎样在不破坏程序的前提下,达到修改程序呢?当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址......
  • Android JNI 编写方法
    JavaNativeInterface(JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI是本地编程接口,它使得在Java虚拟机(VM)内部运行的Java代码能够与用其它编程语言(如C、C++和汇编语言)编写的应用程序和库进行交互操作。1.Java方式实现JNI,函数路径匹配......
  • python教程 入门学习笔记 第2天 第一个python程序 代码规范 用默认的IDLE (Python GUI
    四、第一个python程序1、用默认的IDLE(PythonGUI)编辑器编写2、在新建文件中写代码,在初始窗口中编译运行3、写完后保存为以.py扩展名的文件4、按F5键执行,在初始窗口观看运行结果5、代码规范:1)先保存再执行2)一句代码单独占一行3)语法中的符号,必须使用英文4)代码前面不能有......
  • 编写Linux内核模块
    Linux系统为应用程序提供了功能强大且容易扩展的API,但在某些情况下,与硬件交互或进行需要访问系统中特权信息的操作时,就需要一个内核模块。Linux内核模块是一段编译后的二进制代码,直接插入Linux内核中。在Ring0上运行。 1.安装开发环境(Ubuntu为例)sudoapt-getinsta......
  • 如何编写难以维护的React代码?耦合组件
    如何编写难以维护的React代码?耦合组件在许多项目中,我们经常会遇到一些难以维护的React代码。其中一种常见的情况是:子组件直接操作父组件方法,从而导致父子组件深度耦合。这样的实现让子组件过于依赖父组件的具体实现细节,使得代码难以维护和扩展。让我们来看一个例子:functionCom......
  • kettle连接数据库报错:Error connecting to database: (using class org.gjt.mm.mysql.
    kettle连接MySQL报错但已经把相应的包放到kettle的lib目录下时,仍然报连接不上的错误,那可能是MySQL时区的问题。解决如下:登入MySQL修改为东八区的命令:方法一:mysql>setglobalmax_allowed_packet=1024*1024;mysql>setglobaltime_zone='+8:00';方法二:修改my.ini文件,在[mysql......