沈顯慶,張煒瑋,常佳龍
(黑龍江科技大學(xué) 電氣與信息工程學(xué)院,哈爾濱 150027)
?
基于BCM20793的NFC模塊設(shè)計
沈顯慶,張煒瑋,常佳龍
(黑龍江科技大學(xué) 電氣與信息工程學(xué)院,哈爾濱 150027)
采用博通BCM20793芯片設(shè)計了NFC模塊,進行硬件設(shè)計,并進行設(shè)備驅(qū)動分析。多方面對該模塊進行驗證,結(jié)果表明該模塊穩(wěn)定、可靠、識別率高,可集成到支付、票務(wù)、門禁、防偽等系統(tǒng)中。
NFC;BCM20793;驅(qū)動
NFC(Near Field Communication,近場通信)是由Philips和Sony聯(lián)合推出的一種全新的近距離無線通信技術(shù)。NFC是由無線射頻識別(RFID)及移動終端技術(shù)綜合發(fā)展起來的,在單一芯片上結(jié)合感應(yīng)式讀卡器、感應(yīng)式卡片和點對點的功能,能在短距離內(nèi)與兼容設(shè)備進行識別和數(shù)據(jù)交換。NFC工作頻率為13.56 MHz,使用電磁感應(yīng)耦合進行數(shù)據(jù)傳輸,具有雙向連接和識別特點,兼容不同標準的識別技術(shù),通信距離小于4 cm,支持多種通信速率[1]。由于受限于傳輸速率以及通信距離,NFC不適合大數(shù)據(jù)的傳輸,而且通信雙方必須有某種程度的相互信任。
NFC技術(shù)的出現(xiàn)改變了人們使用某些電子設(shè)備的方式,甚至改變了信用卡、現(xiàn)金和鑰匙的使用方式,它可以應(yīng)用在手機等便攜型設(shè)備上,實現(xiàn)安全的移動支付和交易、簡便的端到端通信、在移動中輕松接入等功能[2]。隨著智能手機的快速興起,NFC與智能手機的結(jié)合將很大程度上促進NFC的發(fā)展,蘋果公司推出的iPhone6也具備NFC功能,相信在不久的將來NFC必定被廣泛應(yīng)用。
本文采用博通BCM20793 NFC芯片并結(jié)合S3C6410主控制器,設(shè)計了具有主動模式和被動模式的NFC閱讀器,主要針對硬件和驅(qū)動進行了設(shè)計。
NFC有三種工作狀態(tài):Reader/Writer與NFC Tag/NFC Reader 相關(guān);Peer-to-Peer支持兩個NFC設(shè)備交互;Card Emulation能把攜帶NFC功能的設(shè)備模擬成Smart Card[3]。這三種工作狀態(tài)又可歸結(jié)為被動模式和主動模式,在Reader/Writer和Card Emulation狀態(tài)下處于被動模式,在Peer-to-Peer狀態(tài)下處于主動模式[4]。
在被動模式下,主設(shè)備負責(zé)啟動通信,同時通過RF線圈產(chǎn)生電磁感應(yīng),為從設(shè)備提供電能。在這種模式下傳輸速率可以選擇106 kbps、212 kbps或424 kbps,使用負載調(diào)制(load modulation)方式,將數(shù)據(jù)發(fā)送給從設(shè)備,從設(shè)備可以不含電源組件,采用相同的速率以負載調(diào)制方式將數(shù)據(jù)返回給主設(shè)備,整個通信過程如圖1所示。
圖1 被動模式下通信流程
此通信機制與基于ISO14443A、MIFARE和FeliCa的非接觸式智能卡兼容,其主要區(qū)別在于RF層信號調(diào)制解調(diào)的方法、傳輸速率及編碼方式[5]。因此,NFC發(fā)起設(shè)備在被動模式下,可以用相同的連接和初始化過程檢測非接觸式智能卡或NFC目標設(shè)備,并與之建立聯(lián)系。
主動模式下,設(shè)備之間進行通信時,發(fā)起設(shè)備和目標設(shè)備都必須產(chǎn)生自己的射頻場來進行通信。此種模式下NFC采用雙向識別和鏈接,通信各方不存在固定的主從關(guān)系,通信可以由任意一個NFC設(shè)備發(fā)起。這是對等網(wǎng)絡(luò)通信的標準模式,可以獲得非??焖俚捻憫?yīng)。其通信流程如圖2所示。
圖2 主動模式下通信流程
此外,快捷輕型的NFC協(xié)議還可以引導(dǎo)兩臺設(shè)備之間的藍牙配對過程。與其他無線通信技術(shù)相比,NFC是一種近距離私密通信方式,提供各種設(shè)備間輕松、安全、快速而自動的通信。對RFID來說,其具有距離近、帶寬高、功耗低等特點;比紅外更快、更穩(wěn)定而且簡單;與藍牙相比,NFC通信距離近,適合交換重要數(shù)據(jù)[6]。
NFC模塊主要由NFC(控制器,可與Device Host或Secure Element安全單元交互)、Antenna(天線)和Contactless Front-End(非接觸前段,負責(zé)射頻信號的調(diào)制解調(diào)工作)三部分組成。本設(shè)計采用BCM20793芯片,該芯片支持212或424 kbps的數(shù)據(jù)傳輸速率,是專為低功耗、低價格的設(shè)備設(shè)計的。該模塊提供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 設(shè)備樹分析
本設(shè)計內(nèi)核采用了Linux 3.4版本,與以往內(nèi)核版本不同的是,內(nèi)核3.4版本采用設(shè)備樹來對驅(qū)動設(shè)備進行統(tǒng)一管理,以方便設(shè)備的管理。NFC采用I2C總線的連接方式與CPU相連接,驅(qū)動只負責(zé)數(shù)據(jù)的發(fā)送接收,上層負責(zé)數(shù)據(jù)的解析工作。
下面是BCM2079x的設(shè)備樹節(jié)點配置信息,包括:I2C總線的通信地址為0x77,中斷為34號,GPIO34為中斷引腳,GPIO65為使能引腳,GPIO20為喚醒引腳。其中最為關(guān)鍵的是compatible = "broadcom,bcm2079x_i2c"鍵值對,在加載驅(qū)動程序時,首先會匹配該字段,如果相等則調(diào)用probe函數(shù)進行相關(guān)的初始化工作。
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>;
};
驅(qū)動程序中的bcm2079x_match_table結(jié)構(gòu)體負責(zé)和設(shè)備樹進行匹配,在系統(tǒng)初始化階段,就會匹配設(shè)備樹里的.compatible屬性是否在驅(qū)動中有相同的名字,本驅(qū)動中是broadcom,bcm2079x_i2c,若匹配成功就會調(diào)用驅(qū)動程序的probe函數(shù)進行初始化工作。
static struct of_device_id bcm2079x_match_table[] = {
{ .compatible = "broadcom,bcm2079x_i2c",},
{ },
};
i2c_driver bcm2079x_driver結(jié)構(gòu)體定義了驅(qū)動程序中一些重要的函數(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,
},
};
在驅(qū)動程序中,bcm2079x_parse_dt負責(zé)解析設(shè)備樹的代碼,以下為設(shè)備樹解析關(guān)鍵代碼,分別獲取中斷、使能、喚醒引腳。
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 驅(qū)動初始化分析
內(nèi)核加載驅(qū)動模塊的時候,系統(tǒng)會調(diào)用bcm2079x_dev_init()函數(shù),該函數(shù)內(nèi)部嵌套了i2c_add_driver(),用來完成bcm2079x_driver結(jié)構(gòu)體的注冊,系統(tǒng)就會自動探測驅(qū)動設(shè)備,通過比較設(shè)備樹中是否有compatible = "broadcom,bcm2079x_i2c"鍵值對來判斷設(shè)備是否存在。如果存在,則會注冊I2C設(shè)備相關(guān)信息,創(chuàng)建i2c-client,執(zhí)行probe函數(shù),在probe函數(shù)里去解析設(shè)備樹里面配置的引腳,初始化中斷、分配內(nèi)存空間以及初始化互斥鎖、等待隊列等,并向系統(tǒng)將驅(qū)動注冊為misc驅(qū)動,然后向系統(tǒng)注冊中斷。流程圖如圖4所示。
圖4 驅(qū)動初始化
3.3 驅(qū)動運行機制
當用戶空間調(diào)用open打開/dev/bcm2079x設(shè)備節(jié)點時,通過ioctl機制調(diào)用驅(qū)動程序的ioctl,實現(xiàn)設(shè)備的使能與喚醒;然后調(diào)用Poll函數(shù)實現(xiàn)周期性的檢測,以降低設(shè)備的功耗,當有設(shè)備或卡片接近NFC設(shè)備時,NFC就會產(chǎn)生中斷,從而喚醒設(shè)備,用戶空間就可以通過調(diào)用read函數(shù)實現(xiàn)I2C數(shù)據(jù)的讀取。運行機制如圖5所示。
圖5 驅(qū)動運行機制
NFC設(shè)備平時處于休眠狀態(tài),設(shè)備也會發(fā)出探測脈沖,此時處于低功耗狀態(tài),當有卡片或NFC設(shè)備接近NFC設(shè)備時,就會產(chǎn)生中斷喚醒設(shè)備,NFC設(shè)備就會連續(xù)地發(fā)出探測脈沖,此時NFC工作在正常工作模式。
圖6是用頻譜分析儀觀測到的探測脈沖信號,載波頻率為13.559 375 000 MHz,占用帶寬OBW為2.259 615 385 kHz,滿足CE和FCC認證中針對NFC頻段的射頻測試要求的13 553~13 567 MHz的調(diào)制帶寬限值。
當將Tag1小卡貼近NFC天線時,可以讀出卡內(nèi)的二進制信息,圖7為卡內(nèi)信息。
圖7 Tag卡內(nèi)二進制信息
用設(shè)備分別測試Tag1、Tag2、Tag3、Tag4,其可識別距離最遠為49 mm、45 mm、29 mm、21 mm,識別成功率在96%以上,測量結(jié)果如表1所列。
表1 Tag的最遠識別距離
[1] 張沛.NFC閱讀器設(shè)計與安全性研究[D].杭州:杭州電子科技大學(xué),2012.
[2] 晏鵬.NFC接收機的研究與設(shè)計[D].上海:復(fù)旦大學(xué),2009.
[3] 許江成.具有NFC功能的移動通信終端電路設(shè)計[D].成都:電子科技大學(xué),2013.
[4] 劉浩.基于NFC技術(shù)的近場通信應(yīng)用探索[J].中國無線電,2010(12):34-35.
[5] 韋媛娜.基于NFC技術(shù)的天線設(shè)計方法研究[D].南京:南京郵電大學(xué),2012.
[6] 郎為民.射頻識別(RFID)技術(shù)原理與應(yīng)用[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)應(yī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)