基于ARM的嵌入式RIFD讀寫器設計
圖 3 系統電源電路圖
4.3 SDRAM 接口電路
在本系統中,采用了 HY57V641620 SDRAM 芯片,存儲容量為 4 組×16M 位(8M 字節),工作電壓為 3.3V,支持自動刷新和自刷新,16 位數據寬度。該芯片是通過行、列地址來定義存儲器地址空間的,A11-A0 是列地址,A7-A0 是行地址,芯片管腳 BA0、BA1 用于片內 4 個存儲器組的選擇,將它與 ADDR21 和ADDR22 相連,利用地址高端進行相應的選擇。
在本系統中,采用該 JTAG 接口對程序進行調試和下載。標準的 JTAG 接口是 4 線:TMS、TCK、TDI、TDO,分別為測試模式選擇、測試時鐘、測試數據輸入和測試數據輸出。
5 讀寫器的軟件設計
根據 RFID 讀寫器的需要,移植了UC/OS-Ⅱ。嵌入式系統通信程序循環發送命令,檢測是否有卡待讀,如果接收到從 RFID 模塊傳來的卡號信息,則將卡號從信息中提取出來發送至 PC 機上的應用程序,由應用程序對它進行辨識。無論是與 RFID 模塊的通信還是與 PC 機的通信,都采用了串口通信方式,所以首先應對串口進行設置。
當嵌入式控制程序向 RFID 模塊發送完讀卡的相關命令后,就需要等待接收傳回的卡號數據信息,由于系統串口采用的是查詢方式,一旦發送端存在數據遺失,一直未能有數據傳送回來,則程序將進入死循環,所以在程序中設計了自動終止功能。在系統設計中該部分子內容只接收來自 RFID模塊的數據,故只考慮串口2。
讀卡程序如下:
char recv_rfid()
{
char lm;
int m,l;
if(whichUart==1) // 串口 2,接收從 RFID 模塊傳來的數據
{
wh: for(;(!(rUTRSTAT1 0x1));){
m=m+1; // 等待的同時對變量 m 計數
if(m==500) // 判斷 m 是否已累計到 500 還未接收到有效數據
{err_flag=1; // 若是,則將標志 err_flag 置 1
goto wh1; // 跳轉到標記為 wh1 的程序處
}}
lm=RdURXH1(); // 若接收到有效數據,則將串口數據賦給變量 lm
return(lm); // 返回 lm 的值
}
wh1: l=0; // 標記 wh1 處程序,實為跳出子程序
}
寫卡的過程只需要將從應用程序處獲取持卡人的相關信息然后發送至RFID 收發模塊,由 RFID模塊寫入射頻卡中,因為要驗證寫入信息是否正確,所以該程序還需要實現讀取射頻卡中的信息并返回給應用程序,由應用程序來判斷寫入信息的正誤。持卡人的相關信息包括姓名、性別、年齡、工作單位、身份證號、發卡日期和發卡時間。
6 結束語
本文創新點:基于 S6700 的嵌入式的RIFD 讀寫器具有成本低廉,穩定性好等特點,完全支持ISO/ IEC15693 協議的全部命令,并且實現了同時識別,若設計出功率放大器,讀寫距離可以達到 1m左右,可滿足門禁、校園一卡通等非高速識別應用場合的需要,在低成本應用領域有較廣闊的應用空間。
參考文獻:
[1].S3C44B0Xdatasheethttp://www.dzsc.com/datasheet/S3C44B0X_589522.html.
[2].PC datasheethttp://www.dzsc.com/datasheet/PC+_2043275.html.
[3].P89C58datasheethttp://www.dzsc.com/datasheet/P89C58_538826.html.
[4].P89C52 datasheethttp://www.dzsc.com/datasheet/P89C52+_538859.html.
[5].ES1datasheethttp://www.dzsc.com/datasheet/ES1_2344066.html.
[6].B1117 datasheethttp://www.dzsc.com/datasheet/B1117+_1097298.html.
評論