物聯(lián)傳媒 旗下網(wǎng)站
登錄 注冊(cè)

基于ARM的嵌入式RFID讀寫器設(shè)計(jì)

作者:魏登峰 田華
來源:微計(jì)算機(jī)信息
日期:2016-08-05 14:19:00
摘要:RFID 利用了電磁波空間耦合、傳播進(jìn)行通信,以達(dá)到自動(dòng)識(shí)別被標(biāo)識(shí)對(duì)象,獲取對(duì)象信息的目的。同其他一些識(shí)別技術(shù)相比,射頻識(shí)別技術(shù)具有高效快捷、非接觸、無污染、識(shí)別率高等突出優(yōu)點(diǎn)。識(shí)別過程無需人工干預(yù),可在惡劣環(huán)境下工作,能夠應(yīng)用到很多行業(yè)。
關(guān)鍵詞:ARM嵌入式RFID讀寫器

  引言

  RFID 利用了電磁波空間耦合、傳播進(jìn)行通信,以達(dá)到自動(dòng)識(shí)別被標(biāo)識(shí)對(duì)象,獲取對(duì)象信息的目的。同其他一些識(shí)別技術(shù)相比,射頻識(shí)別技術(shù)具有高效快捷、非接觸、無污染、識(shí)別率高等突出優(yōu)點(diǎn)。識(shí)別過程無需人工干預(yù),可在惡劣環(huán)境下工作,能夠應(yīng)用到很多行業(yè)。

  1.RIFD 讀寫器的硬件總體設(shè)計(jì)

基于ARM的嵌入式RFID讀寫器設(shè)計(jì)

圖 1 讀寫器的硬件總體設(shè)計(jì)

  RFID 系統(tǒng)主要由射頻卡、讀寫器以及計(jì)算機(jī)系統(tǒng)組成。系統(tǒng)的工作原理如下:讀寫器通過天線發(fā)送出13.56MHz 的射頻信號(hào),當(dāng)射頻卡進(jìn)入讀寫器工作場(chǎng)時(shí),天線產(chǎn)生感應(yīng)電流,從而射頻卡獲得能量被激活并向讀寫器發(fā)送出自身編碼等信息,讀寫器接收到來自射頻卡的載波信號(hào),對(duì)接收的信號(hào)進(jìn)行解調(diào)和解碼后發(fā)送至 PC 機(jī)進(jìn)行處理,PC 機(jī)根據(jù)邏輯運(yùn)算判斷該射頻卡的合法性,針對(duì)不同的設(shè)定做出相應(yīng)的處理和控制,發(fā)出指令信號(hào),射頻卡的數(shù)據(jù)解調(diào)部分從接收到的射頻脈沖中解調(diào)出數(shù)據(jù)并送到控制邏輯,控制邏輯接受指令完成存儲(chǔ)、發(fā)送數(shù)據(jù)或其他操作。

  2. 硬件選型

  在整個(gè)系統(tǒng)中,RFID 收發(fā)模塊的功能是當(dāng)接收到來自射頻卡的載波信號(hào)時(shí),對(duì)該信號(hào)進(jìn)行解調(diào)和解碼,并且將信息進(jìn)行編碼和調(diào)制后發(fā)送到射頻卡中,要實(shí)現(xiàn)上述功能就需要一款內(nèi)部封裝有發(fā)送調(diào)制器和接收調(diào)制器的射頻芯片,選用了射頻芯片 S6700。S6700 芯片的時(shí)序是通過控制產(chǎn)生的,因此選用了單片機(jī)P89C58,利用它的 I/O 口進(jìn)行控制。因?yàn)橄到y(tǒng)中使用的射頻卡是疏耦合 IC卡,所以它與 S6700 芯片之間的協(xié)議標(biāo)準(zhǔn)采用了 ISO 15693,C 語(yǔ)言進(jìn)行編程。

  3.RFID 收發(fā)模塊硬件電路設(shè)計(jì)

  RFID 收發(fā)模塊的主芯片是 TI 公司的射頻芯片 S6700,該芯片的通信接口主要使用三條線:SCLOCK、DIN 和 DOUT。除了通信線外,還有一條 M_ERR 線,用來表征通信是否正常;應(yīng)用電路如圖2 所示:

基于ARM的嵌入式RFID讀寫器設(shè)計(jì)

