OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3560|回复: 3

关于imx6ul的GPIO模拟I2C读取AP3216C

[复制链接]

15

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2022-4-12
在线时间
41 小时
发表于 2022-5-18 15:38:23 | 显示全部楼层 |阅读模式
1金钱
求助求助!!!大家有没有人搞过imx6ul的gpio模拟I2C,然后读取AP3216C????

最佳答案

查看完整内容[请看2#楼]

经过百度各路网友的相关分享和内核源码中的驱动的比较,已经成功实现GPIO模拟I2C了 我自己来回答下吧~ Linux已经发展了这么久,这种GPIO模拟I2C的应用场景肯定已经被包含进内核了~ 主要的步骤流程如下: 1、配置内核,需要使能GPIO和I2C的一些相关配置 Device Drivers----> -*-GPIO Support----> 确认GPIO Support使能 Device Drivers----> I2C support----> I2C Hardware Bus support----> ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2022-4-12
在线时间
41 小时
 楼主| 发表于 2022-5-18 15:38:24 | 显示全部楼层
经过百度各路网友的相关分享和内核源码中的驱动的比较,已经成功实现GPIO模拟I2C了
我自己来回答下吧~
Linux已经发展了这么久,这种GPIO模拟I2C的应用场景肯定已经被包含进内核了~

主要的步骤流程如下:
1、配置内核,需要使能GPIO和I2C的一些相关配置
Device Drivers---->
    -*-GPIO Support---->
确认GPIO Support使能

Device Drivers---->
    I2C support---->
        I2C Hardware Bus support---->
            <*>GPIO-based bitbanging I2C
确认GPIO-based bitbanging I2C使能

2、配置设备树
在跟节点增加自定义的i2c节点及其设备子节点,该节点中需要根据实际修改的是gpios属性,和pinctrl-0属性,注意i2c的compatible属性值要是“i2c-gpio”,i2c-gpio是内核自带的驱动,在内核的drivers/i2c/busses目录下,imx的i2c驱动也在这个目录下,设备节点没什么特别跟教程里的i2c实验一样
i2c99@0 {
                compatible = "i2c-gpio";
                gpios = <&gpio1 29 GPIO_ACTIVE_HIGH /* sda */
                                &gpio1 28 GPIO_ACTIVE_HIGH /* scl */
                        >;
                i2c-gpio,sda-open-drain;
                i2c-gpio,scl-open-drain;
                i2c-gpio,delay-us = <2>;        /* ~100 kHz */
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_i2c1>;
                #address-cells = <1>;
                #size-cells = <0>;
                status = "okay";

                ap3216c@1e {
                        compatible = "fa,iWaterX-fa_i2c";
                        reg = <0x1e>;
                };
        };


因为我是把开发板上真的i2c1改为gpio模拟i2c,所以我要把设备树中的i2c1节点去掉,同时还要修改iomuxc中的pinctrl_i2c1,大家根据自己的事情情况修改引脚配置
/*
&i2c1 {
        clock-frequency = <100000>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";

        ap3216c@1e {
                compatible = "fa,iWaterX-fa_i2c";
                reg = <0x1e>;
        };

};
*/
/*
pinctrl_i2c1: i2c1grp {
        fsl,pins = <
                MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0
                MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0
        >;
};
*/
pinctrl_i2c1: i2c1grp {
        fsl,pins = <
                MX6UL_PAD_UART4_TX_DATA__GPIO1_IO28 0x4001b8b0
                MX6UL_PAD_UART4_RX_DATA__GPIO1_IO29 0x4001b8b0
        >;
};


3、编写设备驱动,这个没什么好说的,直接用教程里的AP3216C的驱动就可以了,注意设备节点的compatible属性和驱动匹配,不要直接复制黏贴哦
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4137
金钱
4137
注册时间
2018-5-14
在线时间
903 小时
发表于 2022-5-18 15:57:40 | 显示全部楼层
设备树添加一个新的节点,仿照硬件IIC的设备树做,然后换个名称,添加SCL和SDA的IO和IO属性。在写一个platform_driver去匹配这个设备树。然后找到系统上的硬件IIC的驱动文件。拿过来把读写操作换成软件模拟方式。
回复

使用道具 举报

15

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2022-4-12
在线时间
41 小时
 楼主| 发表于 2022-5-20 09:16:54 | 显示全部楼层
姚先起 发表于 2022-5-18 15:57
设备树添加一个新的节点,仿照硬件IIC的设备树做,然后换个名称,添加SCL和SDA的IO和IO属性。在写一个platf ...

感谢回复,但是好像没必要做这么复杂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 10:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表