快速业务通道

linux内核GPIO模拟I2C实例

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-19

使用GPIO口模拟I2C总线并挂载设备

前言:

在许多情况下,我们并没有足够的I2C总线,本文主在介绍如何利用Linux内核中的i2c-gpio模块,利用2GPIO线模拟i2c总线,并挂载设备.

思路:

先通过对i2c-gpio所定义的结构体初始化(包括初始化i2c2条线,频率,timeout)并将i2c-gpio模块编译进内核,实现用GPIO_X,GPIO_Y 2GPIO线注册新的i2c总线.此时这个模块对i2c设备是透明的,及挂在这2GPIO线的i2c设备可以直接使用Linux内核通用的i2c设备注册,传输和注销等方法.

步骤:

确认在注册i2c-gpio模块前,所要用到的2GPIO口是没有被系统其它地方所调用的.

在每个系统平台启动时,都会打开一系列的设备,他们通常实现在arch/目录下相应的平台子目录中的例如setup.c,devices.c文件中,在这里我们进行i2c总线的注册以及设备的挂载.i2c-gpio定义的结构在include/linux/i2c-gpio.h中:

/**

* struct i2c_gpio_platform_data - Platform-dependent data for i2c-gpio

* @sda_pin: GPIO pin ID to use for SDA

* @scl_pin: GPIO pin ID to use for SCL

* @udelay: signal toggle delay. SCL frequency is (500 / udelay) kHz

* @timeout: clock stretching timeout in jiffies. If the slave keeps

* SCL low for longer than this, the transfer will time out.

* @sda_is_open_drain: SDA is configured as open drain, i.e. the pin

* isn''t actively driven high when setting the output value high.

* gpio_get_value() must return the actual pin state even if the

* pin is configured as an output.

* @scl_is_open_drain: SCL is set up as open drain. Same requirements

* as for sda_is_open_drain apply.

* @scl_is_output_only: SCL output drivers cannot be turned off.

*/

struct i2c_gpio_platform_data {

unsigned int sda_pin;

}


凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号