I2C通信数据错误,总是多个FF

STM32利用两个独立的I2C做主从机通信(既当主机也当从机)

本文章主要通过(主机)硬件I2C的方式来实现,

错误的图以及代码————多一个FF

正确的图以及代码

分析原因:产生非应答信号之后,没有及时发送停止信号,导致SDA拉高,从而导致逻辑分析仪在NACK 与STOP信号间检测到了FF

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在RV1109上使用GPIO模拟I2C通信,需要在设备树(device tree)中进行设置。以下是一般的设备树设置步骤: 1. 找到RV1109芯片的设备树节点,一般为 "/soc/i2c@ff810000"; 2. 在该节点下添加一个子节点,以描述GPIO模拟I2C通信的相关信息,如下所示: ``` i2c-gpio { compatible = "i2c-gpio"; gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>, <&gpio0 1 GPIO_ACTIVE_HIGH>; sda-gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; scl-gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; i2c-gpio,delay-us = <10>; i2c-gpio,sda-open-drain; }; ``` 其中,"gpios"属性描述了使用的GPIO引脚,"sda-gpios"和"scl-gpios"属性分别描述了SDA和SCL引脚,"i2c-gpio,delay-us"属性描述了时序控制的延迟时间,"i2c-gpio,sda-open-drain"属性描述了SDA引脚是否使用开漏输出模式; 3. 将需要使用GPIO模拟I2C通信的设备的设备树节点中的"compatible"属性设置为"i2c-gpio",并添加"reg"属性描述设备地址。 例如,假设需要使用GPIO模拟I2C通信控制一个I2C设备,其设备地址为0x50,则可以在设备树中进行如下设置: ``` i2c@ff810000 { compatible = "snps,dw-i2c"; reg = <0x0 0xff810000 0x0 0x100>; ... }; i2c-gpio@0 { compatible = "i2c-gpio"; gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>, <&gpio0 1 GPIO_ACTIVE_HIGH>; sda-gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; scl-gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; i2c-gpio,delay-us = <10>; i2c-gpio,sda-open-drain; }; my-i2c-device@50 { compatible = "i2c-gpio"; reg = <0x50>; }; ``` 需要注意的是,不同的设备树可能存在差异,以上仅为一般步骤,具体设置需要根据实际应用场景进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值