IIC设备驱动及子系统开发
基本概念
- 设备都有自己得设备地址,EEprom存储设备信息,包括设备地址

一般为7位,前四位已经固化好了,其余三位可以通过设计图,上图,看出接地为000,P0,P1也在数据手册中进行描述,为未接,为0. 即AT24LC08(上图有误)地址为1010 000.

总线速度:标准速度100kbps,快速模式400kbps,高速模式3.4Mbps(一般为100,四百也多一点)
IIC特点: 半双工(串行方式),仅需要两根线(所以又被称为2-wixe总线)
设备操作时序
IIC从机设备地址是由主机写进去的
低电平写,高电平读

- IIC开始条件和终止条件,基本时序图如下

读写时序分析
按字节进行写操作
主设备设备地址为1010 000,发送数据,写到地址0x3,写入0x5。

写入逻辑图

按页进行写操作
按页进行写操作如下图。

当前地址读操作
当前地址读操作如下图。

随机读操作
随机读操作如下图。

序列号读操作
序列化读操作如下图。

读写逻辑
结合上图随机读操作进行理解。
写数据
装载AT24C08设备地址:0xA0
设置IIC开始条件
使能ACK
检测状态
装载存储地址 //写数据
使能ACK
检测状态
写数据
使能ACK
设置IIC停止条件
读数据
装载AT24C08设备地址:0xA0
设置IIC开始条件
使能ACK
检测状态
装载存储地址 //读取数据
使能ACK
检测状态
装载设备地址:0xA0|0x1
设置IIC开始条件
使能ACK信号
检测状态
读取数据
关闭ACK信号
设置停止条件
相关寄存器分析
基本寄存器如下。

- I2CCON:使能ACK,选择时钟源,使能Ix/Rx,检测状态
- I2CSTAT:主机发送/接收,设置开始/停止条件,数据Tx/Rx使能,AcK能否被接收?
- I2CDS0:装载设备地址,发送/接收数据
设备驱动框架功能分析
基础知识
IIC基本特征
- IIC是一种数据传输协议(sPI,USB,SDIo,UART.··.)
- 速度比较:IIC(100K,400K,3.4M)<SPI<SDI0<网络<‘USB’
- IIC是一个半双工通信方式,两根总线(SCL,SDA),每个设备都有唯一设备地址
- 一次传输8bit,高位在前,低位在后;总线空闲状态:数据线SDA拉为高电平
IIC设备驱动框架图如下。

i2c设备驱动层组件(i2c-dev.c)
- 给用户提供调用接口
- 实现策略问题:它知道发什么数据,但不知道怎么发数据
i2c核心层组件(i2c-core.c)
- 注册一根i2c总线
- 给驱动编程人员提供编程接口
i2c总线驱动层组件(I2c-s3c2410.c)

读源码:
- 注册一根总线

- 返回一个设备与驱动相对应的结构体,个人连接就是将设备与驱动相连接

- 通过匹配设备名称进行关联,设备匹配函数如下

- 注册I2C驱动

linux设备驱动涉及重要结构体(linux/i2c.h)
- 表示I2C的驱动

- 表示I2C的设备

- 表示I2C的适配器/控制器

- 表示I2C数据包

- 表示I2C板卡信息

设备驱动层分析
IIC主设备号,系统已经设置。

- 注册主设备号,返回设备描述符

2. 创建设备类

3. 绑定适配器

IIC设备驱动层移植
系统内核构成,如图下:

系统流程分析
整体流程如下:

open函数对应的操作流程(包括获取从机的信息):

ioctl函数对应的操作流程(指定client设备地址):

write函数对应的操作流程:

资源层分析
资源层分析图如下:

平台资源构建
平台资源构建如下:

平台数据构建如下:

注册平台设备
注册平台设备如下:






