仓库
https://github.com/starfive-tech/linux.git
branch
starlight
使能配置
make menuconfig ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu-
Device Drivers > Misc devices > EEPROM support > "I2C EEPROMs / RAMs / ROMs from most vendors"
增加dts节点
diff --git a/arch/riscv/boot/dts/starfive/jh7100-beaglev-starlight.dts b/arch/riscv/boot/dts/starfive/jh7100-beaglev-starlight.dts index 756f11369adb..743a2f45f471 100644
--- a/arch/riscv/boot/dts/starfive/jh7100-beaglev-starlight.dts
+++ b/arch/riscv/boot/dts/starfive/jh7100-beaglev-starlight.dts @@ -457,6 +457,11 @@
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
status = "okay";
+ eeprom_dev:eeprom@50 {
+ compatible = "atmel,24c02";
+ reg = <0x50>;
+ pagesize = <8>;
+ }; }; &i2c2 {
测试
#cd /sys/bus/i2c/drivers/at24/1-0050 #echo "abcdefg12345" > eeprom #cat eeprom abcdefg12345
eeprom读写压力测试程序eeprom_at24_test.c
编译命令
riscv64-linux-gnu-gcc eeprom_at24_test.c -o eeprom_at24_test
测试代码
#include#include #include #include #include #include #include #define EEPROM_DEV "/sys/bus/i2c/drivers/at24/1-0050/eeprom" #define BUF_SIZE 256 int main(int argc, char **argv) { int ret, fd, i; int j = 1; char read_data[BUF_SIZE]; char write_data1[BUF_SIZE]; char write_data2[BUF_SIZE]; char *write_data; fd = open(EEPROM_DEV, O_RDWR); if(fd < 0){ printf("Open %s failn", EEPROM_DEV); return -1; } for(i = 0; i < BUF_SIZE; i++){ write_data1[i] = 0x55 + i; write_data2[i] = 0xAA + i * 2; } while(1){ printf("rn######eeprom test start %drn", j); if(j % 2){ write_data = write_data1; }else{ write_data = write_data2; } lseek(fd, 0 , SEEK_SET); ret = write(fd, write_data, BUF_SIZE); if(ret < 0){ printf("Write errorn"); return -1; } lseek(fd, 0 , SEEK_SET); memset(read_data, 0x00, sizeof(read_data)); ret = read(fd, read_data, BUF_SIZE); if(ret < 0){ printf("Read errorn"); return -1; } for(i = 0; i < BUF_SIZE; i++){ if(read_data[i] != *write_data++){ printf("Read/write inconsistency! offset=%d, read=0x%x, write=0x%xn", i, read_data[i], *write_data); break; } if(i % 16 == 0) printf("n"); printf(" 0x%02x ", read_data[i]); } if(i == BUF_SIZE){ printf("######eeprom test end PASS %drn", j); }else{ printf("######eeprom test end FAIL %drn", j); } j++; } }



