瑞芯微Rockchip开发者社区
直播中

幽默

9年用户 759经验值
擅长:362163
私信 关注
[问答]

i2c总线用户接口进行访问EEPROM如何才能实现呢

i2c总线用户接口进行访问EEPROM如何才能实现呢?

回帖(1)

姜葳

2022-3-7 15:47:39
在此之前,在其他平台上应用i2c总线用户接口(ioctrl)进行访问EEPROM,现将其移植到RK3399平台运行。

编译系统:Ubuntu16.04
ARM硬件:firefly RK3399
ARM系统:firefly Ubuntu16.04(SDK)
连接i2c:i2c4
EEPROM:AT24C02
威廉希尔官方网站 原理图:



查看器件

  首先使用“i2ctools”工具查看硬件连接是否正常。


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

编译源码

clone源码

文件目录结构:




  • 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 $@

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

编译

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

执行



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

更多回帖

发帖
×
20
完善资料,
赚取积分