pcy0841127166 发表于 2022-7-25 00:20:16

OK3399-C干货笔记!I2C4挂载EEPROM其实如此简单

干货笔记!I2C4挂载EEPROM其实如此简单

      开发板预留出了I2C4引脚接口,位于P32插针引脚上,分别是I2C4_SCL和I2C4_SDA。小编将通过本篇文章为大家列举和说明如何使用I2C4挂载at24c08(EEPROM)芯片。

      开发板预留出了I2C4引脚接口,位于P32插针引脚上,分别是I2C4_SCL和I2C4_SDA。小编将通过本篇文章为大家列举和说明如何使用I2C4挂载at24c08(EEPROM)芯片。
https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicIhrpB3VOZ2VfXrsDrIqkYgxPXNCJ0FSlVBXib7Ewrk1adbgPdXF1blQ%2F640%3Fwx_fmt%3Dpng&s=2e362a
修改结果
1、修改kernel/arch/arm64/boot/dts/rockchip/OK3399.dts,添加修改如下:
https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicoO2TRroQkibp7nAuRykPhU5Veb83GgrCLE9UHgpaqAEncAquGicA9Low%2F640%3Fwx_fmt%3Dpng&s=c0968a

2、摘除at24c08模块上的上拉电阻,飞线使用1.8V给模块供电,接入I2C4_SCL和I2C4_SDA。

修改思路
我们要添加一个I2C设备的思路为:在设备树中添加描述->在设备树描述中添加对应设备驱动->设备驱动添加到内核。

按照思路,首先要在设备树I2C4节点下添加at24c08的设备信息。在kernel/arch/arm64/boot/dts/rockchip/OK3399-C.dts文件,找到I2C4节点如下:

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicrdp3YUAApYwLD1cpcLgk3lRyy2yCicMpj4WPwEwsEpWEvNJ7QOmkMJg%2F640%3Fwx_fmt%3Dpng&s=3e3ed5

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

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uiclRNdDDRicJFezPrA9132pT7W3lvpnDjdGKxTiatoHwWTXia9XXyiaQXCWg%2F640%3Fwx_fmt%3Dpng&s=7e71b0

如上图,通过设备树告诉内核,I2C4开始使用,并且挂载了一个EEPROM设备,名字叫at24c08@50,其使用的驱动是compatible=“”;

那么我们现在缺少这个驱动,一般的I2C设备所使用的驱动文件对应的I2C厂家会提供,如果厂家说不需要驱动等,其实不是指的真的“不需要”驱动,而是他们的设备是可以使用通用驱动的。

本文中的设备就是这样,与厂家沟通后表示没有驱动文件。那么直接在内核目录下查找eeprom、at24这样的字眼,找找看有没有对应的通用驱动文件。

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicPLWdeCmAMYwMSv4TSmjfQia1oOFicTKFyGu3E05pXbOUc9931opfQnCQ%2F640%3Fwx_fmt%3Dpng&s=ba45ea

可见有kernel/drivers/misc/eeprom/at24.c文件。

查看其内容是如何匹配使用这个驱动的,正常来说驱动文件中应该预留了.compatible= *** 作为设备树调用该驱动的接口,只要在设备树描述里的compatible与 驱动文件中的.compatible中描述的一致,就会匹配成功了。

但是这个at24.c中并没有.compatible,只有一个at24_ids如下其中有”24c08”:

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicmvkia5FSSTictYiaMaibb2VMVjPpHXb0x47vGxj0icyfSMPY3RQpxGO6ZnQ%2F640%3Fwx_fmt%3Dpng&s=f1141d

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

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicZAjUYOO5SG0Q33wPpkqblLTU97ffd83a6BsU0OSsN8DlGqmmQCthZg%2F640%3Fwx_fmt%3Dpng&s=e1d697

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

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicUHqmFibrCGOe6wODjPMicVTYujaKVW0f6Yr0nFibvlceVQSWqdAcmMX6A%2F640%3Fwx_fmt%3Dpng&s=1f4d12

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

