Linux驱动程序--AT24Cxx
文章摘要: 本文介绍了基于Linux的AT24C02驱动及应用程序。
内核版本: 2.6.38
硬件平台: SMDK2410
1.添加驱动程序
AT24Cxx驱动程序已经位于板级驱动中,只需要进行简单配置即可:
Misc devices --->
EEPROM support --->
<*> I2C EEPROMs / RAMs / ROMs from most vendors
当然前提是要添加I2C支持:
[*] I2C Support->
2.添加板级支持
在 arch/arm/mach-s3c24xx/mach-smdk2410.c 中添加代码:
#include <linux/i2c.h>
#include <linux/i2c/at24.h>
static struct at24_platform_data at24c02 = {
.byte_len = SZ_2K / 8,
.page_size = 8,
.flags = 0,
};
static struct i2c_board_info __initdata smdk_i2c_devices[] = {
{
I2C_BOARD_INFO("24c02", 0x50), // type, addr 1010 000
.platform_data = &at24c02,
},
};
在smdk2410_init函数中增加如下:
i2c_register_board_info(0,smdk_i2c_devices,ARRAY_SIZE(smdk_i2c_devices));
注意事项:
1.AT24Cxx设备地址为(7位):1010 xxx,所以其地址为0x5X;
2.一定要添加板级支持信息(只有板级信息和驱动匹配时,才会正常加载);
3.I2C_BOARD_INFO中的24c02将显示为name名称(以及设备关联id_table);
查看设备:
#ls /sys/devices/platform/s3c2410-i2c.0/i2c-0/0-0050/
driver eeprom modalias name power subsystem uevent
#cat /sys/devices/platform/s3c2410-i2c.0/i2c-0/0-0050/name
24c02
打开设备文件:
fd = open("/sys/devices/platform/s3c2410-i2c.0/i2c-0/0-0050/eeprom", O_RDWR);
写操作
lseek(fd, 0 , SEEK_SET);
ret = write(fd, write_data, 256);
读操作
lseek(fd, 0 , SEEK_SET);
ret = read(fd, read_data, 256);
关闭设备
close(fd);
注意事项:
每次读写操作前,一定要记住lseek数据地址;