沈顯慶,張煒瑋,常佳龍
(黑龍江科技大學 電氣與信息工程學院,哈爾濱 150027)
?
基于BCM20793的NFC模塊設計
沈顯慶,張煒瑋,常佳龍
(黑龍江科技大學 電氣與信息工程學院,哈爾濱 150027)
采用博通BCM20793芯片設計了NFC模塊,進行硬件設計,并進行設備驅動分析。多方面對該模塊進行驗證,結果表明該模塊穩(wěn)定、可靠、識別率高,可集成到支付、票務、門禁、防偽等系統(tǒng)中。
NFC;BCM20793;驅動
NFC(Near Field Communication,近場通信)是由Philips和Sony聯(lián)合推出的一種全新的近距離無線通信技術。NFC是由無線射頻識別(RFID)及移動終端技術綜合發(fā)展起來的,在單一芯片上結合感應式讀卡器、感應式卡片和點對點的功能,能在短距離內與兼容設備進行識別和數(shù)據(jù)交換。NFC工作頻率為13.56 MHz,使用電磁感應耦合進行數(shù)據(jù)傳輸,具有雙向連接和識別特點,兼容不同標準的識別技術,通信距離小于4 cm,支持多種通信速率[1]。由于受限于傳輸速率以及通信距離,NFC不適合大數(shù)據(jù)的傳輸,而且通信雙方必須有某種程度的相互信任。
NFC技術的出現(xiàn)改變了人們使用某些電子設備的方式,甚至改變了信用卡、現(xiàn)金和鑰匙的使用方式,它可以應用在手機等便攜型設備上,實現(xiàn)安全的移動支付和交易、簡便的端到端通信、在移動中輕松接入等功能[2]。隨著智能手機的快速興起,NFC與智能手機的結合將很大程度上促進NFC的發(fā)展,蘋果公司推出的iPhone6也具備NFC功能,相信在不久的將來NFC必定被廣泛應用。
本文采用博通BCM20793 NFC芯片并結合S3C6410主控制器,設計了具有主動模式和被動模式的NFC閱讀器,主要針對硬件和驅動進行了設計。
NFC有三種工作狀態(tài):Reader/Writer與NFC Tag/NFC Reader 相關;Peer-to-Peer支持兩個NFC設備交互;Card Emulation能把攜帶NFC功能的設備模擬成Smart Card[3]。這三種工作狀態(tài)又可歸結為被動模式和主動模式,在Reader/Writer和Card Emulation狀態(tài)下處于被動模式,在Peer-to-Peer狀態(tài)下處于主動模式[4]。
在被動模式下,主設備負責啟動通信,同時通過RF線圈產(chǎn)生電磁感應,為從設備提供電能。在這種模式下傳輸速率可以選擇106 kbps、212 kbps或424 kbps,使用負載調制(load modulation)方式,將數(shù)據(jù)發(fā)送給從設備,從設備可以不含電源組件,采用相同的速率以負載調制方式將數(shù)據(jù)返回給主設備,整個通信過程如圖1所示。
圖1 被動模式下通信流程
此通信機制與基于ISO14443A、MIFARE和FeliCa的非接觸式智能卡兼容,其主要區(qū)別在于RF層信號調制解調的方法、傳輸速率及編碼方式[5]。因此,NFC發(fā)起設備在被動模式下,可以用相同的連接和初始化過程檢測非接觸式智能卡或NFC目標設備,并與之建立聯(lián)系。
主動模式下,設備之間進行通信時,發(fā)起設備和目標設備都必須產(chǎn)生自己的射頻場來進行通信。此種模式下NFC采用雙向識別和鏈接,通信各方不存在固定的主從關系,通信可以由任意一個NFC設備發(fā)起。這是對等網(wǎng)絡通信的標準模式,可以獲得非??焖俚捻憫F渫ㄐ帕鞒倘鐖D2所示。
圖2 主動模式下通信流程
此外,快捷輕型的NFC協(xié)議還可以引導兩臺設備之間的藍牙配對過程。與其他無線通信技術相比,NFC是一種近距離私密通信方式,提供各種設備間輕松、安全、快速而自動的通信。對RFID來說,其具有距離近、帶寬高、功耗低等特點;比紅外更快、更穩(wěn)定而且簡單;與藍牙相比,NFC通信距離近,適合交換重要數(shù)據(jù)[6]。
NFC模塊主要由NFC(控制器,可與Device Host或Secure Element安全單元交互)、Antenna(天線)和Contactless Front-End(非接觸前段,負責射頻信號的調制解調工作)三部分組成。本設計采用BCM20793芯片,該芯片支持212或424 kbps的數(shù)據(jù)傳輸速率,是專為低功耗、低價格的設備設計的。該模塊提供PCI、I2C總線、UART串行接口,安全單元可以連接SD卡、SIM卡、SAM卡或是其他芯片,兼容多種通信標準。該芯片還支持低功耗模式、正常工作模式、輪詢模式等多種工作模式。
主控制器采用S3C6410芯片,該芯片高性能、低功耗、高性價比,可以運行Android系統(tǒng)。BCM20793與S3C6410采用I2C總線的連接方式[7]。TX1和TX2引腳接RC匹配電路,RC匹配電路的P_JS_IT_18和天線相連接。NFC芯片由1.8 V電壓供電,其與主控制器有6根引腳相連,分別是NFC_I2C_SD數(shù)據(jù)線、NFC_I2C_SCL時鐘線、NFC_I2C_REQ中斷、NFC_REQ_PU使能、HOST_WAKE喚醒,NFC_CLK_REQ時鐘使能,I2C物理通信地址是0x77,時鐘信號由19.2 MHz外接晶振提供、NFC電路原理圖如圖3所示。
圖3 NFC電路原理圖
3.1 設備樹分析
本設計內核采用了Linux 3.4版本,與以往內核版本不同的是,內核3.4版本采用設備樹來對驅動設備進行統(tǒng)一管理,以方便設備的管理。NFC采用I2C總線的連接方式與CPU相連接,驅動只負責數(shù)據(jù)的發(fā)送接收,上層負責數(shù)據(jù)的解析工作。
下面是BCM2079x的設備樹節(jié)點配置信息,包括:I2C總線的通信地址為0x77,中斷為34號,GPIO34為中斷引腳,GPIO65為使能引腳,GPIO20為喚醒引腳。其中最為關鍵的是compatible = "broadcom,bcm2079x_i2c"鍵值對,在加載驅動程序時,首先會匹配該字段,如果相等則調用probe函數(shù)進行相關的初始化工作。
i2c@f9928000 {
bcm2079x@77 {
status = "okay";
reg = <0x77>;
interrupts = <34 0x2>;
compatible = "broadcom,bcm2079x_i2c";
bcm2079x,irq_gpio = <&msmgpio 34 0>;
bcm2079x,en_gpio = <&msmgpio 65 0>;
bcm2079x,wake_gpio = <&msmgpio 20 0>;
};
};
以下為I2C總線配置信息,GPIO31作為I2C總線的時鐘信號線,GPIO32作為I2C總線的數(shù)據(jù)信號線,I2C總線的時鐘頻率為19.2MHz。
i2c_6: i2c@f9928000 {
compatible = "qcom,i2c-qup";
qcom,i2c-src-freq = <19200000>;
qcom,scl-gpio = <&msmgpio 31 0>;
qcom,sda-gpio = <&msmgpio 32 0>;
};
驅動程序中的bcm2079x_match_table結構體負責和設備樹進行匹配,在系統(tǒng)初始化階段,就會匹配設備樹里的.compatible屬性是否在驅動中有相同的名字,本驅動中是broadcom,bcm2079x_i2c,若匹配成功就會調用驅動程序的probe函數(shù)進行初始化工作。
static struct of_device_id bcm2079x_match_table[] = {
{ .compatible = "broadcom,bcm2079x_i2c",},
{ },
};
i2c_driver bcm2079x_driver結構體定義了驅動程序中一些重要的函數(shù)以及匹配信息。
static struct i2c_driver bcm2079x_driver = {
.id_table = bcm2079x_id,
.probe = bcm2079x_probe,
.remove = bcm2079x_remove,
.driver = {
.owner = THIS_MODULE,
.name = "bcm2079x-i2c",
.of_match_table = bcm2079x_match_table,
},
};
在驅動程序中,bcm2079x_parse_dt負責解析設備樹的代碼,以下為設備樹解析關鍵代碼,分別獲取中斷、使能、喚醒引腳。
static int bcm2079x_parse_dt(struct device *dev, struct bcm2079x_platform_data *pdata){
……
pdata->irq_gpio = of_get_named_gpio_flags(np,"bcm2079x,irq_gpio", 0, &irq_gpio_flags);
pdata->en_gpio = of_get_named_gpio_flags(np,"bcm2079x,en_gpio", 0, &en_gpio_flags);
pdata->wake_gpio = of_get_named_gpio_flags(np,"bcm2079x,wake_gpio", 0, &wake_gpio_flags);
……
}
3.2 驅動初始化分析
內核加載驅動模塊的時候,系統(tǒng)會調用bcm2079x_dev_init()函數(shù),該函數(shù)內部嵌套了i2c_add_driver(),用來完成bcm2079x_driver結構體的注冊,系統(tǒng)就會自動探測驅動設備,通過比較設備樹中是否有compatible = "broadcom,bcm2079x_i2c"鍵值對來判斷設備是否存在。如果存在,則會注冊I2C設備相關信息,創(chuàng)建i2c-client,執(zhí)行probe函數(shù),在probe函數(shù)里去解析設備樹里面配置的引腳,初始化中斷、分配內存空間以及初始化互斥鎖、等待隊列等,并向系統(tǒng)將驅動注冊為misc驅動,然后向系統(tǒng)注冊中斷。流程圖如圖4所示。
圖4 驅動初始化
3.3 驅動運行機制
當用戶空間調用open打開/dev/bcm2079x設備節(jié)點時,通過ioctl機制調用驅動程序的ioctl,實現(xiàn)設備的使能與喚醒;然后調用Poll函數(shù)實現(xiàn)周期性的檢測,以降低設備的功耗,當有設備或卡片接近NFC設備時,NFC就會產(chǎn)生中斷,從而喚醒設備,用戶空間就可以通過調用read函數(shù)實現(xiàn)I2C數(shù)據(jù)的讀取。運行機制如圖5所示。
圖5 驅動運行機制
NFC設備平時處于休眠狀態(tài),設備也會發(fā)出探測脈沖,此時處于低功耗狀態(tài),當有卡片或NFC設備接近NFC設備時,就會產(chǎn)生中斷喚醒設備,NFC設備就會連續(xù)地發(fā)出探測脈沖,此時NFC工作在正常工作模式。
圖6是用頻譜分析儀觀測到的探測脈沖信號,載波頻率為13.559 375 000 MHz,占用帶寬OBW為2.259 615 385 kHz,滿足CE和FCC認證中針對NFC頻段的射頻測試要求的13 553~13 567 MHz的調制帶寬限值。
當將Tag1小卡貼近NFC天線時,可以讀出卡內的二進制信息,圖7為卡內信息。
圖7 Tag卡內二進制信息
用設備分別測試Tag1、Tag2、Tag3、Tag4,其可識別距離最遠為49 mm、45 mm、29 mm、21 mm,識別成功率在96%以上,測量結果如表1所列。
表1 Tag的最遠識別距離
[1] 張沛.NFC閱讀器設計與安全性研究[D].杭州:杭州電子科技大學,2012.
[2] 晏鵬.NFC接收機的研究與設計[D].上海:復旦大學,2009.
[3] 許江成.具有NFC功能的移動通信終端電路設計[D].成都:電子科技大學,2013.
[4] 劉浩.基于NFC技術的近場通信應用探索[J].中國無線電,2010(12):34-35.
[5] 韋媛娜.基于NFC技術的天線設計方法研究[D].南京:南京郵電大學,2012.
[6] 郎為民.射頻識別(RFID)技術原理與應用[M].北京:機械工業(yè)出版社,2006.
[7] Samsung Electronics.S3C6410X_UM_Rev[EB/OL].(2010-11).[2014-12].http://www.samsung.com/global/business/semiconductor/support/brohures/downloads/systemlsi/s3c6410_datasheet_200804.pdf.
沈顯慶(副教授)、常佳龍(碩士研究生),研究方向為檢測與智能控制;張煒瑋(碩士研究生),研究方向為嵌入式系統(tǒng)應用。
Design of NFC Module Based on BCM20793
Shen Xianqing,Zhang Weiwei,Chang Jialong
(College of Electric and Information Engineering,Heilongjiang Institute of Science and Technology,Harbin 150027,China)
This paper uses BCM20793 chip to design NFC module,the hardware cirucuit is designed,and the device driver is analyzed.Through the multi aspects of verification for the module,the results show that the module is stable,reliable and has high recognition rate.The module can be integrated into many systems such as the payment,ticketing,access control and security system.
NFC;BCM20793;driver
TP368.1
A
迪娜
2014-12-21)