很多同學在學習NFC協議的時候,覺得NFC的規範從底層到上層的應有盡有,有點無處下手的感覺。這裡就和大家分享下我曾經學習NFC規範的經驗。如果有不對的地方,也請各位同學批評指正。NFC Forum中有一個所有規範的列表,可以看到目前絕大部分的規範都已經正式發布了,當然了雖然是正式發布了,但是NFC FORUM還在不停的bug fix。表裡面並沒有列出NFC FORUM的一些新項目,如NCI NG和Wireless charging等。
在對NFC的某一個規範進行學習之前,首先要對NFC規範的整體架構有一個大致的瞭解,這樣的話,才能從整體上進行把握。這裡引用了NFC FORUM中一個公開文檔中的三個架構圖。NFC有三種工作模式,讀卡機(R/W),卡類比(CE)和點對點(P2P),那麼這三種模式也對應著不同的協議架構,這個其實與藍芽中的profile很類似,即針對不同的應用,有不同的協議組合。
讀卡機模式或讀寫入模式:
Analogue,也就是NFC物理層的協議,主要定義了NFC裝置的射頻特性,如射頻場的波形、強度等。
Digital Protocol,數字協議。實際上這裡就可以把它理解成NFC的MAC層協議,它定義了三種NFC技術,NFC-A/B/F,分別對應著ISO14443 TYPEA、TYPEB以及Felica的規範,其中包括了初始化、衝突檢測等。同時它也定義了傳輸協議,如NFC-DEP,ISO-DEP等。這個數字協議實際上就是ISO/IEC14443, ISO18092的一個合體。
這裡要說明一下,在這個架構圖中其實還有一個Activity的規範,它可以說是Digital的一個補充。Digital中定義了框架格式,編碼等通訊的功能,但是如何使用Digital中的定義的幀來完成通訊,則是在Activity規範中定義的。Activity中定義了一大堆的流程圖及狀態轉移圖,用來描述Digital規範中的內容是如何工作的,這樣看來其實Acitivity規範也應該就是Digital中的一部分。
以上這三個協議是NFC通訊的基礎,在NFC的三種模式下,都要使用這三個底層的協議。可以說這三個協議是整個NFC通訊的基礎,掌握了這三個協議可以說對於NFC的理解就成了一半。當然這也是NFC中閱讀起來最難的三個協議,當然了如果你對ISO14443/18092有瞭解的話,理解起來就比價輕鬆了,畢竟這些底層協議與非接觸卡規範是一脈相承的。
TYPE1-4 TAG OPERATION: 定義了如何從TYPE1/2/3/4中讀寫NDEF訊息。這裡TYPE1/2對應著ISO14443TYPEA,而TYPE3對應著SONY的Felica,TYPE4是一個開放的TAG標準,即ISO14443 TYPEA TYPEB和ISO 7816-4;
NDEF REFERENCE APPLICATON:是NFC Forum的RAF工作群組定義的一些應用規範,這些應用規範並不是強制性的,主要是提供一些參考,但實際上很多廠家都會使用RAF提供的參考規範來開發應用,比如說串連切換(Connection handover)用於NFC為藍芽或WIFI進行串連的建立。
Third Party NDEF Application:是由第三方開發的基於NDEF訊息的應用。NON-NDEF Application:如果不是基於NDEF的應用,實際上就是直接調用Digital協議進行應用資料的封裝,即將應用資料直接映射到Digital中定義的框架格式中。
點對點模式:
Analogue/Digital/Activity上面已經介紹過了。
LLCP:既然是P2P串連,那麼必然就牽涉到邏輯鏈路的管理,所以需要一個LLCP層,用於鏈路的建立、拆除、維護等功能,同時還提供連線導向和不需連線的服務等。
Simple NDEF Exchange protocol(SNEP):在P2P模式下定義了如何進行NDEF訊息的互動。SNEP的通訊模式就是請求/相應模式,及initator向Target發送SNEPrequest,Target向Initiator回應SNEP Response訊息。SNEP的請求和響應訊息中包含了NDEF格式的資料。這裡對NDEF做一個簡單的說明,其實NDEF應該是做上層應用的開發人員直接面對的,如在ANDROID中,基於Framework中的NFC API很多都是與NDEF格式相關的。NDEF其實就是NFC Forum中定義的一種標準的訊息格式,不僅用在了P2P中,也用在了讀卡機模式中。NDEF是由RECORD(RTD, 記錄)組成的,真正的使用者資料就是存放在RTD中的。NFC FORUM定義了不同的RTD規範,如TEXT, URI,Signature等等。注意一點,在這P2P的圖和R/W的圖中,並沒有顯示的描述NDEF規範。
Protocol Bindings,這裡NFC FORUM提了兩個規範一個是OBEX的映射,另一個是IP協議的映射,是將這些協議能夠映射到LLCP協商中。但是在NFC FORUM中,最終取消這兩個協議,是因為這兩個協議並沒有起到任何作用。這些都會在以後給大家介紹。file:///C:/DOCUME~1/QWJ/LOCALS~1/Temp/msohtmlclip1/01/clip_image004.gif
卡類比模式:
從協議架構上來說,這個架構確實是這樣的,貌似是比較簡單的,但是個人感覺卡類比模式還是蠻複雜的,因為隨著SE(安全單元,之前也稱為NFCEE)及NCI規範的引入,不僅SE可以類比成卡、DH(主機)和NFCC(NFC控制器)也都可以類比成卡。這在以後的介紹中也也會向大家說明。file:///C:/DOCUME~1/QWJ/LOCALS~1/Temp/msohtmlclip1/01/clip_image006.gif
介紹完基本的NFC協議架構後,這裡簡單的提一下NCI規範,全稱NFC Controller interface,主要的作用是將DH(Device host,主機,在手機中可以看做是手機的AP)和NFCC(可以看做手機中的NFC晶片,如PN544等)之間的訊息標準化,讓我們的手機CPU不用對每一個廠家的NFC晶片都做適配,只要CPU和NFC晶片都遵守NCI規範就可以了,當然了NFC晶片的驅動還是要適配的,呵呵。瞭解藍芽的同學應該很容易理解,這就是藍芽規範中的HCI介面,它們的設計理念是一致的。據說,Google正在為Android開發NCI。