基于FPGA的射頻卡實(shí)時(shí)消費(fèi)記錄系統(tǒng)設(shè)計(jì)
摘要:基于使用戶刷卡消費(fèi)的數(shù)據(jù)可進(jìn)行采集存儲(chǔ)的目的,采用了在FPGA平臺(tái)上設(shè)計(jì)一種射頻卡實(shí)時(shí)消費(fèi)記錄系統(tǒng)的方法。該系統(tǒng)采用了FATFS文件系統(tǒng),可將用戶數(shù)據(jù)及時(shí)保存到SD卡之中。通過(guò)對(duì)軟硬件模塊和上位機(jī)的設(shè)計(jì),采用FPGA為開(kāi)發(fā)平臺(tái),對(duì)用戶刷卡消費(fèi)的記錄寫(xiě)入到SD卡中。利用SD卡的移動(dòng)性,可方便地實(shí)現(xiàn)與計(jì)算機(jī)的數(shù)據(jù)交換,達(dá)到數(shù)據(jù)分析的目的。此法便于客戶對(duì)消費(fèi)記錄的核對(duì),具有實(shí)際商業(yè)價(jià)值。
本文引用地址:http://butianyuan.cn/article/235931.htm關(guān)鍵詞:FPGA;NIOS II;FM1702SL;SD;文件系統(tǒng)
文中主要討論射頻卡實(shí)時(shí)消費(fèi)記錄系統(tǒng)的硬件和軟件設(shè)計(jì)。硬件設(shè)計(jì)主要包括FPGA模塊、蜂鳴器、FM1702SL模塊、SD卡模塊、液晶顯示等模塊。軟件設(shè)計(jì)部分主要介紹射頻讀寫(xiě)模塊的軟件設(shè)計(jì)、SD卡的軟件設(shè)計(jì)、FATFS文件系統(tǒng)移植、液晶顯示和上位機(jī)對(duì)IC卡充值和加密操作。
1 硬件模塊設(shè)計(jì)
射頻卡實(shí)時(shí)消費(fèi)記錄系統(tǒng)組成如圖1所示,主要分為以下幾部分:FPGA、電源管理、射頻卡通信、SD卡、液晶顯示、蜂鳴器等。
1)FPGA的選用——EP2C8Q208C8N
EP2C8Q208C8N是ALTERA公司推出的Cyclone II芯片,該芯片有8 256個(gè)邏輯單元,208個(gè)引腳、用戶可用的I/O引腳為138個(gè)、18個(gè)嵌入式乘法器和2個(gè)鎖相環(huán)。與其他90-nm FPGAs同類產(chǎn)品相比在性能上提高了60%并且減少了一半的能量消耗?;贔PGA平臺(tái)設(shè)計(jì)的射頻消費(fèi)記錄系統(tǒng)具有設(shè)計(jì)靈活、可裁剪、可擴(kuò)充、可升級(jí)及軟、硬件在系統(tǒng)可編程的優(yōu)勢(shì)。
2)電源部分
本系統(tǒng)通過(guò)一個(gè)開(kāi)關(guān)電源提供5 V的電源。系統(tǒng)中FPGA的工作電壓為3.3 V與1.2 V,配置芯片EPCS4S18工作電壓為3.3 V,射頻卡讀寫(xiě)模塊、液晶顯示模塊還有蜂鳴器需要5 V供電,SD卡工作在3.3 V,通過(guò)AMS1117-1.2與AMS1117-3.3穩(wěn)壓器把5 V的轉(zhuǎn)換成1.2V和3.3V。
3)液晶顯示
液晶選用帶字庫(kù)的LCD12864。液晶顯示器工作電壓為5 V,通過(guò)開(kāi)關(guān)電源來(lái)供電。液晶顯示系統(tǒng)可以顯示界面,如“一卡通研發(fā)”、“卡號(hào)”、“消費(fèi)”、“余額”等信息。
4)射頻卡通信
考慮到開(kāi)發(fā)性和經(jīng)濟(jì)性等因素,這里選用了復(fù)旦微電子股份有限公司設(shè)計(jì)的FM1702SL(該芯片與RC632結(jié)構(gòu)類似),是基于ISO/EC14443標(biāo)準(zhǔn)的非接觸卡讀卡機(jī)專用芯片,工作頻率為13.56 MHz,并且支持多種加密算法。射頻卡我們選用的是Phihps公司的MIFARE標(biāo)準(zhǔn)IC卡,該類型卡的作用距離最大為10 cm,屬于緊耦合卡。
ISO/IEC組織根據(jù)接口設(shè)備與卡作用距離的不同定義了3個(gè)國(guó)際標(biāo)準(zhǔn),如表1所示。
ISO/IEC14443標(biāo)準(zhǔn)又分為ISO/IEC14443A(代表產(chǎn)品是Philips公司的MIFARE射頻卡)和ISO/IEC14443B(ST、MoToRoLA、SAMSung、OTI和NEC公司生產(chǎn)的產(chǎn)品)標(biāo)準(zhǔn)。
5)SD卡模塊
SD卡是一種基于半導(dǎo)體快閃記憶器的新一代記憶設(shè)備,由日本松下、東芝及美國(guó)SanDisk公司共同研發(fā),它具有微型、低功耗、防震、非易失性和保存數(shù)據(jù)無(wú)需能量消耗等特點(diǎn),并且兼容MMC閃存卡,廣泛應(yīng)用于手機(jī)、數(shù)碼相機(jī)、智能機(jī)器人、GPS、電子測(cè)試設(shè)備和大容量存儲(chǔ)設(shè)備。
SD卡支持SPI和SD兩種通信接口模式,由于ALTERA公司提供了SPI接口IP核,因此在我們?cè)O(shè)計(jì)的系統(tǒng)中采用的是SPI模式。相對(duì)SD模式,SPI模式應(yīng)用的更廣泛一些。
2 軟件設(shè)計(jì)
2.1 射頻通信模塊的軟件設(shè)計(jì)
系統(tǒng)采用的是FM1702SL非接觸卡讀卡機(jī)專用芯片和Philips公司的MIFARE標(biāo)準(zhǔn)IC卡共同組成了射頻卡讀寫(xiě)模塊。了解S50非接觸式IC卡和FM1702SL的內(nèi)部結(jié)構(gòu)與讀寫(xiě)操作過(guò)程是編寫(xiě)程序的關(guān)鍵,因此對(duì)其做簡(jiǎn)單介紹。
MF1 IC S50由1KB的EEPROM、RF接口和數(shù)字式控制單元組成,能量和數(shù)據(jù)都通過(guò)天線傳送,天線由幾匝線圈組成并直接連接到MF1 IC S50。其與PCD之間的工作原理為:讀寫(xiě)器向M1卡發(fā)一組固定頻率的電磁波,卡片內(nèi)有一個(gè)LC串聯(lián)諧振電路,其頻率與讀寫(xiě)器發(fā)射的頻率相同,在電磁波的激勵(lì)下,LC諧振電路產(chǎn)生共振,從而使電容內(nèi)有了電荷,在這個(gè)電容的另一端,接有一個(gè)單向?qū)ǖ碾娮颖?,將電容?nèi)的電荷送到另一個(gè)電容內(nèi)儲(chǔ)存,當(dāng)所積累的電荷達(dá)到2 V時(shí),此電容可做為電源為其它電路提供工作電壓,將卡內(nèi)數(shù)據(jù)發(fā)射出去或接取讀寫(xiě)器的數(shù)據(jù)。
卡的內(nèi)部有16個(gè)扇區(qū),每個(gè)扇區(qū)分為4塊,分別是塊0、塊1、塊2、塊3。塊0~塊2為數(shù)據(jù)塊,用于存儲(chǔ)數(shù)據(jù)。塊3為控制塊,包括了密碼A、存取控制、密碼B。每個(gè)塊為16個(gè)字節(jié),以塊為存儲(chǔ)單元。第0扇區(qū)的塊0,用于存放廠商代碼,已經(jīng)固化不可更改。
每個(gè)扇區(qū)的密碼和存儲(chǔ)控制都是獨(dú)立的,根據(jù)實(shí)際需要設(shè)定各自的密碼及存儲(chǔ)控制。在控制塊中密碼A和密碼B各占6個(gè)字節(jié),存儲(chǔ)控制占4個(gè)字節(jié),在存儲(chǔ)控制中每個(gè)塊都有相應(yīng)的3個(gè)控制位,通過(guò)設(shè)定不同的數(shù)就具有不同的意義。例如,存儲(chǔ)控制的4個(gè)字節(jié)為0xFF078069,表示塊0~塊3中分別對(duì)應(yīng)的3個(gè)控制位都為0,通過(guò)驗(yàn)證密碼A或者密碼B的正確性后就可以對(duì)數(shù)據(jù)塊0、1、2進(jìn)行讀、寫(xiě)、加、減、轉(zhuǎn)存和恢復(fù)操作,對(duì)于控制塊3來(lái)說(shuō),密碼A不能讀,存儲(chǔ)控制不能寫(xiě),通過(guò)驗(yàn)證密碼A或密碼B的正確性后可以對(duì)密碼A進(jìn)行寫(xiě)、密碼B進(jìn)行讀或?qū)憽⒋嫒】刂谱x操作。
FM1702SL包含512字節(jié)的EEPROM和64字節(jié)的FIFO,F(xiàn)M1702SL的內(nèi)部寄存器組按功能不同分成8組,每組為一頁(yè),包含8個(gè)寄存器,內(nèi)部還帶有加密單元,在FM1702SL中,6字節(jié)的密鑰必須以規(guī)定的格式存放在EEPROM內(nèi),需要12字節(jié)EEPROM。FM1702SL與S50 IC卡之間的通信可以簡(jiǎn)單的分為下面幾個(gè)過(guò)程:
1)復(fù)位應(yīng)答
射頻讀寫(xiě)模塊上電復(fù)位后,然后進(jìn)入復(fù)位應(yīng)答模式。按照定義好的協(xié)議和波特率,讀卡器會(huì)對(duì)其有效工作范圍內(nèi)的卡進(jìn)行檢驗(yàn),驗(yàn)證卡片的類型。
2)防沖突機(jī)制
所謂防沖突就是當(dāng)有多張卡在其工作范圍內(nèi)時(shí),射頻讀寫(xiě)模塊會(huì)根據(jù)控制命令選中其中的一張卡片進(jìn)行后續(xù)操作。
那些沒(méi)有選中的卡片會(huì)處于空閑狀態(tài)等待下一次選卡操作。
3)選卡
射頻讀寫(xiě)模塊對(duì)放入FM1702SL操作范圍之內(nèi)的某張卡片進(jìn)行選中,獲得其卡序列號(hào)和卡片容量大小。
4)三次相互認(rèn)證
當(dāng)一張卡按照ISO14443A協(xié)議被選中后,射頻讀寫(xiě)模塊根據(jù)命令訪問(wèn)扇區(qū)號(hào)中的控制塊,并對(duì)該控制塊的密碼進(jìn)行檢驗(yàn),檢驗(yàn)方式使用三次認(rèn)證令牌機(jī)制,該認(rèn)證過(guò)程在執(zhí)行Authent1和Authent2指令時(shí)自動(dòng)完成,在認(rèn)證指令執(zhí)行之前,用戶必須保證在密鑰緩沖器中已經(jīng)準(zhǔn)備好了密鑰,當(dāng)密碼得到驗(yàn)證,我們就可以通過(guò)加密進(jìn)行相互通信了。
5)對(duì)卡的操作
通過(guò)認(rèn)證后,就可以對(duì)特定扇區(qū)中的塊進(jìn)行讀、寫(xiě)、減值、加值、存儲(chǔ)、傳輸和中止操作。
在本項(xiàng)目中,F(xiàn)M1702SL非接觸讀卡機(jī)專用芯片與S50射頻卡通信的流程圖如圖2所示。
2.2 液晶顯示模塊
通過(guò)閱讀液晶數(shù)據(jù)手冊(cè)了解清楚基本原理后,根據(jù)我們項(xiàng)目的需求寫(xiě)了12 864的驅(qū)動(dòng)函數(shù)。驅(qū)動(dòng)函數(shù)包括延時(shí)函數(shù)、液晶初始化函數(shù)、寫(xiě)數(shù)據(jù)函數(shù)、寫(xiě)命令函數(shù)、寫(xiě)數(shù)據(jù)函數(shù)、液晶顯示函數(shù)、數(shù)值的轉(zhuǎn)換格式函數(shù)、顯示數(shù)值函數(shù)和射頻卡序列號(hào)顯示函數(shù)。
在液晶初始化函數(shù)中對(duì)通信方式、功能、顯示還有輸入方式進(jìn)行了設(shè)置,同時(shí)也對(duì)液晶進(jìn)行了清屏操作。在我們?cè)O(shè)計(jì)的模塊中選擇的是并口方式(PSB=1),功能設(shè)置為0x30(8字節(jié)界面、基本指令集),顯示設(shè)置為0x0C(整體顯示、光標(biāo)不顯示、光標(biāo)不反向),輸入方式設(shè)置0x06(光標(biāo)右移、地址位加1、整體右移)。根據(jù)讀寫(xiě)時(shí)序圖,我們對(duì)寫(xiě)數(shù)據(jù)函數(shù)和寫(xiě)命令函數(shù)進(jìn)行了編寫(xiě)。同時(shí),根據(jù)項(xiàng)目要求對(duì)液晶界面顯示內(nèi)容的格式也進(jìn)行了編寫(xiě)。液晶部分軟件流程如圖3所示。
2.3 SD卡的軟件設(shè)計(jì)
在SOPC builder中對(duì)SPI核進(jìn)行相應(yīng)的配置后,通過(guò)寫(xiě)一些驅(qū)動(dòng)函數(shù)就可以對(duì)外圍的SD卡進(jìn)行讀寫(xiě)操作了,這些讀寫(xiě)操作只是簡(jiǎn)單的對(duì)某個(gè)數(shù)據(jù)扇區(qū)進(jìn)行讀寫(xiě)操作,目的是測(cè)試底層通信是否正確,操作流程如圖4所示。
SD卡的底層通信測(cè)試正確后,我們只是把SD卡當(dāng)做一塊大容量的Flash在用,為了讓時(shí)序?qū)懭隨D卡中的信息在PC中可以直接顯示,我們就要移植文件系統(tǒng)。目前流行的FAT文件系統(tǒng)模塊主要有:周立功公司的ZLG/FS、美國(guó)Micrium公司的UC/FS、SourceForge.net網(wǎng)站上發(fā)布的開(kāi)源項(xiàng)目efsl(Embeded File System Library)以及日本電子愛(ài)好者設(shè)計(jì)并維護(hù)的FATFS文件系統(tǒng)模塊。由于FATFS具有開(kāi)源、免費(fèi)、高效等特點(diǎn),并且相對(duì)其他文件系統(tǒng)模塊成熟一些。
在我們項(xiàng)目中用到了FatFS Module,F(xiàn)atFS Module是一個(gè)小型嵌入式系統(tǒng)下的FAT文件系統(tǒng)模塊,其代碼完全兼容ANSI C,而且與硬件平臺(tái)無(wú)關(guān),可以簡(jiǎn)單方便的移植到8051、PIC、AVR、SH、Z80、H8、ARM等MCU上,而不要做任何修改。FatFs有FatFs、Tiny-FatFs和Petit-Fat Fs 3個(gè)版本,F(xiàn)atFs適合比較大的RAM的設(shè)配;Ting-FatFs適合小RAM的系統(tǒng),比如單片機(jī),代價(jià)是更慢的讀寫(xiě)速度和更少的API函數(shù);Petit-FatFs適合8位處理器,占用極少的RAM,只對(duì)單文件進(jìn)行讀寫(xiě)操作。SD卡文件系統(tǒng)結(jié)構(gòu)如表2所示。
各個(gè)層的作用:硬件抽象層完成NIOS2處理器對(duì)SD卡控制器相應(yīng)寄存器的設(shè)置,把對(duì)SD卡的操作抽象為對(duì)相應(yīng)的寄存器的操作;CRC校驗(yàn)層實(shí)現(xiàn)了CRC校驗(yàn),對(duì)命令和響應(yīng)使用CRC7校驗(yàn),對(duì)數(shù)據(jù)采用CRC16校驗(yàn);命令層定義了各種命令和響應(yīng),以向SD卡發(fā)送命令的函數(shù)為基礎(chǔ),實(shí)現(xiàn)了讀寫(xiě)SD卡內(nèi)部寄存器等功能;操作函數(shù)接口層向FatFS文件系統(tǒng)提供操作SD卡的函數(shù),包括:SD卡初始化、讀單塊數(shù)據(jù)、讀多塊數(shù)據(jù)、寫(xiě)單塊數(shù)據(jù)、寫(xiě)多塊數(shù)據(jù)、獲取SD卡信息等函數(shù);Disk I/O層起到一個(gè)橋梁作用,提供的函數(shù)都是在SD卡的函數(shù)基礎(chǔ)上編寫(xiě)的;FatFS Mod ule層為應(yīng)用程序提供函數(shù)。
FatFS Moudle移植只需對(duì)diskio.c、ff.h和integer.h進(jìn)行相應(yīng)的修改。diskio.c需要對(duì)6個(gè)接口函數(shù)進(jìn)行編程,Disk_initialize、Disk_statue、Disk_read、Disk_write、Disk_ioct1和Get_fattime;ff.h需要根據(jù)處理器的類型進(jìn)行設(shè)置;integer.h需要對(duì)數(shù)據(jù)類型進(jìn)行修改以匹配處理器。在SD卡中創(chuàng)建文件并向文件寫(xiě)入數(shù)據(jù)的流程圖如圖5所示。
2.4 射頻卡實(shí)時(shí)消費(fèi)記錄系統(tǒng)軟件設(shè)計(jì)
通過(guò)對(duì)上面各個(gè)模塊的設(shè)計(jì),結(jié)合各個(gè)模塊的操作,我們就可以把各個(gè)模塊整合成一個(gè)完整的系統(tǒng),整個(gè)系統(tǒng)流程圖如圖6所示。
3 上位機(jī)設(shè)計(jì)
上位機(jī)部分主要是對(duì)射頻卡進(jìn)行操作,圖7為上位機(jī)的界面。
在我們項(xiàng)目中為了方便與上位機(jī)之間通信測(cè)試,在寫(xiě)FM1702SL的驅(qū)動(dòng)函數(shù)時(shí),設(shè)置默認(rèn)密碼為6個(gè)F,操作扇區(qū)為第1扇區(qū)(扇區(qū)號(hào)從0開(kāi)始算起),對(duì)塊1進(jìn)行寫(xiě)操作。例如,對(duì)卡進(jìn)行充值操作,前2個(gè)字節(jié)是任意的,第3個(gè)字節(jié)和第4個(gè)字節(jié)是金額,Ox****2710這個(gè)2710表示的十進(jìn)制為10 000,對(duì)應(yīng)的金額為100.00。
4 結(jié)束語(yǔ)
本系統(tǒng)采用FPGA為開(kāi)發(fā)平臺(tái),對(duì)用戶刷卡消費(fèi)的記錄寫(xiě)入到SD卡中,便于客戶對(duì)消費(fèi)記錄的核對(duì),具有實(shí)際商業(yè)價(jià)值。隨著電子系統(tǒng)向SOC方向發(fā)展,采用FPGA的系統(tǒng)設(shè)計(jì)將得到更加廣闊的發(fā)展。
fpga相關(guān)文章:fpga是什么
蜂鳴器相關(guān)文章:蜂鳴器原理 射頻卡相關(guān)文章:射頻卡原理 鎖相環(huán)相關(guān)文章:鎖相環(huán)原理 土壤濕度傳感器相關(guān)文章:土壤濕度傳感器原理
評(píng)論