特权同学

GIO内部下拉带来的问题

0
阅读(2540)

GIO内部下拉带来的问题

问题和测试

在某产品中,一颗CMOS sensor的复位信号CMOS_RST和休眠信号CMOS_STB分别使用了1.5K电阻上拉,并且也分别连接到了CPU(TI的DM355)的两个GPIO上。

由于发现了sensor的CMOS_RST和CMOS_STB信号一直处于不可控状态(经软件检测确认是管脚分配错误),仅靠1.5K上拉电阻使其维持在大约2.8V的高电平状态(貌似不太影响整个sensor的一般工作,正常高电平应该是3.3V)。因为产品有一些问题存在,在查错过程中找到了这两个异常GPIO,后文是对其的一些测试和研究。

在CMOS_RST和CMOS_STB信号的1.5K上拉电阻不变的情况下,做了一些测试,发现CPU控制的GIO=0无法将实际的输出拉到低电平。对CMOS_RST信号做了一些测试,如表1所示。

表1

测试条件

CPU控制GIO=1

CPU控制GIO=0

空载,R=NC

3.28V

0V

空载,R=1.5K(外部上拉)

3.28V

2.65V

空载,R=10K(外部上拉)

3.28V

1.92V

负载,R=NC

3.28V

0V

负载,R=10K(外部上拉)

3.28V

1.90V

从表1的测试中发现,无论是上拉1.5K还是10K都无法在GIO输出低电平时使CMOS_RST的实际电压达到0.8V以下。

原因分析

查看CPU的datasheet,如图1所示。用于连接CMOS_RST和CMOS_STB信号的GIO100和GIO83内部有下拉电阻的设置,因此前面测试到外接1.5K或10K上拉电阻的低电平无法拉“低”的现象就可以解释了。

图1

此外,在DM355的datasheet并没有找到任何更多的信息,因此在TI官网一阵还找,终于发现了一些相关线索。在TI另一颗CPU中有关于GIO内部上下拉的比较详细的资料。

http://www.ti.com.cn/cn/lit/ds/sprs660e/sprs660e.pdf

page66

这里不仅比较详细的说明了TI的CPU内部会有PD/PU,也提到了设计者如何考虑外部PD/PU的使用,主要是一些如配置管脚或特殊应用的管脚,需要有一个较明确的状态。而对于内部的PD/PU,虽然也没有太明确的说明,但特权同学找到了相关配置PD/PU的选择寄存器,如图2所示是可配置的。不过,对于这个案例中使用的DM355,找遍了寄存器手册,还是没有任何“可编程”或PU/PD可设置的相关寄存器。因此,只能怪咱运气不好,惹不起咋还躲不起吗,解决办法有一个,so easy——

图2

解决策略

将连接到有PD的两个GIO信号外部的上拉电阻删除,问题解决。一个很细节的设计case,但它却是很可能启发一些大问题,所以望大家引以为戒。

Baidu
map