iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
0
  • Guide :
    • 介紹
    • Service
    • Adapter
    • Handover
    • Kernel

前言

現在 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 看看,
裡面有很詳細地移植解說。

其代碼結構如下:

  • external
    該目錄下是 NCI based NFC stack implementation,
    裡面有 libnfc-nci/ 資料夾需要確認,
    注意 halimpl 這個三級目錄中的 pn54x 下是 HAL 層的接口。
    external/libnfc-nci
    將會在 /system/lib/ 下生成 libnfc_nci.so
    將在 /system/lib/hw/ 下生成 nfc_nci_pn54x.default.so
  • frameworks/base
    該目錄下是 NFC 接口和公用的 API。
    core/java/android/nfccore/java/com/nxp
    將會生成 /system/framework/framework.jar 的一部分。
  • packages
    該目錄下是 NFC JNI and Java implementation of NCI stack
    packages/apps/Nfc/nci
    將會在 /system/lib/下生成 libnfc_nci_jni.so
    將在 /system/app/NfcNci/ 生成 NfcNci.apk
  • Kernel
    該目錄下是驅動對硬體端的控制。
  • device
    需要把 NFC 支援的板級設定打開和一些檔案的放置設定。

但我知道,光看文件其實很沒 feel 的,
還是得稍微看一下,俗話說得好,
難吃的菜先吃完就剩下好吃的了!
下一篇我們就來詳細介紹移植吧!


Reference :


上一篇
[Day-21] Android Pie NFC (8) Handover (5)
下一篇
[Day-23] Android Pie NFC (10) Kernel (2)
系列文
Android Pie 底層開發學習心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言