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