S3C2440 Linux驅(qū)動(dòng)移植——AT24C02(EEPROM)驅(qū)動(dòng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
開(kāi)發(fā)板:TQ2440
內(nèi)核:Linux 2.6.32
PC OS:Ubuntu 11.04
1.配置內(nèi)核
打開(kāi)I2C功能:
打開(kāi)雜項(xiàng)設(shè)備,該選項(xiàng)打開(kāi)后,EEPROM也就打開(kāi)了。
2. 修改代碼
修改文件: linux/arch/arm/mach-s3c2440/mach-smdk2440.c
增加如下代碼片段:
#include
staticstructat24_platform_dataat24c02={
.byte_len=SZ_2K/8,
.page_size=8,
.flags=0,
};
staticstructi2c_board_info__initdatasmdk_i2c_devices[]={
/*moredevicescanbeaddedusingexpansionconnectors*/
{
I2C_BOARD_INFO("24c02",0x50),
.platform_data=&at24c02,
},
};
在smdk2440_machine_init函數(shù)中增加如下:
i2c_register_board_info(0,smdk_i2c_devices,ARRAY_SIZE(smdk_i2c_devices));
注意:上面許多參數(shù)是根據(jù)at24c02的參數(shù)來(lái)設(shè)置的,at24c02使用8位地址,內(nèi)存大小2K比特位,也就是256K字節(jié),頁(yè)大小為8字節(jié)。
最后,需要注意,手冊(cè)中at24c02的設(shè)備地址是0b 1 0 1 0 0 0 0 R/W, 其最低位是讀寫(xiě)標(biāo)志位,
但是在Linux中,I2C設(shè)備地址的最高位為0,而低七位地址就是手冊(cè)中去掉R/W的剩余7位。因此,地址為0b 01010000(0x50)
3. 測(cè)試代碼
系統(tǒng)啟動(dòng)后,如果一切正常。會(huì)在/sys文件系統(tǒng)下展示出該設(shè)備,如下:
[root@yj4230-0050]#pwd
/sys/devices/platform/s3c2440-i2c/i2c-0/0-0050
[root@yj4230-0050]#ls
bus eeprom namesubsystem
driver modaliaspower uevent
[root@yj4230-0050]#cat name
24c02
其中eeprom即為驅(qū)動(dòng)導(dǎo)出的bin屬性,通過(guò)讀寫(xiě)eeprom即可訪問(wèn)設(shè)備,如下:
[root@yj4230-0050]#cat eeprom
i2ci2c-0: master_xfer[0] W, addr=0x50, len=1
i2ci2c-0: master_xfer[1] R, addr=0x50, len=128
i2ci2c-0: master_xfer[0] W, addr=0x50, len=1
i2ci2c-0: master_xfer[1] R, addr=0x50, len=128
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~