文章摘要: 本文介绍了基于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数据地址;