前面转载了很多关于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
IIC设备驱动实例
最新推荐文章于 2022-03-29 16:19:28 发布
本文详细介绍了如何在Linux系统中使用C语言编写IIC设备驱动程序,涵盖了IIC总线协议的基本概念,以及具体实现步骤,包括初始化、数据传输等关键环节,为开发者提供实际操作指导。
摘要由CSDN通过智能技术生成