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

IIC设备驱动实例调试

简介: 在应用到linux设备(特别是手机)中,大部分硬件设备与主芯片都是通过iic通讯的,譬如TP、加速度传感器、温湿度传感器等等。...记录一次自己调试linux开发板iic器件(ap3216c光敏设备)。 概述: iic通讯线一般只有两条,一条用于时钟控制,一条用于数据通讯。当然也存在单总线通讯,像单片机经常用到的ds18b20。...在实际编码时,只需要调用这些接口实现对特殊iic设备读写,并向外提供读写接口即可。...、向外提供读写接口(file_operations结构体)和创建class下设备节点。...对于使用过单片机调试iic设备的同学,对于iic通讯应该很熟悉了,主要就是对linux驱动注册流程稍加研究即可。

1.3K20

Linux驱动开发的IIC设备驱动的投机取巧

前言 LinuxIIC驱动想必大家都耳熟能详,网上也有很多相关的教程。 网上的教程总结,比如: 方法问题描述Linux 3.X.X版本之后,设备树+驱动此方法是比较符合linux驱动的写法的。...他将会操作多个文件 上面的做法都有些困难及弊端存在,经过摸索了一遍Linux的I2C驱动框架,我发现可以很精简的写一个I2C设备设备驱动。...分析I2C总线驱动说明 I2C总线驱动的代码在linux的源码中--i2c-dev.c中。 在代码中可以看到他提供一套文件操作接口,open,read,write,close接口。...其中: open接口,代码分析:通过inode获取设备设备号,根据子设备号获取I2C适配器。然后申请一个从设备对象。并将I2C适配器句柄映射到从设备对象中。...client, arg); ...... } return 0; } i2cdev_ioctl_rdwr接口:通过接口可以看出,从用户态拷贝数据,然后通过i2c_transfer接口进入从设备数据读写

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

IIC总线最多可以挂多少个设备

IIC(Inter-Integrated Circuit)其实是IIC Bus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展...IIC总线最多可以挂多少个设备IIC地址决定,8位地址,减去1位广播地址,是7位地址,2^7=128,但是地址0x00不用,那就是127个地址, 所以理论上可以挂127个从器件。...总线之所以规定电容大小是因为,IIC的OD要求外部有电阻上拉,电阻和总线电容产生了一个RC延时效应,电容越大信号的边沿就越缓,有可能带来信号质量风险。...所以结论就是IIC总线挂载设备一般在8个以下。...补充: IIC协议经常用在一些外部存储器件,比如64K、128K的flash,主控和flash之间是IIC通信,Linux内核有写的非常规范的IIC协议和各种所需的结构体,可以参考。

3K40

IIC总线最多可以挂多少个设备

IIC(Inter-Integrated Circuit)其实是IIC Bus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展...IIC总线最多可以挂多少个设备IIC地址决定,8位地址,减去1位广播地址,是7位地址,2^7=128,但是地址0x00不用,那就是127个地址, 所以理论上可以挂127个从器件。...但是 IIC协议没有规定总线上device最大数目,但是规定了总线电容不能超过400pF。 管脚都是有输入电容的,PCB上也会有寄生电容,所以会有一个限制。实际设计中经验值大概是不超过8个器件。...总线之所以规定电容大小是因为,IIC的OD要求外部有电阻上拉,电阻和总线电容产生了一个RC延时效应,电容越大信号的边沿就越缓,有可能带来信号质量风险。...所以结论就是IIC总线挂载设备一般在8个以下。

1.8K50

Linux驱动开发-编写(EEPROM)AT24C02驱动

当前文章介绍在Linux系统里如何编写AT24C02的驱动,并且在应用层完成驱动读写测试,将AT24C02的存储空间映射成文件,在应用层,用户可以直接将AT24C02当做一个普通文件的形式进行读写,偏移文件指针...;在Linux内核里有一套标准的IIC子系统框架专门读写IIC接口设备,采用平台设备模型框架,编写驱动非常方便。...设备端*/ i2c_dev=i2c_new_device(adap,&info); printk("IIC设备端: 驱动安装成功\n"); return 0; } static void...__exit tiny4412_drv_cleanup(void) { /*注销IIC设备*/ i2c_unregister_device(i2c_dev); i2c_put_adapter(adap...); printk("IIC设备端: 驱动卸载成功\n"); } module_init(tiny4412_drv_init); /*驱动入口--安装驱动的时候执行*/ module_exit

1.9K30

linux读写

读写锁 与互斥量类似,但读写锁允许更高的并行性。其特性为:写独占,读共享。 读写锁状态: 一把读写锁具备三种状态: 1. 读模式下加锁状态 (读锁) 2. 写模式下加锁状态 (写锁) 3....不加锁状态 读写锁特性: 1. 读写锁是“写模式加锁”时, 解锁前,所有对该锁加锁的线程都会被阻塞。 2....那么读写锁会阻塞随后的读模式锁请求。优先满足写模式锁。读锁、写锁并行阻塞,写锁优先级高 读写锁也叫共享-独占锁。当读写锁以读模式锁住时,它是以共享模式锁住的;当它以写模式锁住时,它是以独占模式锁住的。...读写锁非常适合于对数据结构读的次数远大于写的情况。...函数 以读方式请求读写锁。

3.2K30

linux读写锁_共享内存读写

