历时一个月期末课程设计终于结束了!发现好多东西忘记了,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读数据:
i2c设备驱动层组件(i2c-dev.c)给用户提供调用接口,众所周知,用户实现策略,驱动实现的是机制。
i2c核心层起到承上启下的作用
IIC子系统开发之核心层分析 i2c-core.c(注册流程以及一些重要的结构体):
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的匹配两种方式。 具体匹配过程留到(二)再来。