圖 2 RFID 收發(fā)模塊硬件電路

  S6700 的 SCLOCK、DIN、DOUT 分別由 P89C58 的 P1.3、P1.5 和 P1.6 進(jìn)行控制,由于單片機(jī)P89C52 應(yīng)用比較廣泛。R2 為調(diào)制深度選擇電阻,當(dāng) R2 為 12 歐姆時(shí),調(diào)制深度為 10%;當(dāng) R2 為 18 歐姆時(shí),調(diào)制深度為 20%。SCLOCK 為雙向時(shí)鐘線,分別由單片機(jī) P89C58 和 S6700芯片在不同的情況下進(jìn)行控制:發(fā)送數(shù)據(jù)時(shí)由 P89C58 控制,接收數(shù)據(jù)時(shí)由 S6700 控制。在收發(fā)數(shù)據(jù)時(shí),每個(gè)數(shù)據(jù)位在 SCLOCK 的上升沿被鎖存,當(dāng) SCLOCK 為高時(shí),數(shù)據(jù)位必須固定且保持不變,只有當(dāng) SCLOCK 為低時(shí),傳送的數(shù)據(jù)才能被改變;DIN 為數(shù)據(jù)輸入線,S6700 芯片通過該線接收來自 P89C58 的命令和數(shù)據(jù);DOUT 為數(shù)據(jù)輸出線,S6700 芯片通過該線將回應(yīng)數(shù)據(jù)發(fā)送給P89C58,同時(shí)該線還可用于監(jiān)測(cè)S6700 芯片內(nèi)部數(shù)據(jù)緩沖區(qū)的情況。M_ERR 線用來表征在同時(shí)讀多張卡時(shí)數(shù)據(jù)的沖突情況。該線由于內(nèi)部下拉,平時(shí)為低電平,一旦發(fā)生多卡沖突,此線會(huì)升為高電平。在每一次通信過程中,遠(yuǎn)端控制器必須通過發(fā)送命令來實(shí)現(xiàn)任務(wù),典型命令格式為:起始位 S1、

  8 位命令字、傳輸數(shù)據(jù)和結(jié)束位ES1。

  4.嵌入式控制模塊硬件電路設(shè)計(jì)

  S3C44B0X 微處理器是低功耗的,采用了應(yīng)用于實(shí)時(shí)環(huán)境的 ARM7TDMI 32 位核,所以選為控制模塊的主芯片,負(fù)責(zé)完成 PC 機(jī)和 RFID 讀寫器之間數(shù)據(jù)的傳送和控制。

  4.1 晶振電路

  晶振電路用于向 CPU 及其他電路提供工作時(shí)鐘。S3C44B0X 芯片通過管腳OM[3:2]確定選擇何種時(shí)鐘源,在本系統(tǒng)中,將兩個(gè)管腳下拉,選擇晶體時(shí)鐘模式,選用該模式時(shí),外部采用 10MHz的晶振,可以利用公式設(shè)計(jì)出各種所需的輸出頻率,也就是說時(shí)鐘頻率可以通過軟件進(jìn)行設(shè)定,公式如下:

  Fpllo=( m×Fin ) / ( p×2s)

  其中設(shè)置 m=0x48,p=0x03,s=0x02,這樣就可以得到 40MHz 的輸出頻率,滿足系統(tǒng)的要求。

  4.2 電源電路

  在該系統(tǒng)中,需要使用 2.5V 和 3.3V 的直流穩(wěn)壓電源,其中 S3C44B0X 的內(nèi)核需 2.5V 電源,S3C44B0X 的 I/O 口和其它部分電路需要 3.3V 電源。為簡(jiǎn)化系統(tǒng)電源電路的設(shè)計(jì),要求整個(gè)系統(tǒng)的輸入電壓為高質(zhì)量的 5V 的直流穩(wěn)壓電源,這樣就需要用 DC-DC 轉(zhuǎn)換器來完成 5V~2.5V 、5V~3.3V 的轉(zhuǎn)換,在該系統(tǒng)電路中選用了 BayLinear 公司的 B1117 電壓轉(zhuǎn)換芯片系列:B1117-2.5和B1117-3.3,器件輸出電流為 1.0A。系統(tǒng)電源電路如圖4 所示。

基于ARM的嵌入式RFID讀寫器設(shè)計(jì)

