电子产品开发细节之 MCU未使用I/O端口的处理

实际的应用系统中,由于考虑未来的功能扩展或其它原因,经常会有未使用的 I/O。如何处理这些 I/O,关系应用系统的消耗电流甚至系统可靠性。因此,正确处理未使用的 I/O 端口,对于基于MCU的控制系统,是非常必要的。

对于双向的 I/O 端口,通常 MCU 的手册会推荐以下两种处理方法:
方法一:将端口设置为输出,并保持开路( open);
方法二:将端口设置为输入,并通过上拉电阻和电源连接;
电子产品开发细节之 MCU未使用I/O端口的处理
对于方法二,之所以通过上拉电阻和电源连接,其目的是为了将输入端口固定到高电平,以避免管脚悬空时可能在管脚上出现中间电压,从而避免贯通电流的发生。

那么,其中的上拉电阻是否可以省略呢?如果单纯从固定管脚到高电平这个作用看,似乎是可以省略的。但是,从系统的安全可靠性角度,这个上拉电阻是不可以省略的。究其原因,需要从 I/O 端口的内部组成来探讨。I/O 端口内部电路的简化示意图,如下图右侧图所示:
电子产品开发细节之 MCU未使用I/O端口的处理
当端口通过方向寄存器设置为输入时,端口的N管和P管都处于截止状态,通过上拉电阻将端口的管脚固定到高电平。通常情况下,执行初始化程序设定方向寄存器后,方向寄存器中的数据不会改变。但是,如果工作环境种存在强噪声,那么方向寄存器中的数据有可能会被意外地篡改。
如果端口的方向因电噪声从输入变更为输出,而且此时端口数据缓冲器中的数据恰好时0,那么端口的N管导通,电流经上拉电阻和N管流入参考地,如图中蓝色的虚线所示。所以,如果省略了这个上拉电阻,会产生大电流,增加系统功耗,甚至造成端口的损坏。

如果有多个未使用端口,为了节约成本,是否可以如下图所示,共用同一个上拉电阻呢?
电子产品开发细节之 MCU未使用I/O端口的处理
从逻辑功能看,这样的处理可以保证每个端口的高电平。但是,这种处理方法存在潜在的风险。

如前文所述,当工作环境中存在强噪声时,方向寄存器可能会被意外篡改。如果共用上拉电阻的两个端口都被意外篡改为输出端口,并且恰好一个端口的数据缓冲器数据 = 1, 另外一个端口的数据缓冲器数据 = 0,那么会有从一个端口的P管流经另外一个端口N管的大电流产生,可能会造成端口的损坏。

因此,不推荐多个端口共用同一个上拉电阻的处理方法。安全的处理方法是,每个端口通过单独的上拉电阻连接到电源,如下图所示。
电子产品开发细节之 MCU未使用I/O端口的处理