笔记整理—linux驱动开发部分(12)I2C总线与触摸屏设备

devtools/2024/11/16 13:12:31/

        IIC总线有三根线:SCL时钟线、SDA串行数据线、GND地线。IIC总线有以下三个特点的特点:同步通信(同一个时钟下)、电平(电平信号、非差分、近距离)、低速。

        总线是结构,多个设备挂载同一条总线上(非总线结构是指一个总线只能挂载一主一从设备)。

        主从结构,一个主设备,一方为从设备,通信权在主设备而不在从设备,IIC总线有排它性,同一时间内只可进行一方的通信,每个设备在总线上有唯一地址,主设备通过从地址找到自己的需求设备(广播),主设备没有地址,从设备有唯一地址。

        主设备SOC,从设备外围设备,优势是多个外围设备常见的各自联网传感器芯片均使用IIC接口与SOC连接。

        电容屏芯片多引脚构成两个接口,一个IIC与SOC通信,一个触摸板管理(芯片到屏幕)(固件)。

        IIC驱动框架:为了更好的使用IIC接口(drivers/i2c)。linux中实现了2种IIC方式:①I2C-dev(drivers/i2c/i2c_dev.c)只封装了主机操作接口,应用层代码需要自己去实现slave操作,本身对硬件不做任何操作,将传统驱动的活丢给了应用层——应用驱动层(做法不主流,但适应差异化)。②IIC驱动锁有代码在驱动层完成直接向应用层提供结构,应用层不要去管IIC。(eg:/dev/input/event1 这是touch接口)。

        四个IIC结构体:

父struct i2c_adapter I2C主控设备(主控、控制器)
子struct i2c_algorithm I2C算法(主机与从机的通信过程)一般被上一个结构体包含//一下结构体为一对
struct i2c_client I2C从机设备信息
struct i2c_driver I2C从机驱动

        i2c_core.c是i2c核心,内核所实现的部分;busses目录存放了一些已支持的i2c_adapter控制器;algos是已支持的调度算法i2c_algorithm。smbus是基于I2C总线所开发的一种总线。

        i2c_core.c分析:

        postcore_initcall()是开机加载。

i2c_init()bus_register()注册i2c_bus_type 在/sys/bus下创建struct bus_typeint (*match)=i2c_device_match  device与driver匹配int (*probe)=i2c_device_probe  匹配后执行driver->probei2c_add_driver()//增加一个驱动,但此为空驱动(dummy)i2c_device_match()i2c_match_id()strcmp(client->name(设备), id->name(驱动))id_table因为一个驱动可能支持多个设备

        i2c_add_adapter/i2c_add_numbered_adapter用于注册之际控制器。

i2c_add_driver    注册driver驱动
i2c_add_device    注册client设备i2c_adap_s3c_init(void)return platform_driver_register();使用platform进行组织.probe//用于匹配,有限使用id_table进行匹配.id_table.driver.name 

         .probe:填充i2c_adapter,并进行注册(i2c_add_adapter/....),寄存器映射完成,此后可进行硬件操作,初始化I2C的CON时钟、中断。

        i2c_algorithm:I2C算法:

i2c_algorithm (*master_xfer)	  诸暨对外传输(*smbus_xfer)(*functionality) 功能列表(由一些宏组成与I2C规范相关).master_xfer,主机发送,支持retrydo_transfer()set_master()设为主设备填充msg,message_start()发送一个起始信号;wait_event_timeout()等待从机回答(中断方法),状态机式进行应答cheak,然后weak_up()唤醒,读取I2C_CON寄存器。

        i2c_driver注册在设备驱动中(gslx680)——I2C_1通信。

        使用gsl680触摸屏进行例举:

gsl_ts_initi2c_add_driver用于注册驱动(内核维护的)id_table进行匹配.probe进行初始化i2c_register_board_info()位于mach-210.c cline相关

        touch屏幕是从设备,与控制器由一个irq线相连接,当发生事件,irq发出通知,控制器取得数据(1024*600)。

i2c_add_adapter/i2c_add_numbered_adapteri2c_register_adapteri2c_register_board_infodevinfo填充i2c_board_list添加(内核的)用于I2C总线所有硬件设备进进行维护,维护了一个i2c_board_info结构体,但需要的是i2c_client,所以client是二次加工而成的(i2c_cord.c->i2c_scan_static_board_info)device_register()注册设备

        一个从设备在I2C上的地址在数据手册上就能体现,一个设备驱动的添加过程:①驱动(driver/input/touch);②mach(arch/arm/s5pv210/);③Makefile(touch/Makefile);④添加条件编译(touch/Makefile);kconfig中添加项目(touch..../kconfig)。.probe中是一个设备的功能初现clinet信息会被传入,并进行信息校验。

        直接定义一个大的结构体,一般申请用指针去使用alloc开辟,因为直接实例化在栈上,可能会造成溢出,用alloc在栈上不用怕溢出。load_fw加载固件。


http://www.ppmy.cn/devtools/134444.html

相关文章

树莓派(Raspberry Pi)picotool

树莓派(Raspberry Pi)picotool 安装直接安装从源码安装工具介绍显示信息保存程序二进制信息基本信息引脚完整信息 链接 安装 直接安装 在archlinux上,使用yay直接安装 yay -S picotool从源码安装 安装libusb sudo pacman -S libusb下载 …

计算机网络 (3)计算机网络的性能

一、计算机网络性能指标 速率: 速率是计算机网络中最重要的性能指标之一,它指的是数据的传送速率,也称为数据率(Data Rate)或比特率(Bit Rate)。速率的单位是比特/秒(bit/s&#xff…

设计模式——策略模式(c++)

策略模式(Strategy Pattern)在 C 中的实现 1. 策略模式定义 策略模式定义了一系列算法(策略类),将每个算法封装起来,使它们可以相互替换,达到灵活使用不同策略的目的。在策略模式中&#xff0…

木舟0基础学习Java的第三十三天(OA企业管理系统)

贯穿项目:OA企业管理系统 框架技术: Springboot / Spring / SpringMVC / MyBatis / Shiro 项目构建管理: maven 数据库: mysql 前端技术: html / css / js / jquery / jsp 扩展技术&#xff…

活动|华院计算作为联盟理事单位出席进博会全球人工智能合作论坛

第七届中国国际进口博览会(进博会)于11月5日至10日在上海举行,作为本次进博会的重要配套活动,首届人工智能全球合作论坛也于9日圆满落幕。本次论坛由全球招商中心委员会、人工智能全球合作论坛组委会主办,中国国际科技…

Redisson的可重入锁

初始状态: 表示系统或资源在没有线程持有锁的情况下的状态,任何线程都可以尝试获取锁。 线程 1 获得锁: 线程 1 首次获取了锁并进入受保护的代码区域。 线程 1 再次请求锁: 在持有锁的情况下,线程 1 再次请求锁&a…

第二十章 TCP 客户端 服务器通信 - 立即发送模式(Q 模式)

文章目录 第二十章 TCP 客户端 服务器通信 - 立即发送模式(Q 模式)立即发送模式(Q 模式)流模式(S模式)缓冲区大小 服务器端OPEN命令 第二十章 TCP 客户端 服务器通信 - 立即发送模式(Q 模式) 立即发送模式…

零基础上手WebGIS+智慧校园实例(1)【html by js】

请点个赞收藏关注支持一下博主喵!!! 等下再更新一下1. WebGIS矢量图形的绘制(超级详细!!),2. WebGIS计算距离, 以及智慧校园实例 with 3个例子!!…