FL_FL 发表于 2024-2-13 17:26:41

请教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:00


神农鼎 发表于 2024-2-13 17:48:27


FL_FL 发表于 2024-2-13 18:06:43

神农鼎 发表于 2024-2-13 17:48


MA对广播数据不起作用,主机向广播地址0x00发送的数据,所有从机都可以收到。

王昱顺 发表于 2024-2-13 19:23:08

FL_FL 发表于 2024-2-13 18:06
MA对广播数据不起作用,主机向广播地址0x00发送的数据,所有从机都可以收到。 ...

需要自行设计从机地址切换,且外部有其他手段指定地址。
讲一个简单的流程。首先是一个主机,其他都是从机。从机地址都是0x00且开启地址匹配。
此时主机发送地址,所有从机都能收到。从机方面有其他手段(例如一个按键),保存当前地址并且转入设定的地址。这样主机给每个从机制定完成地址后,就可以正常和从机通讯了。
如果想要全自动实现,首先就是逻辑上的不通顺。如何知道分配的地址是否重叠?如何判断地址和芯片的对应关系?所以还是需要手动的,上面这个流程只能简化修改程序的步骤,可以让所有从机都下载一个程序。

王昱顺 发表于 2024-2-13 19:25:11

FL_FL 发表于 2024-2-13 18:06
MA对广播数据不起作用,主机向广播地址0x00发送的数据,所有从机都可以收到。 ...

如果想要全是主机进行地址传送,也就是所有的设备优先级都一致。建议使用can总线通讯,硬件层实现了自动仲裁发送,但是地址仍然是需要我们给指配的

FL_FL 发表于 2024-2-14 11:19:03

设想的注册流程如图所示

FL_FL 发表于 2024-2-14 11:21:15

流程成功的关键在于:I2C主机模式下能否收到其它主机模式MCU广播的数据。

FL_FL 发表于 2024-2-14 11:23:02

王昱顺 发表于 2024-2-13 19:25
如果想要全是主机进行地址传送,也就是所有的设备优先级都一致。建议使用can总线通讯,硬件层实现了自动 ...

不是全主机模式

FL_FL 发表于 2024-2-14 11:35:07

王昱顺 发表于 2024-2-13 19:25
如果想要全是主机进行地址传送,也就是所有的设备优先级都一致。建议使用can总线通讯,硬件层实现了自动 ...

柜内模块数据交互用CAN有点浪费,设想的是柜内用I2C,柜外有线用CAN
页: [1] 2
查看完整版本: 请教I2C通信问题