一、读写锁是什么?...读写锁其实还是一种锁,是给一段临界区代码加锁,但是此加锁是在进行写操作的时候才会互斥,而在进行读的时候是可以共享的进行访问临界区的 ps:读写锁本质上是一种自旋锁 二、为什么需要读写锁?...如果每次操作都给此段代码加锁,太浪费时间了而且也很浪费资源,降低程序的效率,因为读操作不会修改数据,只是做一些查询,所以在读的时候不用给此段代码加锁,可以共享的访问,只有涉及到写的时候,互斥的访问就好了 三、读写锁的行为...读写之间是互斥的—–>读的时候写阻塞,写的时候读阻塞,而且读和写在竞争锁的时候,写会优先得到锁 四、自旋锁&挂起等待是锁?...---->读和写在同时竞争锁的时候,写会优先的得到锁 互斥---->读的时候写阻塞,写的时候读阻塞 4.相关函数 (1)pthread_rwlock_init()—->初始化函数 功能:初始化读写

6.1K10

Linux驱动开发-编写FT5X06触摸屏驱动

FT5206寄存器介绍 FT5206支持通过IIC和SPI接口与外部主机通信,当前使用的屏幕硬件上只是引出了IIC接口,下面就介绍下IIC接口的时序,设备地址,还有FT5206的寄存器。...IIC传输时序: 读写时序流程: 字段的解释: 下面的截图是介绍FT5206内部的寄存器地址,一些关键的地方我做了翻译: 从图上可以看出,基本上后面的寄存器地址都是重复的功能,只是坐标点不一样了...这是开发板LCD屏幕的硬件原理图: 3.1 设备端代码(FT5206) #include #include #include <linux...注册IIC设备端*/ iic_client=i2c_new_device(iic_adapter,&iic_info); printk("IIC设备端驱动安装成功....完成设备端注销*/ i2c_unregister_device(iic_client); printk("IIC设备端驱动卸载成功.

2.4K20

RT-Thread实战笔记|TCS34725 RGB 颜色识别传感器详解

RT-Thread IIC设备驱动使用 习惯于MCU BSP驱动开发的玩家来说,初识RT_Thread的设备驱动可能有点蒙,原因在于RT_thread代码结构大多是面向对象的,类linux风格,学习过linux...接下来就以IIC设备驱动代码来看,如何使用rt-thread的IIC驱动 访问IIC设备 一般情况下 MCU 的 I2C 器件都是作为主机和从机通讯,在 RT-Thread 中将 I2C 主机虚拟为 I2C...() 传输数据 查找IIC设备 在使用 I2C 总线设备前需要据 I2C 总线设备名称获取设备句柄,进而才可以操作 I2C 总线设备,查找设备函数如下所示: rt_device_t rt_device_find...关于IIC通讯所有到的地址、读写控制、数据长度、数据等参数封装在一个结构体中: struct rt_i2c_msg { rt_uint16_t addr; /* 从机地址 */ rt_uint16...经过上面章节的介绍,对rtt iic设备的使用有了一些简单的了解,下面来具体使用,先来看初始化过程 1、查找IIC设备是否注册 static void rgbSensor_init(const char

1.2K20

STM32入门开发: 采用IIC硬件时序读写AT24C08(EEPROM)

IIC硬件时序的,上篇文章已经介绍了采用IIC模拟时序读写AT24C02,这篇文章介绍STM32的硬件IIC配置方法,并读写AT24C08。...,但是根据IIC的时序顺序,在操作设备前,都需要先发送7位地址,再发送1位读写位,才能启动对芯片的操作,我们在写模拟时序为了方便统一写for循环,按字节发送,所以一般都是将7地址位与1位读写位拼在一起,...十六进制),对应的二进制就是: 10100101 第四块区域: 0xA7(十六进制),对应的二进制就是: 10100111 如果将读写位组合在一起,写权限的设备地址: 第一块区域: 0xA0(十六进制...重新发送起始信号(切换读写模式) 7. 发送设备地址(读权限) 8. 等待AT24C08应答、低电平有效 9. 循环读取数据: 接收AT24C08返回的数据....总线时序代码、AT24C08读写代码 在调试IIC模拟时序的时候,可以在淘宝上买一个24M的USB逻辑分析仪,时序出现问题,使用逻辑分析仪一分析就可以快速找到问题。

92910

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”,语法格式为...为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。

12.2K20

linux 设备

linux 设备树 ---- 参考地址 http://blog.csdn.net/green1900/article/details/45646095 http://www.cnblogs.com...,fpga", "rockchip,rk3399"; 3.2节点名 理论个节点名只要是长度不超过31个字符的ASCII字符串即可,Linux内核还约定设备名应写成形如[@]的形式,其中name就是设备名...unit_address一般是设备地址,用来唯一标识一个节点 Linux中的设备树还包括几个特殊的节点,比如chosen,chosen节点不描述一个真实设备,而是用于firmware传递一些数据给OS...这样就可以实现类似函数调用的效果 3.KEY 在设备树中,键值对是描述属性的方式,比如,Linux驱动中可以通过设备节点中的”compatible”这个属性查找设备节点 inux设备树语法中定义了一些具有规范意义的属性...此外,还有一些Linux内核定义好的,一类设备通用的有默认意义的属性,这些属性一般不能被内核自动解析生成相应的设备信息,但是内核已经编写的相应的解析提取函数,常见的有 “mac_addr”,”gpio”

3K20
领券