gpio上拉失效问题

遇到一个问题是与gpio的上拉失效有关。

先看一下我的问题描述和解决过程


关于反复重启1000整机设备,出现PXM板卡启动失败的现象

问题描述:
通过当时记录的串口信息,最开始的异常出现在sdk加载上,sdk加载失败后内核打印localbus的错误,设备重启后ubi挂载失败
/home下程序丢失

问题分析:
P1020 cpu中的localbus是e500核与外围控制器的通道,与ram,nand都有连接, nand控制器使用的总线是localbus分出的一部分,
在switch异常,PCIe挂载不上switch的时候,sdk加载可能造成localbus异常,导致nand写入异常数据

实验现象:
修改uboot,在switch复位附近添删打印或加减延时,不改变原有流程,可复现问题
问题复现后发现复位switch的gpio15为0,即switch处于一直复位状态
经过进一步验证,gpio15有概率无法拉高,即拉低之后拉高没有生效
初步判断gpio15的问题可能与拉低之后延时20ms时间不够长有关(因为在命令行中可手动拉高)
也可能与芯片相关,但其他gpio未发现有这个现象。

现象1.添加不必要的打印或延时,一旦出现switch复位后gpio15无法拉高(复位异常),无论断电或重启,仍然出现switch复位异常
现象2.添删不必要的打印或延时,如果switch复位后gpio15可以拉高(复位正常),无论断电或重启, switch复位正常

在正式版本v001r001上未复现出问题,判断与现象2相同,但在特殊情况下,如高低温环境或较多次重启有概率出现gpio15拉高没有生效的情况

正式版本中switch的复位过程:
配置gpio15输出->配置gpio15拉低->延时20ms->配置gpio15拉高
优化:
配置gpio15输出->配置gpio15拉低->延时20ms->配置gpio15拉高->配置gpio15输入
gpio15外部电路是拉高的,可以避免gpio15拉高失败造成switch一直复位

实际上,原因就在使用gpio拉低复位后,拉高没有生效,程序里确实正确的写了寄存器,实际上gpio还是低的

导致了后续的更严重的问题

这算是一个芯片的bug吧,通过配置成输入,外部加上拉规避。


另附实验中学到的知识点

1、gpio odr寄存器对gpio value的影响

配置gpioodr


odr推挽   gpio可迅速上拉

odr 1 开漏   gpio可缓慢上拉,导致上拉完立刻打印的数据不准确

 

2、不管gpio配置成输入输出,data寄存器读出的数据与示波器相同(仅使用P1020芯片)




  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值