NFC技術的出現改變了人們使用某些電子設備的方式,甚至改變了信用卡、現金和鑰匙的使用方式,它可以應用在手機等便攜型設備上,實現安全的移動支付和交易、簡便的端到端通信、在移動中輕松接入等功能。隨著智能手機的快速興起,NFC與智能手機的結合將很大程度上促進NFC的發展,蘋果公司推出的 iPhone6也具備NFC功能,相信在不久的將來NFC必定被廣泛應用。
這個技術由非接觸式射頻識別(RFID)演變而來,由飛利浦半導體(現恩智浦半導體)、諾基亞和索尼共同研制開發,其基礎是RFID及互連技術。近場通信是一種短距高頻的無線電技術,在13.56MHz頻率運行于20厘米距離內。其傳輸速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三種。近場通信已通過成為ISO/IEC IS 18092國際標準、EMCA-340標準與ETSI TS 102 190標準。NFC采用主動和被動兩種讀取模式。
NFC技術原理
支持NFC的設備可以在主動或被動模式下交換數據。在被動模式下,啟動NFC通信的設備,也稱為NFC發起設備(主設備),在整個通信過程中提供射頻場(RF-field),。它可以選擇106kbps、212kbps或424kbps其中一種傳輸速度,將數據發送到另一臺設備。另一臺設備稱為NFC目標設備(從設備),不必產生射頻場,而使用負載調制(load modulation)技術,即可以相同的速度將數據傳回發起設備。此通信機制與基于ISO14443A、MIFARE和FeliCa的非接觸式智能卡兼容,因此,NFC發起設備在被動模式下,可以用相同的連接和初始化過程檢測非接觸式智能卡或NFC目標設備,并與之建立聯系。圖為NFC主動通信模式:
?
? bcm20793的NFC模塊電路設計
本文采用博通BCM20793 NFC芯片并結合S3C6410主控制器,設計了具有主動模式和被動模式的NFC閱讀器,主要針對硬件和驅動進行了設計。
? 硬件設計
NFC模塊主要由NFC(控制器,可與Device Host或Secure Element安全單元交互)、Antenna(天線)和Contactless Front-End(非接觸前段,負責射頻信號的調制解調工作)三部分組成。本設計采用BCM20793芯片,該芯片支持212或424 kbps的數據傳輸速率,是專為低功耗、低價格的設備設計的。該模塊提供PCI、I2C總線、UART串行接口,安全單元可以連接SD卡、SIM卡、SAM卡或是其他芯片,兼容多種通信標準。該芯片還支持低功耗模式、正常工作模式、輪詢模式等多種工作模式。
主控制器采用S3C6410芯片,該芯片高性能、低功耗、高性價比,可以運行Android系統。BCM20793與S3C6410采用I2C總線的連接方式。TX1和TX2引腳接RC匹配電路,RC匹配電路的P_JS_IT_18和天線相連接。NFC芯片由1.8 V電壓供電,其與主控制器有6根引腳相連,分別是NFC_I2C_SD數據線、NFC_I2C_SCL時鐘線、NFC_I2C_REQ中斷、 NFC_REQ_PU使能、HOST_WAKE喚醒,NFC_CLK_REQ時鐘使能,I2C物理通信地址是0x77,時鐘信號由19.2 MHz外接晶振提供、NFC電路原理圖如圖3所示。
NFC驅動分析
設備樹分析
本設計內核采用了Linux 3.4版本,與以往內核版本不同的是,內核3.4版本采用設備樹來對驅動設備進行統一管理,以方便設備的管理。NFC采用I2C總線的連接方式與CPU相連接,驅動只負責數據的發送接收,上層負責數據的解析工作。
下面是BCM2079x的設備樹節點配置信息,包括:I2C總線的通信地址為0x77,中斷為34號,GPIO34為中斷引腳,GPIO65為使能引腳,GPIO20為喚醒引腳。其中最為關鍵的是compatible=“broadcom,bcm2079x_i2c”鍵值對,在加載驅動程序時,首先會匹配該字段,如果相等則調用probe函數進行相關的初始化工作。
以下為I2C總線配置信息,GPIO31作為I2C總線的時鐘信號線,GPIO32作為I2C總線的數據信號線,I2C總線的時鐘頻率為19.2MHz。
驅動程序中的bcm2079x_matcn_table結構體負責和設備樹進行匹配,在系統初始化階段,就會匹配設備樹里的.compatible屬性是否在驅動中有相同的名字,本驅動中是broadcom,bcm2079x_i2c,若匹配成功就會調用驅動程序的probe函數進行初始化工作。
在驅動程序中,bcm2079x_parse_dt負責解析設備樹的代碼,以下為設備樹解析關鍵代碼,分別獲取中斷、使能、喚醒引腳。
驅動初始化分析
內核加載驅動模塊的時候,系統會調用bcm2079x_dev_init()函數,該函數內部嵌套了i2c_add_driver(),用來完成 bcm2079x_driver結構體的注冊,系統就會自動探測驅動設備,通過比較設備樹中是否有 compatible=“broadcom,bcm2079x_i2c”鍵值對來判斷設備是否存在。如果存在,則會注冊I2C設備相關信息,創建i2c- client,執行probe函數,在probe函數里去解析設備樹里面配置的引腳,初始化中斷、分配內存空間以及初始化互斥鎖、等待隊列等,并向系統將驅動注冊為misc驅動,然后向系統注冊中斷。流程圖如圖4所示。
驅動運行機制
當用戶空間調用open打開/dev/bcm2079x設備節點時,通過ioctl機制調用驅動程序的ioctl,實現設備的使能與喚醒;然后調用Poll函數實現周期性的檢測,以降低設備的功耗,當有設備或卡片接近NFC設備時,NFC就會產生中斷,從而喚醒設備,用戶空間就可以通過調用read函數實現I2C數據的讀取。運行機制如圖5所示。
? 測試結果分析
NFC設備平時處于休眠狀態,設備也會發出探測脈沖,此時處于低功耗狀態,當有卡片或NFC設備接近NFC設備時,就會產生中斷喚醒設備,NFC設備就會連續地發出探測脈沖,此時NFC工作在正常工作模式。
圖6是用頻譜分析儀觀測到的探測脈沖信號,載波頻率為13.559 375 000 MHz,占用帶寬OBW為2.259615 385 kHz,滿足CE和FCC認證中針對NFC頻段的射頻測試要求的13 553~13 567 MHz的調制帶寬限值。
當將Tag1小卡貼近NFC天線時,可以讀出卡內的二進制信息,圖7為卡內信息。
用設備分別測試Tag1、Tag2、Tag3、Tag4,其可識別距離最遠為49 mm、45 mm、29 mm、21 mm,識別成功率在96%以上,測量結果如表1所列。
以上測試表明,NFC模塊可以識別多種類型的卡片,可識別距離最大為49 mm,滿足NFC設計要求。該模塊穩定、可靠、識別率高,可集成到移動支付、票務、門禁、防偽等不同系統中。
評論