是否有规则确定谁将成为[I 2 C]从/主机?
是。只有I 2 C 主设备才能开始传输。I 2 C从设备无法告诉您某些事情,直到主机再次对其进行轮询(除非您添加额外的中断信号,这会增加整个系统的复杂性)。
忽略(很少使用)设备在主从之间切换的功能,这意味着I 2 C主设备必须具有整个系统的足够知识,才能知道如何与所有I 2 C 通信在那辆公共汽车上的奴隶。
我应该问自己一个什么样的问题才能做出好的选择?(通常,不适用于此特定系统)
考虑一下系统中的哪个MCU知道:
- 与整体系统状态有关,因此可以决定何时向从站发送I 2 C命令;
- I 2 C命令需要发送到每个从站;
- 每个I 2 C从站需要收集什么数据;
- I 2 C设备仅对输入命令做出响应(这将适用于您的“ S1” MCU-显然它们最适合作为从设备);
不管哪个 MCU将成为I 2 C主设备,您都需要设计总体系统架构,并考虑需要向每个设备发送哪些命令,以及需要多长时间接收任何响应。尝试设计一个确实有明显“主机”并且知道所有系统状态的系统,然后它很可能也是I 2 C主设备。
你说:
S3是系统的中心,但另一方面,S2发送的消息可能比S3多。
目前还不清楚谁“S2”正在发送邮件至。是否需要主动向任何人发送消息?还是可以将“ S2” 作为I 2 C主站由“ S3” 轮询,以接收“ S2”收集的任何传感器和开关信息?如果可以通过“ S3”来轮询“ S2”,那么根据说明,显然“ S3” MCU可能是I 2 C主设备。
我对添加另一个 MCU(称为“ S10”)作为I 2 C主设备持谨慎态度。这是因为似乎“ S10” MCU需要进行大量轮询,才能收集“ S3”已经知道的全部系统状态知识。这似乎是不必要的重复。
因此,除非“ S3”由于达到其RAM空间,闪存空间或CPU周期等限制而不能执行该工作,否则让“ S3”通过使其成为I 2 C主站而不是添加它来控制系统可能会变得不那么复杂。附加的“ S10”控制器。
另一方面,如果您不介意额外的复杂性,则添加整体的“ S10”控制器会增加系统的模块性(分段),因为“ S3”则仅支持蓝牙和音频-别无其他。这可以为将来添加新的(无法预料的)功能/附加的MCU提供额外的灵活性,而无需更改“ S3”中的代码。