問題描述:
為了讓device可以更省電,客戶藉由調整參數"NXP_ENABLE_DISABLE_STANBY = 0x01",讓NFC在standby時可以更為省電。
客戶確認修改NXP_ENABLE_DISABLE_STANBY後,對於耗電狀況是有幫助的(30mA → 71uA):
NXP_ENABLE_DISABLE_STANBY = 0

NXP_ENABLE_DISABLE_STANBY = 1

但修改後發現NFC會莫名停止發射信號,無法進行讀卡;若是NXP_ENABLE_DISABLE_STANBY = 0x0的狀況下,則沒有異常。
問題分析:
1. 由log確認,問題發生前,
RF_DISCOVER_CMD指令發送與回覆都正常:
NxpNciX : len = 14 > 21030B0500010101020180010601
NxpNciR : len = 4 > 41030100
問題發生當下沒有其他i2c溝通的log。
2. 客戶後續發現,兩台device互相靠近,可100%複製出問題.

3. 由客戶描述問題複製手法,推測可能是device進入card mode程序時發生問題。
重新檢視device開機log, 發現在設置RF_SET_LISTEN_MODE_ROUTING_CMD階段的RSP是有問題的:

另外在客戶提供的libnfc-nci.conf裡,HOST_LISTEN_TECH_MASK的設定值是0x7,這部分與PN7220支援並不符合。

問題解決:
由PN7220文件可知,在card mode的部分只支援ISO-DEP tech A


客戶在libnfc-nci.conf使用錯誤的定義,導致在開機過中設定程序並不完整。
在修改過後,device已可正常使用。
問題學習:
後續在分析問題時除了要看問題當下的log狀況,也要注意在初始化階段是否有其他問題。同時也要確認客戶在設定值的部分是否有照著default設定,或是用錯其他檔案。
參考來源