現在 NFC 市場份額最大的就是 NXP 的料,比如 PN547、PN548、PN65T。
今天我們主要就以 NXP 的 NFC 為例。
所謂 NFC ,實際上是包括 NFCC (NFC Controller) 和 eSE (安全芯片),
eSE 可以是獨立的,也可以是和 Sim 卡集成的。
加上加密模塊就可以完成卡模擬 (Card Simulation) 功能,
如果沒有加密模塊便只能實現 P2P 和 Reader 功能。
PN547 和 PN548 不支持獨立的 eSE,
只能和加密的 Sim 卡協同工作。
PN65T 支持獨立的 eSE,
所以除了移植 NFCC (I2C介面) 以外,
我們還需要移植 eSE (SPI介面) 。
先提醒一件事情好了,
因為發現很多新進開發者都不先搞懂系統架構,
拿到一整包 code 就直接開始搞,
但是碰到問題的當下又缺乏大方向來幫助 debug。
因為 OS 架構通常分層分得很清楚,
所以今天不管換作是任何 OS 平台上的開發,
你先搞懂大架構,再來把問題縮小範圍就會輕鬆很多。
也比較不會被老闆罵喲 (笑),碎念結束。
讓我們繼續給它看下去!
從代碼上而言,驅動部分 PN547 和 PN548 採用的都是 PN544 的驅動文件。
但是會由於 Android 平台的版本有所少許差異。
基本上就是看有沒有 device tree 結構,
和是否有保留 platform 結構改為 "of" table 作判斷,
但基本上目前版本以 6.0 以上作為大宗的話是不用擔心太多的。
在本文中我們主要分析 PN544 的 NFC 移植問題,
代碼包一般都在他們官方的 GitHub 上可以找到。
第一件事我們應該找一份 porting guide 或是 datasheet 稍微看看,
於是我們找到且先打開 NFC_NCIHAL_docs
裡面的AN11762-Android_NXP_NFC_Setup_Guideline.pdf
看看,
裡面有很詳細地移植解說。
其代碼結構如下:
libnfc-nci/
資料夾需要確認,/system/lib/
下生成 libnfc_nci.so
,/system/lib/hw/
下生成 nfc_nci_pn54x.default.so
core/java/android/nfc
及 core/java/com/nxp
/system/framework/
下 framework.jar
的一部分。/system/lib/
下生成 libnfc_nci_jni.so
,/system/app/NfcNci/
生成 NfcNci.apk
但我知道,光看文件其實很沒 feel 的,
還是得稍微看一下,俗話說得好,
難吃的菜先吃完就剩下好吃的了!
下一篇我們就來詳細介紹移植吧!