FL_FL 发表于 2024-2-14 11:21
流程成功的关键在于:I2C主机模式下能否收到其它主机模式MCU广播的数据。 ...
STC的MCU主机模式无法接收其他主机数据。
只有在从机模式才能发送数据。
如果想要实现你所述的这种效果,可以关闭IIC状态,通过模拟IIC主机仲裁来使能当前设备使用主机还是从机模式。
具体实现可以是使用随机的延时函数(例如1ms~5ms)来避免主机抢总线,有一个主机抢到总线控制权后打开IIC主机模式,其余主机打开IIC从机模式等待接收注册信息
而且还有一个关键问题就是你查询IIC注册信息这一步,IIC从机只能被迫的接收通讯,如果从机都挂一起用广播地址,查询的时候会造成数据被与掉而出现错误数据。
更好的方式应该是每次主机抢到总线注册完成后计数并且广播通知其他没注册的从机自己这次使用的地址。其他从机变成主机注册的时候自行避开。
而注册成功的从机应该等待所有设备都注册完成后,一段时间IIC没有数据交流才自动切换进入从机地址。这样可以顺便得知所有的IIC注册设备列表
FL_FL 发表于 2024-2-14 11:35
柜内模块数据交互用CAN有点浪费,设想的是柜内用I2C,柜外有线用CAN
这样的话还是需要自行实现一下IIC主机设备总线仲裁 王昱顺 发表于 2024-2-14 11:42
这样的话还是需要自行实现一下IIC主机设备总线仲裁
初步考虑下图这种思路来做,不用总线仲裁。
新的注册流程 感谢分享,受教育了 请问大家接触过用STC8H8K64U与ESP32进行IIC通讯吗?
我尝试用ESP32作为IIC 主机,STC8H8K64U作为IIC从机。主机发送的数据Wire.write(1); ,从机能接收到,但是打印的结果是Read123=-10136
不清楚是哪里出现了问题,求教! 请问大家接触过用STC8H8K64U与ESP32进行IIC通讯吗?
我尝试用ESP32作为IIC 主机,STC8H8K64U作为IIC从机。主机发送的数据Wire.write(1); ,从机能接收到,但是打印的结果是Read123=-10136
不清楚是哪里出现了问题,求教!
HHJuan 发表于 2024-2-26 18:09
请问大家接触过用STC8H8K64U与ESP32进行IIC通讯吗?
我尝试用ESP32作为IIC 主机,STC8H8K64U作为IIC从机。 ...
I2C能收到数据,通信应该没问题的,是不是数据的表现形式有问题,用16进制输出来看看。不行就降低数据发送的速率再试试。 本帖最后由 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通信问题
I2C总线也不是什么热插拔总线,自动分配从机地址有些弱需求的成分,不如从机模组设置一个拨码开关配置地址,成本高不了多少,但可靠性和可管理性增加很多。
页:
1
[2]