Linux I2C驱动完全分析

其实老早就想写这个I2C的了,期间有各种各样的事情给耽误了。借着五一放假的时间把这个写出来,供同志们参考。以后会花一些时间深入研究下内核,虽然以前对内核也有所了解,但是还不系统。I2C的硬件结构并不复杂,一个适配器加几个设备而已。Linux下驱动的体系结构看着挺复杂,实际也是比较简单的。在本文中我还是使用实际的例子,结合硬件和软件两个方面来介绍。希望能给初学的同志们一些帮助,另外抛砖引玉,希望高手能给一些指点。话不多说,开整!~

本文用到的一些资源:

1. Source Insight软件

2. mini2440原理图。 点击这里下载mini2440原理图

3. S3C2440 datasheet

4. AT24C08 datasheet

5. Bq27200 datasheet

6. kernel 2.6.31中的At24.c ,Bq27x00_battery.c和i2c-s3c2410.c

本文的结构:

第一部分:At24C08驱动

1. mini2440中at24c08的电气连接

2. Linux中I2C驱动框架分析

3. I2C总线驱动分析代码分析

4. at24c08驱动代码分析

第二部分:Bq27200驱动

1. Bq27200的典型应用电路

2. 主要分析一下ba27x00的代码,对比at24c08来加深理解。

---------------------我是分割线----------------------

第一部分

1. mini2440中at24c08的电气连接

如下图。

Linux I2C驱动完全分析Linux I2C驱动完全分析

24C08的I2C接口是与2440的IICSCL/IICSDA直接相连的。在2440内部集成了一个I2C控制器,可以通过寄存器来控制它。先来和这四个寄存器混个脸熟吧,后面分析时还会经常用到这四个寄存器。

Linux I2C驱动完全分析