IIC设备驱动实例

本文详细介绍了如何在Linux系统中使用C语言编写IIC设备驱动程序,涵盖了IIC总线协议的基本概念,以及具体实现步骤,包括初始化、数据传输等关键环节,为开发者提供实际操作指导。
摘要由CSDN通过智能技术生成
   前面转载了很多关于i2c的文章,做完一个项目了,也该自己写点i2c心得了,我这个可是纯应用角度的,想看原理的,去看转载的文章,人家写的好多了!
   对于一个i2c设备来说,其设备文件是最简单也是最复杂的,说它简单是因为很设备厂商会提供linux下的代码,这样就简单了;但是也有很多厂商它不提供或不完整提供linux下的代码,这样的话当然就复杂了。那么这个我现在这里就不说了,下面说说做了几个I2C设备(以ISA1200为例)后发现,不管设备文件如何总是要自己来做的一些事情,这大概就是所谓的移植吧。
   当然这个工作都是在板文件中进行的。以mach-s5pv210.c为例来说一下:
   先说下用板子自己带的I2C实现驱动加载:
首先在板文件中建立ISA1200的信息:
static int isa1200_power(int on)
{    
       if(on){
              gpio_direction_output(S5PV210_GPJ3(1), 1);
              gpio_direction_output(S5PV210_GPJ3(0), 1);
       }else{
              gpio_direction_output(S5PV210_GPJ3(1), 0);
              gpio_direction_output(S5PV210_GPJ3(0), 0);
       }
       return 0;
}

static struct isa1200_platform_data isa1200_1_pdata = {
       .name = "isa1200",
       .power_on = isa1200_power,
       .pwm_ch_id = 1,
       .hap_en_gpio = S5PV210_GPH3(1),
       .max_timeout = 60000,
};

static void isa1200_init(void)
{
       gpio_direction_output(S5PV210_GPJ3(7), 1);
       gpio_direction_output(S5PV210_GPJ3(1), 1);
       gpio_direction_output(S5PV210_GPJ3(0), 1);

       /*i2c_register_board_info(3, isa1200_board_info,
              ARRAY_SIZE(isa1200_board_info));*/
       return;
}
以及i2c_board_info结构体:
       {
              I2C_BOARD_INFO("isa1200_1", 0x90>>1),/*这个是I2C设备的从机地址*/
              .platform_data = &isa1200_1_pdata,
       },

然后在以下三个I2C总线中找到一条如i2c_devs1[]
/* I2C0 */
static struct i2c_board_info i2c_de
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值