请教I2C通信问题
向各位大侠请教I2C通信问题:1、用STC的单片机通过I2C总线组网,大家有自动分配从机地址的解决方案吗?
2、假设I2C总线网络中有多个主机,各主机可以收到其它主机发送的广播数据吗?
3、STC32G.h头文件中,以下有关主机状态的定义在什么情况下使用?
<div>#define MS_IDLE 0x00
#define MS_START 0x01
#define MS_SENDDAT 0x02
#define MS_RECVACK 0x03
#define MS_RECVDAT 0x04
#define MS_SENDACK 0x05
#define MS_STOP 0x06
#define MS_START_SENDDAT_RECVACK 0x09
#define MS_SENDDAT_RECVACK 0x0a
#define MS_RECVDAT_SENDACK 0x0b
#define MS_RECVDAT_SENDNAK 0x0c</div>
感谢!
神农鼎 发表于 2024-2-13 17:48
MA对广播数据不起作用,主机向广播地址0x00发送的数据,所有从机都可以收到。 FL_FL 发表于 2024-2-13 18:06
MA对广播数据不起作用,主机向广播地址0x00发送的数据,所有从机都可以收到。 ...
需要自行设计从机地址切换,且外部有其他手段指定地址。
讲一个简单的流程。首先是一个主机,其他都是从机。从机地址都是0x00且开启地址匹配。
此时主机发送地址,所有从机都能收到。从机方面有其他手段(例如一个按键),保存当前地址并且转入设定的地址。这样主机给每个从机制定完成地址后,就可以正常和从机通讯了。
如果想要全自动实现,首先就是逻辑上的不通顺。如何知道分配的地址是否重叠?如何判断地址和芯片的对应关系?所以还是需要手动的,上面这个流程只能简化修改程序的步骤,可以让所有从机都下载一个程序。 FL_FL 发表于 2024-2-13 18:06
MA对广播数据不起作用,主机向广播地址0x00发送的数据,所有从机都可以收到。 ...
如果想要全是主机进行地址传送,也就是所有的设备优先级都一致。建议使用can总线通讯,硬件层实现了自动仲裁发送,但是地址仍然是需要我们给指配的 设想的注册流程如图所示
流程成功的关键在于:I2C主机模式下能否收到其它主机模式MCU广播的数据。 王昱顺 发表于 2024-2-13 19:25
如果想要全是主机进行地址传送,也就是所有的设备优先级都一致。建议使用can总线通讯,硬件层实现了自动 ...
不是全主机模式 王昱顺 发表于 2024-2-13 19:25
如果想要全是主机进行地址传送,也就是所有的设备优先级都一致。建议使用can总线通讯,硬件层实现了自动 ...
柜内模块数据交互用CAN有点浪费,设想的是柜内用I2C,柜外有线用CAN
页:
[1]
2