栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux下eeprom调试(AT24c02)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux下eeprom调试(AT24c02)

仓库

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++;
	}				
}  
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/335501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号