I2C 设备驱动程序 标准实现

   前段时间在写驱动,是个I2C总线的设备.所以在这里就简单的谈下关于I2C的设备驱动的一点简单的经验之谈.相信网上也有很多这样的文章啦. 我就算是添点砖吧.

  废话不多说,开始入正题.

  I2C的协议在这里我就不多做介绍了,就是个有两根线的半双工的串线,SDA-数据线,SCL-时钟线.

  SCL高的时候,SDA数据有效(说白了就是能被接受,人家知道你是什么,如果SCL低,你跳高跳低,接受方都认为你是个屁)

  SCL SDA都高,表示总线处于等待状态.

  SCL高 SDA由高向低,表示传输开始,反之则表示传输结束.

  SDA每传输1个字节的数据,必须在第9位有个ACK,ACK低表示应答okay,高表示失败.

 

 

  I2C现在分7位地址 和10位地址, 无非就是挂的设备多点.

  今天主要就7位地址的设备开发,罗嗦1下.

 

 

 

  开始吧

  1 一开始需要查看硬件的设计电路图,看下你的I2C从设备的读写地址是多少.一般这个读写地址是8位的,比如0x72 0x73分别是读写地址,那么你的I2C的设备的地址去掉最后位的读写标记位0/1,就是0x39.

  2 找到你的内核中的平台初始化文件在/kernel/arch/arm/XX/xxx.c 找到一个结构体

  

type_name 一定要和你等会驱动中的名字相对应,后面再说.

下面就是platform_data了,比如:

 

okay 平台初试化文件搞定了.

 

接下来开始具体设备了.一般如果是I2C设备的,比较喜欢在/driver/i2c/chips下开发,看个人爱好了.

 

开始搭建基本的驱动框架构,这个不用说了吧 什么module_init module_exit

不用多说了吧.

驱动一般开始于__init函数

 

在这个函数之前,我们先要申明一个结构体

 

进入__init函数

i2c_add_driver(&XXX_i2c_driver);//这个类似于platform_diver_register,无非就是在总线上匹配下驱动和设备,然后probe

 

 

好了,匹配完了,该干活了,进入probe

完成了.什么?还有呢?好吧,如果还有无非就是一些字符设备注册,如何在/dev下自动注册设备接点呢,比如/dev/XXX

1 XX_class = class_create(THIS_MODULE, "XXX); //这个是在sysfs的class中注册你的设备

2 dev = MKDEV();

2 device_create(XX_class, NULL, dev, NULL, "XXX", minor);好了这就搞定了。

 

至于i2C读写 不用我教了吧.i2c_smbus_read_byte_data(client, register)

 i2c_smbus_write_byte_data(client, register, value)等等.

 

 

打完收工,希望对大家有点帮助吧.呵呵

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值