哪个微控制器应该为主/从?


8

我正在设计一个闹钟来唤醒我。该系统由3个子系统组成:

  1. (S1) RGB七段式管理。由5µC组成,一个用于数字,一个用于“:”。µC较高的原因是我不将IC用于RGB LED,而仅用于晶体管。
  2. (S2)传感器和输入管理。1 µC管理距离传感器以设置警报和当前时间;和用于配置的开关。
  3. (S3)通信和音频文件。一个与UART中的蓝牙模块进行通信以进行进一步工程的µC,获得了一个RTC晶体以具有准确的时钟并管理音频播放。(我尚未处理音频)

在正常执行期间,S2读取输入并将其发送到S3进行处理。然后S3向S1发送必须显示的内容。

我想使所有这些子系统一起通信,然后选择使用I2C总线。但是我的问题来了:

  • 哪个µC必须是主机?

一方面,S3是系统的中心,但另一方面,S2发送的消息可能比S3多。这就是为什么我不确定谁将成为主人/奴隶。

  • 是否有规则确定谁将成为从机/主机?我应该问自己一个什么样的问题才能做出好的选择?(通常,不适用于此特定系统)

14
为什么一定要使用5个微控制器来实现基本的时钟/闹钟?
安迪(aka Andy)

2
为实现I2C主设备的“系统编排器”提供另一个uC。那不是讽刺的话,我是真的。由于您似乎不必担心多余的uC,因此可将外围设备与控制之间很好地分开。
Neil_UK

1
@Andyaka每个数字具有不同的颜色(3 * 5个PWM),并且需要在GPIO上切换每个段。我使用MSP430作为µC,每个只有20个引脚和4个PWM。(我有100多个,因此我需要使用股票^^')
M.Ferru

7
@Andyaka实际上还有另一个原因。我是EE学校的业余爱好者。我想学习如何在具有几个µC的系统之间建立良好的通信,因为我从未做过这样的事情。如果我只使用一个µC(这当然是一个更好的选择),我将不会学到“新知识”。
M.Ferru '17

2
@ M.Ferru很多事情都会影响这样的选择。担心的是,在必须完全“重做”设计之前,我可以忍受多少不确定性和未来“未知”的风险。另一个是时序过程,其中一些过程可能有多关键。例如,如果我需要在严格的时间限制下支持长距离传输,则仅凭这一事实可能会使功能良好的用户界面复杂化。但这是要写出您现在知道的所有细节,以及您能想到的一切,并决定如何最好地组织这些细节。
16:02

Answers:


7

是否有规则确定谁将成为[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”中的代码。


1

S1应该是I 2 C从站。对于主机,S2或S3都是明智的选择。但这只是在重申原始问题中提到的内容。

通常,处理各种输入的MCU是主控制器的理想选择。在您的情况下,它可以是S2(各种用户按钮,RTC)或S3(来自蓝牙的各种命令)。如果您不能决定哪一个,则可以使用更大的控制器,并将功能S2和S3都集成到一个MCU中。这种方法可以为您提供更大的灵活性。


0

系统中的每个微控制器都可以作为主机。但是,其中一些更适合此功能。正如其他人所说,具有更多信息的微控制器应该是Master。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.