無線近場通訊NFC使能

NFC Enable

認識NFC系統是如何工作的,最好的方法莫過於熟悉NFC各個流程,本篇就介紹下NFC使能的流程。

NFC的上層服務 com.android.nfc 啟動隨著使能整個NFC系統,通過JNI層的 NativeNfcManager.nfcManager_doInitialize()初始化底層的相關so庫。

整個使能的過程中,需要記住層層向下設置的回調函數,這些回調都是以後底層數據上報的通路。Enable的詳細流程圖如下:


無線近場通訊NFC使能

Enable流程

上面紅色字體標註的相關函數在整個NFC系統中是很重要的回調。打開NFC模塊的相關操作,具體請查看 《無線近場通訊NFC控制器》。模塊打開完成後通過 HAL_NFC_OPEN_CPLT_EVT 事件上報完成的結果。打開的完成事件上報流程見下圖:


無線近場通訊NFC使能

Enable完成上報流程


打開的完成事件(數據)上報最終都會通過NFC_TASK線程的處理函數nfc_task(),接收到NFC_TASK_EVT_TRANSPORT_READY事件,協議棧會默認重置、初始化NFC芯片(同打開NFC模塊時重置、初始化芯片流程一樣),同時改變nfc_cb.nfc_state的狀態:NFC_STATE_W4_HAL_OPEN -> NFC_STATE_CORE_INIT。

數據下發的一般流程為協議棧按照指令的不同封裝數據格式,最後調用HAL_WRITE()將數據下發到底層芯片so庫中繼續處理,最後通過I2C總線將數據寫入芯片。硬件芯片收到數據處理完成後會對下發的指令進行回覆,芯片so庫會將數據讀取上來並上報給上層處理。芯片so庫的讀、寫是如何工作的可以查看《無線近場通訊NFC控制器》。

芯片so庫的讀數據上報的流程見下圖:


無線近場通訊NFC使能

讀數據上報流程


圖中藍色標註的為NFC芯片處理模塊,雞蛋色標註的是上層NFC協議棧、JNI層或NFC服務模塊。

經過Reset、Init指令的成功執行後nfc_cb.nfc_state的變化為:NFC_STATE_CORE_INIT -> NFC_STATE_W4_POST_INIT_CPLT。

最後調用nfc_cb.p_hal->core_initialized()內核初始化完成。在core_initialized的完成事件上報中將nfc_cb.nfc_state的狀態值置到一個正常值:NFC_STATE_IDLE。

以NFA_DM_ENABLE_EVT事件上報到JNI層代表NFC系統的初始化工作完成,最後設置芯片進入斷電休眠模式(LOW_POWER)來降低功耗。最終的 nfc_cb.nfc_state:

NFC_STATE_IDLE -> NFC_STATE_NFCC_POWER_OFF_SLEEP。


分享到:


相關文章: