龍杰ACR122U NFC讀卡器支持Apple Pay功能
自從谷歌的操作系統(tǒng)Android4.4增加了NFC功能,龍杰NFC研發(fā)組就跟蹤測試了基于主機(jī)的卡模擬(HCE)功能(類似于現(xiàn)在火爆的Apple pay)。就是說龍杰ACR122U NFC讀寫器亦可以支持Apple pay 中基于硬件SE的卡模擬功能。
龍杰ACR122U NFC讀寫器可支持Apple pay 功能
下面基于主機(jī)模擬卡的連接龍杰ACR122U的原理給大家演示一遍,先介紹基于主機(jī)的卡模擬功能的工作原理。
ISO/IEC 7816-4卡片模擬
ISO/IEC 7816-4標(biāo)簽將內(nèi)存分為多個可以單獨(dú)選擇的應(yīng)用。每個應(yīng)用有一個名稱或者文件ID。你可以發(fā)送SELECT命令并在命令中指定正確的應(yīng)用名稱來連接應(yīng)用。為了實(shí)現(xiàn)這套系統(tǒng),Android基本上是將每個Android應(yīng)用程序視作標(biāo)簽中的一個或者多個應(yīng)用。由于應(yīng)用名稱或者文件ID應(yīng)當(dāng)具有唯一性,所以這個功能非??幔F(xiàn)在你的Android智能手機(jī)變成了一個大標(biāo)簽。這套系統(tǒng)甚至能夠與基于安全模塊的卡模擬共存。
建立連接的過程十分簡單。首先通過龍杰ACR122U讀寫器(PN532 NFC芯片)發(fā)送一個InListPassiveTarget命令。一旦目標(biāo)進(jìn)入讀寫范圍內(nèi),就直接通過DataExchange命令發(fā)送一個SELECT APDU。從現(xiàn)在開始只需繼續(xù)發(fā)送DataExchange命令,直到整個通信過程結(jié)束。
以十六進(jìn)制格式表示(InListPassiveTarget):
D4 4A 01 00
一旦目標(biāo)進(jìn)入范圍,你會收到下列目標(biāo)信息:
01 0004 60 04 089D64A2 0575807002
01 = Target No
0004 = SENS_RES
60 = SEL_RES (please have a look at the HCE documentation how to compare the value)
04 = length of the NFCID
089D64A2 = random NFCID, it changes with every connection
0575807002 = ATS
現(xiàn)在可以發(fā)送SELECT APDU與手機(jī)上的APP建立連接:
D44001 00A4040007F001020304050600
返回?cái)?shù)據(jù)如下:
00 = CLAss
A4 = INStruction, SELECT
04 = P1, select by name
00 = P2
07 = length of the application name
F0010203040506 = application name as defined in the manifest by the AID-filter
你的HostApduService會收到上述信息作為第一條APDU?,F(xiàn)在你可以隨意發(fā)送數(shù)據(jù),甚至沒有必要編碼為APDU。
下面是為該演示編寫的代碼:
IsoDepTamaCommunicator屬于桌面端,桌面端使用NFCTools與Android設(shè)備建立IsoDep連接。完整示例請參看org.nfctools.examples.hce package。
在Android端,你有一個簡單的HostApduService(定義見HCE文件)。完整源代碼見host-card-emulation-sample repository。
陷阱
在開發(fā)過程中首先假設(shè)APDU使用常見的CLA,所以選用了DesFire卡的0x90。但返回下列錯誤消息。
E/BrcmNfcNfa(1187): CET4T: Unsupported Class byte (0x90)
通過查看Android source code,會發(fā)現(xiàn)正確的CLA是0x00。另外預(yù)期的P1參數(shù)也可以在源代碼中找到。
NFCTools范例
如果想要嘗試,可以克隆host-card-emulation-sample GitHub庫,為自己的設(shè)備編寫Android App。前提要求是Android 4.4系統(tǒng)以上。而桌面端只需要從nfctools-examples releases下載最新版本的nfctools-examples.jar。
通過以下命令啟動范例:
java -cp nfctools-examples.jar org.nfctools.examples.hce.HceDemo
小結(jié)
基于主機(jī)的卡模擬功能非常簡單易用。相較于Android Beam功能的LLCP/SNEP實(shí)現(xiàn)來說,不容易出錯并且響應(yīng)速度要快許多。當(dāng)然采用HCE模式進(jìn)行P2P通信只是一個小技巧而已。期望Android團(tuán)隊(duì)會在未來版本中開放對SNEP棧的訪問。
需要注意的是,一個DataExchange命令能夠傳輸?shù)臄?shù)據(jù)量限制在200字節(jié)左右。如果希望傳輸大量數(shù)據(jù),則需要自己將其劃分為幾個小的塊。
龍杰NFC研發(fā)組就跟蹤測試了基于主機(jī)的卡模擬(HCE)功能(類似于現(xiàn)在火爆的Apple pay)。就是說龍杰ACR122U NFC讀寫器亦可以支持Apple pay 中基于硬件SE的卡模擬功能。
如果你對nfctools有任何疑問,請關(guān)注ACS微信加入龍杰NFC研發(fā)組一起討論吧。
(rfid世界網(wǎng)獨(dú)家稿件,轉(zhuǎn)載請注明來源作者?。?/b>