Linux驱动学习笔记----------IIC框架与流程(一)

历时一个月期末课程设计终于结束了!发现好多东西忘记了,iic流程也有些淡忘,有点慌,夜深人静的时候就整理下吧!还有,杭州最近热的我脑袋都不好用了!

关于iic
1.是一种数据传输协议(spi,usb,sdio,uart…)
2.速度比较:iic < spi < sdio < 网络 < usb
3.它是一种半双工通信方式(两根总线:scl,sda),每个设备有唯一的设备地址
4.一次传输8bit,高位在前,低位在后;总线空闲状态:数据sda拉为高电平。

这里写图片描述

首先从iic的时序开始(基于EEPROM AT24C08):
往AT24C08写数据:
这里写图片描述
根据EEPROM datasheet我们可以知道写数据有好多方式,我们这里选择的是按字节写。

往AT24C08读数据:

这里写图片描述
我们选择的是随机读取模式(效率高)
查看手册:
这里写图片描述

其中I2CDSn 可以用来数据传输
这里写图片描述

这里写图片描述

相关寄存器的设置:
这里写图片描述

理解这个图,了解整个机制
这里写图片描述

i2c设备驱动层组件(i2c-dev.c)给用户提供调用接口,众所周知,用户实现策略,驱动实现的是机制。
i2c核心层起到承上启下的作用
这里写图片描述

IIC子系统开发之核心层分析 i2c-core.c(注册流程以及一些重要的结构体):

这里写图片描述

这里写图片描述

这里写图片描述

核心层,注册了i2c总线,以及驱动注册
这里写图片描述

i2c-dev.c中重要的结构体
和宋宝华的书一样,这里也介绍了i2c.h中的重要结构体: i2c_driver,i2c_client,i2c_adapter
i2c_algorithm,i2c_msg,i2c_board_info。
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

IIC子系统开发之设备驱动层分析(设备驱动层做的是/dev/i2c-x,应用层操作的接口)(跟着源码看看):
这里的相关操作函数,就是在供给应用传调用的!
在open函数中保存了设备是属于哪个适配器的信息(client->adapter = adap;/*指 定 设 备 属 于 那 个 适 配 器
file->private_data = client;/保 存 数 据 ,供 后 面 的 操 作 函 数 使 用 /)
这里写图片描述

这里写图片描述

下面  创建了设备文件,这样就在/dev中创建了节点

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

简要说明:
一些函数在接口的操作函数中使用
这里写图片描述

================================================================================
================================================================================

IIC应用程序的开发:

开始写程序前,内核要先配置下。根据我们分的层次知道,应该有三个地方需要配置。
三层,所以需要配置三个。
1.先到Makefile查看是否选上了文件
2.menuconfig中,依照Makefile 中的宏,进行配置。
这里写图片描述

IIC设备驱动之系统流程分析:

/************* open*************************/
这里的相关操作函数,就是在供给应用传调用的!
在open函数中保存了设备是属于哪个适配器的信息(client->adapter = adap;/*指 定 设 备 属 于 那 个 适 配 器
file->private_data = client;/保 存 数 据 ,供 后 面 的 操 作 函 数 使 用 /)
所以说,open实际上做的就是一个绑定的工作,获取 设备, 通过设备获取 适配器, 然后分配空间 ,最后 将适配器绑定在这个设备上!已供后用!
这里写图片描述

这里写图片描述

/************* ioctl ***************/

这里写图片描述

这里写图片描述
指定设备地址。
这里写图片描述
ioctl 实际上完成的就是指定 设备的地址.

/******************write********************/
这里写图片描述

这里写图片描述

这里写图片描述

目前为止,还是在设备驱动层的,
通过i2c_master_send(client,tmp,count);
就跳到 —-核心层— i2c-core.c !
这里写图片描述

msg : 数据包
开始构建数据包,addr就是我们传进来的地址 0x50
这里写图片描述

这里写图片描述

这里写图片描述

通过i2c_transfer发送i2c数据包,从而通过调用函数调用i2c总线驱动

这里写图片描述

这里写图片描述

这里写图片描述

至此,我们已经成功把数据传到总线层,接下来就是要到资源层和我们的设备进行匹配了! 匹配过程有板卡信息的匹配以及platform_device的匹配两种方式。 具体匹配过程留到(二)再来。

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值