在kernel目录下运行makemenuconfig,搜索at24,如下:

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicz14KcBo9aUU7lLrEjut4Am3YsF20icG0W0XBG3nFqjAkS5PKhzzdnqQ%2F640%3Fwx_fmt%3Dpng&s=e90586

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

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicCOK2tFJS0kmNQDW5vMhax7CtpFT8RMgUSnf1BnTuT0W8p53W0Xlxaw%2F640%3Fwx_fmt%3Dpng&s=abb12a

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

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicGjkGalfEsfU64zhBGDC7ibhM8cgBdZqHLWFv4Ywa48FOloZfq4qkRhA%2F640%3Fwx_fmt%3Dpng&s=007ad3

将生成.config文件的命令注释掉,编译内核,这样就将”24c08”给到内核,也通过设备树告诉内核,I2C4下有个EEPROM设备要用“24c08”。

到此,我们的常规添加设备思路就已经完成了:在设备树中添加描述->设备树描述对应设备驱动->设备驱动添加到内核。

接下来就是编译内核,烧写boot镜像到开发板,使用i2ctool的命令进行查看,这里也不赘述i2ctool命令的具体使用方法。使用命令:i2cdetect-l 、i2cdetect-y 4。

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicb2gicJZaV95qia0yRUIaBX6ASvwEBvlPvf6Vaf3jTD5kc4nY4NgRRyfA%2F640%3Fwx_fmt%3Dpng&s=ed2aa0

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

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicrTOX2ibE70DCkfzbyAN6g4nxD6NicXR1uK1b1j9S0wFQTRhkDS4cRoFg%2F640%3Fwx_fmt%3Dpng&s=51902d

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicqn2OmGGxlvRJLiaiaa8JYAgibatSHh9LOM1Gntt4LDfYgJjHibcNqKoB8A%2F640%3Fwx_fmt%3Dpng&s=547c45
https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicLXnTvFoSsvGSZhpFm7iaAsWmNxko0WCGYV7UnNny7RSH1sT5TNmQjpA%2F640%3Fwx_fmt%3Dpng&s=facd45

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

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicu6wnvp4uM7NlGROc7O9b8lMMhWgMf5EjhSQQBOe2icKueEKVpdJyPuA%2F640%3Fwx_fmt%3Dpng&s=fa0ae6

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

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicoO2TRroQkibp7nAuRykPhU5Veb83GgrCLE9UHgpaqAEncAquGicA9Low%2F640%3Fwx_fmt%3Dpng&s=c0968a

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

https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uic1H9OB9SgbGWPOc0m7eaNUDiab3BrzUnviblyR30GFqa8neoYQ608ezCw%2F640%3Fwx_fmt%3Dpng&s=f0e419

识别到I2C4下的设备,然后进行读写测试即可,如下命令:

echo"hello my world" > /sys/bus/i2c/devices/1-0050/eeprom
cat/sys/bus/i2c/devices/4-0050/eeprom
https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FVYHFtvABrwZXjtgQFbR64Y8zppMy29uicfOib0EejEmHEHibyb1qKdKkQVWTMTLW1creyLvUEKiaibeicRgaxenUtMEQ%2F640%3Fwx_fmt%3Dpng&s=2276d2

至此一个新的I2C EEPROM设备添加成功,对I2C设备的读写操作也可以通过开发板中带有的i2ctool相关命令操作。

huangchang 发表于 2022-7-25 06:48:41

闪耀的空白 发表于 2022-7-25 08:23:55

lqsgg 发表于 2022-7-25 08:27:11

kualong05 发表于 2022-7-25 08:30:19

小鑫鑫 发表于 2022-7-25 08:38:04

sea_shao 发表于 2022-7-25 08:41:18

这个是玩玩的

ww645133040 发表于 2022-7-25 08:42:33

xushan32 发表于 2022-7-25 09:41:23

13131 发表于 2022-7-25 09:41:50

页: [1] 2 3 4
查看完整版本: OK3399-C干货笔记!I2C4挂载EEPROM其实如此简单