欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RK3399—用户态操作EEPROM

程序员文章站 2024-02-23 22:48:10
...

  在此之前,在其他平台上应用i2c总线用户接口(ioctrl)进行访问EEPROM,具体可以参考“嵌入式Linux下 24系列EEPROM/FRAM驱动”文章。现将其移植到RK3399平台运行。


编译系统:Ubuntu16.04
ARM硬件:firefly RK3399
ARM系统:firefly Ubuntu16.04(SDK)
连接i2c:i2c4
EEPROM:AT24C02
电路原理图:

RK3399—用户态操作EEPROM

查看器件

  首先使用“i2ctools”工具查看硬件连接是否正常。
RK3399—用户态操作EEPROM

  i2c总线已经正确识别到到AT24C02,根据电路原理图地址线A0—A2接地,所以0x50是AT24C02的器件地址。0x51—0x57是24系列高容量型号芯片的地址(24c04—24c16)。


编译源码

clone源码

https://github.com/Prry/linux-drivers/tree/master/i2c-24cxx


文件目录结构:
RK3399—用户态操作EEPROM

  • 24cxx目录为EEPROM/FRAM用户态访问抽象公共接口
  • at24cxx为EEPROM读写测试程序
  • fm24cxx为FRAM读写测试程序

修改“at24cxx.c”源码

  本次硬件使用的是AT系列EEPROM,选择“at24cxx”目录源码。


/* 修改EEPROM数据结构描述 */

/**
 * @brief  device init
 */
const _24cxx_dev_t at24cxx_dev =
{
	"/dev/i2c-4",				/*i2c device name*/
	0x50,						/*eeprom address*/
	_24C02_E,					/*eeprom model,eg AT24C02*/
	0,							/*no write protect*/
	page_write_delay,			/*delay function*/
};

/* 修改测试数据大小 */
#define		WR_SIZE			(256)	/* 24c02容量 */
#define		WR_ADDR			0

修改Makefile

#
# Makefile for the AT24Cxx.
#


VERSION 	=1.00
CC			=aarch64-linux-gnu-gcc	#选择rk3399交叉编译器
DEBUG 		=
CFLAGS		=-Wall
SOURCES	 	=$(wildcard *.c) $(wildcard ../24cxx/*.c)
INCLUDES  	=-I../24cxx
LIB_NAMES 	=
LIB_PATH 	=
OBJ			=$(patsubst %.c, %.o, $(SOURCES))
TARGET		=at24

#links
$(TARGET):$(OBJ)
	@mkdir -p output
	$(CC) $(OBJ) $(LIB_PATH) $(LIB_NAMES) -o output/$(TARGET)$(VERSION)
	@rm -rf $(OBJ)
	
#compile
%.o: %.c
	$(CC) $(INCLUDES) $(DEBUG) -c $(CFLAGS) $< -o aaa@qq.com

.PHONY:clean
clean:
	@echo "Remove linked and compiled files......"
	rm -rf $(OBJ) $(TARGET) output 

编译

  执行“make”编译,编译成功,在“output”目录生成执行文件“at241.00”。将文件拷贝到rk3399板子,执行“chmod 777 at241.00”更改执行属性。


执行

RK3399—用户态操作EEPROM

  程序执行符合预期,i2c用户态访问EEPROM正确。另外,也可以结合“i2ctools”工具验证程序读写正确性。


参考文章

【1】https://blog.csdn.net/qq_20553613/article/details/85332759

相关标签: RK3399