找回密码
 立即注册
楼主: FL***

请教I2C通信问题

[复制链接]
  • TA的每日心情
    开心
    昨天 10:10
  • 签到天数: 122 天

    [LV.7]常住居民III

    33

    主题

    397

    回帖

    2044

    积分

    荣誉版主

    积分
    2044
    发表于 2024-2-14 11:35:50 | 显示全部楼层
    本帖最后由 王昱顺 于 2024-2-14 11:41 编辑
    FL_FL 发表于 2024-2-14 11:21
    流程成功的关键在于:I2C主机模式下能否收到其它主机模式MCU广播的数据。 ...

    STC的MCU主机模式无法接收其他主机数据。
    只有在从机模式才能发送数据。
    如果想要实现你所述的这种效果,可以关闭IIC状态,通过模拟IIC主机仲裁来使能当前设备使用主机还是从机模式。
    具体实现可以是使用随机的延时函数(例如1ms~5ms)来避免主机抢总线,有一个主机抢到总线控制权后打开IIC主机模式,其余主机打开IIC从机模式等待接收注册信息

    而且还有一个关键问题就是你查询IIC注册信息这一步,IIC从机只能被迫的接收通讯,如果从机都挂一起用广播地址,查询的时候会造成数据被与掉而出现错误数据。
    更好的方式应该是每次主机抢到总线注册完成后计数并且广播通知其他没注册的从机自己这次使用的地址。其他从机变成主机注册的时候自行避开。
    而注册成功的从机应该等待所有设备都注册完成后,一段时间IIC没有数据交流才自动切换进入从机地址。这样可以顺便得知所有的IIC注册设备列表
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:10
  • 签到天数: 122 天

    [LV.7]常住居民III

    33

    主题

    397

    回帖

    2044

    积分

    荣誉版主

    积分
    2044
    发表于 2024-2-14 11:42:46 | 显示全部楼层
    FL_FL 发表于 2024-2-14 11:35
    柜内模块数据交互用CAN有点浪费,设想的是柜内用I2C,柜外有线用CAN

    这样的话还是需要自行实现一下IIC主机设备总线仲裁
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-2 13:13
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    2

    主题

    11

    回帖

    124

    积分

    注册会员

    积分
    124
     楼主| 发表于 2024-2-14 13:08:51 | 显示全部楼层
    王昱顺 发表于 2024-2-14 11:42
    这样的话还是需要自行实现一下IIC主机设备总线仲裁

    初步考虑下图这种思路来做,不用总线仲裁。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-2 13:13
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    2

    主题

    11

    回帖

    124

    积分

    注册会员

    积分
    124
     楼主| 发表于 2024-2-14 13:09:19 | 显示全部楼层
    新的注册流程
    流程图1.png
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 23:54
  • 签到天数: 103 天

    [LV.6]常住居民II

    11

    主题

    69

    回帖

    239

    积分

    中级会员

    积分
    239
    发表于 2024-2-14 13:31:30 | 显示全部楼层
    感谢分享,受教育了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-2 15:38
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    22

    回帖

    86

    积分

    注册会员

    积分
    86
    发表于 2024-2-26 17:01:12 | 显示全部楼层
    请问大家接触过用STC8H8K64U与ESP32进行IIC通讯吗?
    我尝试用ESP32作为IIC 主机,STC8H8K64U作为IIC从机。主机发送的数据  Wire.write(1);   ,从机能接收到,但是打印的结果是Read123=-10136
    不清楚是哪里出现了问题,求教!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-2 15:38
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    22

    回帖

    86

    积分

    注册会员

    积分
    86
    发表于 2024-2-26 18:09:05 | 显示全部楼层
    请问大家接触过用STC8H8K64U与ESP32进行IIC通讯吗?
    我尝试用ESP32作为IIC 主机,STC8H8K64U作为IIC从机。主机发送的数据  Wire.write(1);   ,从机能接收到,但是打印的结果是Read123=-10136
    不清楚是哪里出现了问题,求教!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-2 13:13
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    2

    主题

    11

    回帖

    124

    积分

    注册会员

    积分
    124
     楼主| 发表于 2024-3-2 11:16:14 | 显示全部楼层
    HHJuan 发表于 2024-2-26 18:09
    请问大家接触过用STC8H8K64U与ESP32进行IIC通讯吗?
    我尝试用ESP32作为IIC 主机,STC8H8K64U作为IIC从机。 ...

    I2C能收到数据,通信应该没问题的,是不是数据的表现形式有问题,用16进制输出来看看。不行就降低数据发送的速率再试试。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-2 15:38
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    22

    回帖

    86

    积分

    注册会员

    积分
    86
    发表于 2024-3-2 15:31:11 | 显示全部楼层
    本帖最后由 HHJuan 于 2024-3-2 15:32 编辑
    FL_FL 发表于 2024-3-2 11:16
    I2C能收到数据,通信应该没问题的,是不是数据的表现形式有问题,用16进制输出来看看。不行就降低数据发 ...

    我这里有我遇到的问题和调试内容的说明,您方便的话,能帮我看一下吗?

    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6938
    STC8H8K64U与ESP32/Arduino的IIC通信问题

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 00:20
  • 签到天数: 101 天

    [LV.6]常住居民II

    14

    主题

    399

    回帖

    968

    积分

    荣誉版主

    热心市民

    积分
    968
    发表于 2024-3-3 20:06:31 | 显示全部楼层
    I2C总线也不是什么热插拔总线,自动分配从机地址有些弱需求的成分,不如从机模组设置一个拨码开关配置地址,成本高不了多少,但可靠性和可管理性增加很多。
    睁开眼睛做场梦~~~
    回复 支持 1 反对 0 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-19 06:21 , Processed in 0.067731 second(s), 66 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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