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芯片)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章