终于还是在上电时序问题上给自己挖了个坑,只是没想到在这么常见(或者说是简单)的电路上栽进了坑,不过越是简单,以后会对此印
象越是深刻吧!
电路很简单,就是用安霸S2L33作为主控通过GPIO口来控制外部一个三 {MOD}灯的亮灭,出现的问题是上电瞬间三 {MOD}灯会闪一下,而这个不是我们想要的,最关键的问题是它是在uboot启动之前。也就是说这个闪一下发生在GPIO口控制起作用之前。
一般情况下,这个问题跟GPIO口默认的上下拉情况有关。以我这个三 {MOD}灯控制电路为例:电路中我选择的是一个共阳极的三 {MOD}灯,也就是说阳极接了3.3V电源,阴极串联限流电阻后接GPIO口。在这种情况下如果我选择的GPIO口内部接了下拉电阻(即默认下拉)就会出现上电瞬间灯会亮的情况。可是我知道自己之前设计时选择的这三个GPIO口内部是没有接上下拉,而且我还给它们外接了上拉电阻,只是在实际使用中将其空贴了。这种情况似乎有点不道理,一时懵逼。。。关键是接上上拉电阻后还是老样子,而其他同事的项目中选用同样的GPIO口,烧录进去同样的驱uboot动程序却是OK的。
这个时候,有位同事发现我电路中给三 {MOD}灯供电的电源跟他的不一样,他用的是跟主控端GPIO口共用的电源VD3V3,该电源由供电处5V0经DC-DC转化而来,而且跟其它电源有一定的时序配置控制,我电路中给三 {MOD}灯供电的电源却是由5V0直接接了一个LDO就出来了的3.3V,然后我做了一下测试,把我电路中这个LDO断开,通过飞线主控端的VD3V3接到三 {MOD}灯,结果问题迎刃而解,上电后便不会有闪烁了。经此实验,才意识到问题出在了我的电路中三 {MOD}灯的电源早于主控GPIO口那端电源上电,使得上电瞬间GPIO端相当于是低电平/高阻态(即使这里实验时已经接了上拉电阻,但是因为电源还没有上电,所以“上拉”也无从谈起)。后来跟做软件驱动的大牛同事nobel谈起这个电路,他说只要我能将这个LDO出来的3.3V延迟200ms就行了,因为那时候主控GPIO口那端电源已上电,当然这是这个BUG解决的办法,算是后话了,而时序问题却是这个BUG出现的原因所在。
一般的,在设计电路时我们必定会关注主控端电源的上电时序,因为Datasheet或者参考电路中会明确说明或者画出有关上电时序的信息,但是经过今天这个电路出现的BUG ,我才意识到其实时序问题无处不在,而不仅仅主控电源这样的大件中,所以以后设计电路一定要多在上电顺序方面下点功夫琢磨。
当然这个有人会说你把主控GPIO口那端电源跟负载电路(在我这个电路中指的是三 {MOD}灯驱动电路)中的电源用成一样的不就行了,还谈什么时序,哈哈,其实在这个电路中确实是这样,而且这也是提醒我们在做这种简单一点的小功率驱动电路时一定要注意:主控GPIO口那端电源跟驱动电路中的电源最好保持一致。但是在其它一些驱动电路中,比如负载需要大一点功率的驱动电路中,主控端电源无法带得起负载电路中那么大负载,或者负载电源与主控GPIO口那端电源电压不一致,而此时上电时序问题依然是存在的,如果不考虑,很可能影响力更大的BUG。
本该附几张示意图或者电路图的,鉴于初开博客,这方面还有待提高。晚安!