当前位置:网站首页>OKRK3399开发板预留I2C4挂载EEPROM
OKRK3399开发板预留I2C4挂载EEPROM
2022-07-23 08:25:00 【卡卡罗特GT】
小编将通过本篇文章为大家列举和说明如何使用I2C4挂载at24c08(EEPROM)芯片。

修改结果
1、修改kernel/arch/arm64/boot/dts/rockchip/OK3399.dts,添加修改如下:

2、摘除at24c08模块上的上拉电阻,飞线使用1.8V给模块供电,接入I2C4_SCL和I2C4_SDA。
修改思路
我们要添加一个I2C设备的思路为:在设备树中添加描述->在设备树描述中添加对应设备驱动->设备驱动添加到内核。
按照思路,首先要在设备树I2C4节点下添加at24c08的设备信息。在kernel/arch/arm64/boot/dts/rockchip/OK3399-C.dts文件,找到I2C4节点如下:

目前是disabled的状态,并且没有任何设备信息。添加设备信息如下:

如上图,通过设备树告诉内核,I2C4开始使用,并且挂载了一个EEPROM设备,名字叫[email protected],其使用的驱动是compatible=“”;
那么我们现在缺少这个驱动,一般的I2C设备所使用的驱动文件对应的I2C厂家会提供,如果厂家说不需要驱动等,其实不是指的真的“不需要”驱动,而是他们的设备是可以使用通用驱动的。
本文中的设备就是这样,与厂家沟通后表示没有驱动文件。那么直接在内核目录下查找eeprom、at24这样的字眼,找找看有没有对应的通用驱动文件。

可见有kernel/drivers/misc/eeprom/at24.c文件。
查看其内容是如何匹配使用这个驱动的,正常来说驱动文件中应该预留了.compatible= *** 作为设备树调用该驱动的接口,只要在设备树描述里的compatible与 驱动文件中的.compatible中描述的一致,就会匹配成功了。
但是这个at24.c中并没有.compatible,只有一个at24_ids如下其中有”24c08”:

对比同目录的at25.c文件就有.compatible没有ids。

ids中描述的也是和.compatible一样,是设备树用来识别匹配使用的,其中的三种识别匹配条件感兴趣的可以深追一下。因与本文无关,不再赘述。所以找到了对应的驱动文件,返回设备树添加描述。

现在这样是告诉了内核我要使用I2C4,我的I2C4下有个EEPROM设备,使用的是“24c08”驱动,但是还没有将”24c08”这个文件给到内核,那么接下来的目的就是把驱动编进内核。
在kernel目录下运行makemenuconfig,搜索at24,如下:

按下数字1,自动跳转到对应选项,按下y选中,保存退出。

因为makemenuconfig修改的是.config文件,而编译脚本中每次都会重新生成.config文件,所以为了让修改生效,修改编译脚本,使其不重新生成.config文件,如下:

将生成.config文件的命令注释掉,编译内核,这样就将”24c08”给到内核,也通过设备树告诉内核,I2C4下有个EEPROM设备要用“24c08”。
到此,我们的常规添加设备思路就已经完成了:在设备树中添加描述->设备树描述对应设备驱动->设备驱动添加到内核。
接下来就是编译内核,烧写boot镜像到开发板,使用i2ctool的命令进行查看,这里也不赘述i2ctool命令的具体使用方法。使用命令:i2cdetect-l 、i2cdetect-y 4。

对应的地址已经被驱动注册,但是没有生成devices下的I2C4设备,说明模块可能没有正常工作,查看模块相关信息。



模块自带I2C4上拉电阻,因为OK3399-C底板上也带有上拉电阻如下图,并且是1.8V上拉,为了电平匹配,不修改底板的状态下,使用1.8V为基准,将模块带有的上拉电阻摘除,使用1.8V配置。

再次修改设备树,添加上时钟描述和设备地址描述。

编译后,烧写内核,烧写完毕启动开发板。

识别到I2C4下的设备,然后进行读写测试即可,如下命令:
echo"hello my world" > /sys/bus/i2c/devices/1-0050/eeprom
cat/sys/bus/i2c/devices/4-0050/eeprom

至此一个新的I2C EEPROM设备添加成功,对I2C设备的读写操作也可以通过开发板中带有的i2ctool相关命令操作。https://forlinx.com/
边栏推荐
- Excitation generator, monitor
- 鸡与蛋,产品与策略
- Spark统计每天新增用户
- 力扣142题:环形链表2
- 4. 寻找两个正序数组的中位数
- How about Celeron n5095 Processor? What is the equivalent level of Intel n5095 core display
- Fastadmin changes the pop-up size of the default table button
- 第七天笔记
- How about the nuclear display performance of Ruilong R7 Pro 6850h? What level is it equivalent to
- Pacific Atlantic current problem
猜你喜欢

第七天笔记

rtx3080ti和3090差距 rtx3080ti和3090哪个性价比高

Where does pytorch work?

【百企行】牛耳教育助力高校访企拓岗促就业专项行动

What level is the Core i7 1165g7 equivalent to? What grade does the i71165g7 belong to

The difference between Celeron n4000 and Celeron n5095

What is Tianji 920 equivalent to a snapdragon? How much is Tianji 920 equivalent to a snapdragon? How about Tianji 920

OSPF comprehensive experiment

Is machine learning difficult to get started? Tell me how I started machine learning quickly!

Notes on the seventh day
随机推荐
Kafka consumption reports an error coordinator unavailable Rediscovery will be attempt redisCovery
Configure the firetracker process, i.e. stepping on the pit record
How many processors is Tianji 720 equivalent to Xiaolong? How about Tianji 720 equivalent to Xiaolong
494. 目标和
Principle of container network
酷睿i7 1165g7相当于什么水平 i71165g7属于哪个档次
酷睿i5 12490f和i5 12600k差距大吗
英特尔赛扬7300性能怎么样?相当于什么水平级别
回文相关题目
第四天笔记
rtx3070ti显卡什么水平 rtx3070ti显卡什么级别 rtx3070ti显卡怎么样
The difference between rtx3080ti and 3090. Which one is more cost-effective, rtx3080ti or 3090
Is machine learning difficult to get started? Tell me how I started machine learning quickly!
剑指 Offer 46. 把数字翻译成字符串
Rtx3080 is equivalent to GTX. What kind of graphics card is rtx3080? What level is rtx3080
打家劫舍!
Day 11 notes
Rtx3080ti and rtx3080 gap 3080 and 3080ti parameter comparison
买卖股票的最佳时机
Reinforcement learning -- understanding point of strategy gradient