圖 3 系統(tǒng)電源電路圖

  4.3 SDRAM 接口電路

  在本系統(tǒng)中,采用了 HY57V641620 SDRAM 芯片,存儲(chǔ)容量為 4 組×16M 位(8M 字節(jié)),工作電壓為3.3V,支持自動(dòng)刷新和自刷新,16 位數(shù)據(jù)寬度。該芯片是通過行、列地址來定義存儲(chǔ)器地址空間的,A11-A0 是列地址,A7-A0 是行地址,芯片管腳 BA0、BA1 用于片內(nèi) 4 個(gè)存儲(chǔ)器組的選擇,將它與 ADDR21 和ADDR22 相連,利用地址高端進(jìn)行相應(yīng)的選擇。

  在本系統(tǒng)中,采用該 JTAG 接口對(duì)程序進(jìn)行調(diào)試和下載。標(biāo)準(zhǔn)的 JTAG 接口是 4 線:TMS、TCK、TDI、TDO,分別為測(cè)試模式選擇、測(cè)試時(shí)鐘、測(cè)試數(shù)據(jù)輸入和測(cè)試數(shù)據(jù)輸出。

  5 讀寫器的軟件設(shè)計(jì)

  根據(jù) RFID 讀寫器的需要,移植了UC/OS-Ⅱ。嵌入式系統(tǒng)通信程序循環(huán)發(fā)送命令,檢測(cè)是否有卡待讀,如果接收到從 RFID 模塊傳來的卡號(hào)信息,則將卡號(hào)從信息中提取出來發(fā)送至 PC 機(jī)上的應(yīng)用程序,由應(yīng)用程序?qū)λM(jìn)行辨識(shí)。無論是與 RFID 模塊的通信還是與 PC 機(jī)的通信,都采用了串口通信方式,所以首先應(yīng)對(duì)串口進(jìn)行設(shè)置。

  當(dāng)嵌入式控制程序向 RFID 模塊發(fā)送完讀卡的相關(guān)命令后,就需要等待接收傳回的卡號(hào)數(shù)據(jù)信息,由于系統(tǒng)串口采用的是查詢方式,一旦發(fā)送端存在數(shù)據(jù)遺失,一直未能有數(shù)據(jù)傳送回來,則程序?qū)⑦M(jìn)入死循環(huán),所以在程序中設(shè)計(jì)了自動(dòng)終止功能。在系統(tǒng)設(shè)計(jì)中該部分子內(nèi)容只接收來自 RFID模塊的數(shù)據(jù),故只考慮串口2。

  讀卡程序如下:

  char recv_rfid()

  {

  char lm;

  int m,l;

  if(whichUart==1) // 串口 2,接收從 RFID 模塊傳來的數(shù)據(jù)

  {

  wh: for(;(!(rUTRSTAT1 & 0x1));){

  m=m+1; // 等待的同時(shí)對(duì)變量 m 計(jì)數(shù)

  if(m==500) // 判斷 m 是否已累計(jì)到 500 還未接收到有效數(shù)據(jù)

  {err_flag=1; // 若是,則將標(biāo)志 err_flag 置 1

  goto wh1; // 跳轉(zhuǎn)到標(biāo)記為 wh1 的程序處

  }}

  lm=RdURXH1(); // 若接收到有效數(shù)據(jù),則將串口數(shù)據(jù)賦給變量 lm

  return(lm); // 返回 lm 的值

  }

  wh1: l=0; // 標(biāo)記 wh1 處程序,實(shí)為跳出子程序

  }

  寫卡的過程只需要將從應(yīng)用程序處獲取持卡人的相關(guān)信息然后發(fā)送至RFID 收發(fā)模塊,由 RFID模塊寫入射頻卡中,因?yàn)橐?yàn)證寫入信息是否正確,所以該程序還需要實(shí)現(xiàn)讀取射頻卡中的信息并返回給應(yīng)用程序,由應(yīng)用程序來判斷寫入信息的正誤。持卡人的相關(guān)信息包括姓名、性別、年齡、工作單位、身份證號(hào)、發(fā)卡日期和發(fā)卡時(shí)間。

  6 結(jié)束語(yǔ)

  本文創(chuàng)新點(diǎn):基于 S6700 的嵌入式的RIFD 讀寫器具有成本低廉,穩(wěn)定性好等特點(diǎn),完全支持ISO/ IEC15693 協(xié)議的全部命令,并且實(shí)現(xiàn)了同時(shí)識(shí)別,若設(shè)計(jì)出功率放大器,讀寫距離可以達(dá)到 1m左右,可滿足門禁、校園一卡通等非高速識(shí)別應(yīng)用場(chǎng)合的需要,在低成本應(yīng)用領(lǐng)域有較廣闊的應(yīng)用空間。