瑞芯微Rockchip开发者社区
登录
直播中
幽默
9年用户
759经验值
擅长:362163
私信
关注
[问答]
i2c总线用户接口进行访问EEPROM如何才能实现呢
开启该帖子的消息推送
总线
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”工具验证程序读写正确性。
在此之前,在其他平台上应用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”工具验证程序读写正确性。
举报
更多回帖
rotate(-90deg);
回复
相关问答
总线
I2C
EEPROM
CH365使用外部ID可以通过
I2C
接口
扩展
EEPROM
实现
吗?
2022-10-11
402
我该怎么使用
I2C
通信去
访问
EEPROM
呢
?
2022-12-27
318
如何使用
I2C
总线
来控制
EEPROM
芯片
2021-10-19
1503
如何去
实现
一种隔离式
I2C
接口
?
2021-05-24
2059
请问M24SR04
EEPROM
存储器可以直接
访问
吗?
2019-08-02
914
I2C
总线
具有什么特点?工作原理是什么?
2021-05-20
1591
怎样调用
EEPROM
驱动
接口
去
实现
访问
呢
2022-03-07
723
数字信号处理器中
I2C
总线
的软件包要如何设计
2019-08-07
2231
浅析SPI
总线
与
I2C
接口
2021-10-15
1399
怎么
实现
基于FPGA视频采集中的
I2C
总线
设计?
2021-06-03
1422
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分