中斷異常的分析思路

2021-08-20 18:30:59 字數 1406 閱讀 6013



工作學習中經常遇到中斷相關的issue,我一般會從 中斷源 (ic)-- 驅動層 -- sdk 逐層分析。往往解決的比較快。舉乙個例子,下面給出分析過程。

問題描述:

開機過程中指紋driver有大量異常中斷觸發log

問題分析:

首先,我們要確定的是,這些異常中斷是怎麼來的。有以下三種case。

1.軟體誤報

2.cpu主動發出的訊號

3.指紋sensor發出的訊號

針對軟體誤報,只需要cat proc/interrupt 看是否有中斷num增加。如果有num增加,則說明不是軟體誤報,而是pin上真的有中斷訊號。

cat此節點以後發現,num有增加。所以需要進一步確認。

針對cpu主動發出的訊號,我們只需要拔出指紋sensor,再cat proc/interrupt,這種方法不一定行得通。因為拔出指紋以後,系統有可能會解除安裝指紋driver。這時我們直接上大招,示波器 !我們指紋並未解除安裝driver,所以可以cat proc/interrupt,發現沒有增加num。那麼只有一種可能了,是指紋sensor發出的訊號!

現在,我們已經知道這中斷,來自於指紋sensor。接下來需要分析,指紋sensor異常中斷產生過程是什麼?

上手--->電容產生變化--->電壓產生變化--->電壓達到觸發中斷的閾值--->int pin發出中斷訊號

依據以上sensor中斷觸發流程,我們需要排查如下兩個方向:

指紋模組內部硬體資源出現損壞(比如部分電容,內部電路等出現異常)

指紋外部介面發生異常(vcc)

針對第一點,比較麻煩,因為對模組內部不了解,影響因素也比較多,所以先看第二點。

而第二點,只需要量取開機時irq 和 電源 的波形即可。

我們量測波形發現,vcc有乙個100mv的階躍。

至此,我們已經找到了異常點。下面需要分析為什麼該異常會導致中斷觸發。

當供電電壓為3.3v 和3.4v 時,理論上觸發中斷的電壓閾值是不同的。而我們發生問題的版本,測定閾值是在最初3.3v測定的a。當電壓突然抬公升至3.4v,在不上手的時候,中斷觸發電壓就達到了a,所以sensor會認為此時已經上手。

寫在最後的話,問題總有解決的時候,但專案不等人,所以分析思路很重要。中斷相關的問題,從 ic – driver – sdk 一層層分析,這樣會比較快 。

中斷和異常

中斷和異常 中斷訊號的處理方式 分緊急部分和不緊急部分 中斷處理 必須能夠重入,以便能夠中斷巢狀 中斷和異常的產生 乙個irq interrupt request 代表中斷控制器上的一根中斷線,和乙個中斷向量 單cpu 可程式設計中斷控制器 pic 多cpu 改進的可程式設計中斷控制器 apic 乙...

中斷和異常

中斷通常定義為乙個事件,該事件改變處理器執行的指令順序。中斷通常分為同步中斷與非同步中斷。異常是同步的,i o中斷是非同步的。中斷可以分為 i o裝置發出的中斷請求 irq 都可以被遮蔽,乙個中斷被遮蔽以後,控制單元就忽略他。只有硬體故障等幾個危急事件才是非遮蔽中斷。異常可以分為 可以糾正的異常,例...

中斷和異常

1 中斷機制的誕生 早期計算機,各程式只能序列執行,系統資源利用率低,為了解決這個問題,從而誕生了作業系統 作為計算機的管理者 引入中斷機制,實現了多道程式併發執行。本質 發生中斷就意味著需要作業系統介入,開展管理工作。2 中斷的概念和作用 1 當中斷發生時,cpu立即進入核心態。2 當中斷發生後,...