無線射頻讀寫卡技術(shù)在門禁系統(tǒng),電子支付領(lǐng)域和物聯(lián)網(wǎng)等領(lǐng)域中具有越來越廣泛的應(yīng)用。本文將基于EsDA開發(fā)套件講解如何快速上手并開發(fā)射頻讀卡器模塊的相關(guān)業(yè)務(wù),為開發(fā)者大大縮短了學(xué)習(xí)和開發(fā)時間成本。
?項目簡介
無線射頻讀寫卡技術(shù)是一種基于無線通信的身份識別技術(shù),由讀寫器和卡片組成,讀寫器可以通過無線射頻信號,實現(xiàn)與卡片之間的數(shù)據(jù)傳輸與操作。本文將基于EsDA開發(fā)平臺,使用EPC6450-AWI開發(fā)板,以及圖形化設(shè)計工具AWFlow Designer實現(xiàn)ZLG600A的RFID讀寫器模塊與卡片之間無線通信的功能。該項目主要用到了timer,fscript,rfid_zlg600,log節(jié)點,具體實現(xiàn)請見下文。 ?項目概述
該項目通過EsDA開發(fā)平臺,使用ZLG600A的模塊快速實現(xiàn)類似門禁卡或電子支付場景等業(yè)務(wù)。該項目的主要步驟如下:
- 通過ZLG600A的上位機配置工具,配置讀卡器模塊;
- 使用ZLG600A的上位機測試工具,激活卡;
- 使用rfid_zlg600節(jié)點實現(xiàn)檢驗密鑰,獲取卡uid,寫塊數(shù)據(jù),讀塊數(shù)據(jù)等功能。
?前期準(zhǔn)備讀者若有興趣可以閱讀以下文章對EsDA的其他模塊項目進行學(xué)習(xí):
- 【EsDA應(yīng)用】如何5分鐘快速實現(xiàn)指紋采集與檢測
- 【EsDA應(yīng)用】5分鐘快速實現(xiàn)攝像頭圖像采集
- 【EsDA應(yīng)用】10分鐘快速實現(xiàn)人臉識別
- 【EsDA應(yīng)用】5分鐘快速實現(xiàn)圖像人臉檢測
1. 硬件準(zhǔn)備
在標(biāo)有絲印為TF Card 的卡槽處,插入SD卡;
在標(biāo)有絲印為DUART的模塊上,將TTL轉(zhuǎn)USB串口模塊的TX與板子絲印為RXD連接,TTL轉(zhuǎn)USB串口模塊的RX與板子絲印為TXD相連;并將串口模塊的USB端口接入電腦;
在標(biāo)有絲印為Type-C 的接口處,插上Type-C線,并將Type-C線的另一端USB口插入電腦;
在標(biāo)有絲印為NET0或 NET1的RJ45插座處接上網(wǎng)線的水晶頭,網(wǎng)線另一端水晶接頭插在PC的網(wǎng)絡(luò)插座上。
ZLG600A模塊支持TTL,RS232以及RS485接口通信,本文采用TTL通信。在標(biāo)有絲印為 3.3V 的排針針腳處接上ZLG600A模塊的 VCC 引腳;在標(biāo)有絲印為 GND 的排針針腳處接上ZLG600A模塊的 GND 引腳;在標(biāo)有絲印為 UTX1 的排針針腳處接上ZLG600A模塊的 RXD 的引腳;在標(biāo)有絲印為 URX1 的排針針腳處接上ZLG600A模塊的 TXD 的引腳上。
2. 上位機配置模塊
2.1 硬件連接
選擇ZLG600A(支持TTL,RS232以及RS485接口通信)與PC端通信的方式,本文選用TTL通信。將TTL轉(zhuǎn)USB串口模塊的TX與ZLG600A模塊絲印為 RXD 連接,TTL轉(zhuǎn)USB串口模塊的RX與ZLG600A模塊絲印為 TXD 相連,TTL轉(zhuǎn)USB串口模塊的GND與ZLG600A模塊絲印為 GND 相連,TTL轉(zhuǎn)USB串口模塊的VCC與ZLG600A模塊絲印為 VCC 相連;并將串口模塊的USB端口接入電腦。接線如下圖所示。
2.2 軟件操作
若想了解該模塊更多信息請訪問致遠電子ZLG600A相關(guān)資料進行查閱,本文只講解如何利用EsDA快速使用該模塊。
解壓縮后,雙擊執(zhí)行ZLG600A_Configure V1.00.exe這個上位機程序。
找到在設(shè)備管理器中對應(yīng)的串口設(shè)備,選擇波特率為 19200,點擊連接讀卡器,因為使用TTL通信,所以其他配置按默認(rèn)的即可,點擊配置模塊,若配置成功則如下圖所示。
雙擊執(zhí)行ZLG600A_Test V3.00.exe這個上位機程序。選擇對應(yīng)通信的串口號,設(shè)置波特率為19200后點擊連接讀卡器。若不確定是否已激活卡片,可以點擊卡片激活,此時可以看到被分配的卡片ID號。
以上,卡片和讀卡器就已激活配置成功,后續(xù)可以使用讀卡器對卡片進行讀寫等操作。
?項目實施
1. 加載密鑰
本業(yè)務(wù)是向模塊內(nèi)加載密碼,而非改變Mifare卡內(nèi)扇區(qū)的密碼。每個區(qū)有密鑰A和密鑰B兩個,對應(yīng)的cmd指令是load_mifare1_keya,load_mifare1_keyb。后續(xù)若想改變Mifare卡內(nèi)的密鑰,可以使用原密碼驗證通過后,直接用寫塊數(shù)據(jù)指令將密碼塊進行改寫。
1.1 流圖繪制
添加timer,fscript,rfid_zlg600,和log節(jié)點到畫布中并連線如下圖,為了和后面的業(yè)務(wù)進行區(qū)分,timer的消費者fscript的顯示名稱在此改為加載密鑰A。
1.2 節(jié)點配置
雙擊timer節(jié)點,配置周期性去加載密鑰的時間。雙擊timer的消費者節(jié)點fscript(顯示標(biāo)簽為加載密鑰A),卡密鑰的類型分為密鑰A和密鑰B,分別代表不同的cmd參數(shù),密鑰A的cmd指令為load_mifare1_keya,密鑰B的cmd指令為load_mifare1_keyb,在fscript中指定驗證密鑰的類型,密鑰的值以及操作的塊區(qū)號。
print("load_mifare1_keya")output.cmd = 'load_mifare1_keya'
buf = wbuffer_create()
wbuffer_write_uint8(buf, 0xAA) //低字節(jié)wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) //高字節(jié)
output.key_data = wbuffer_get_data(buf)output.key_data_len = 6
output.section_id = 1
雙擊rfid_zlg600節(jié)點,配置模塊通信參數(shù)。雙擊rfid_zlg600的消費者節(jié)點fscript,若加載密鑰的cmd指令成功,則說明密鑰正確。后續(xù)針對讀寫卡的其他操作都要進行密鑰驗證。
t('result::::::::::::::::::::')
if (msg.cmd == "load_mifare1_keya") { if(msg.result == 0) { output.payload = "load_mifare1_keya_ok" } else { output.payload = "load_mifare1_keya_err" }}
log節(jié)點是用來輸出日志信息到控制臺或調(diào)試窗口等。1.3 下載驗證繪制完流圖后,點擊CTRL+S即可保存流圖,點擊下載流圖??梢钥吹酱谥稚巷@示加載密鑰成功的打印信息。
2. 讀卡UID
在本業(yè)務(wù)中先驗證密鑰再對卡UID進行讀取。
2.1 流圖繪制
添加timer,fscript,rfid_zlg600,和log節(jié)點到畫布中并連線如下圖,為了和后面的業(yè)務(wù)進行區(qū)分,timer的消費者fscript的顯示名稱在此改為讀卡號。
2.2 節(jié)點配置
雙擊timer節(jié)點,配置周期性去讀卡號的時間。
雙擊timer的fscript節(jié)點(顯示標(biāo)簽為讀卡號),讀之前必需成功進行密鑰驗證。
print("get_mifare1_uid")output.cmd = 'get_mifare1_uid'output.keytype = 0x60
buf = wbuffer_create()
wbuffer_write_uint8(buf, 0xAA) //低字節(jié)wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) //高字節(jié)
output.key_data = wbuffer_get_data(buf)output.key_data_len = 6
//一個扇區(qū)有4個塊output.section_id = 1output.block_id = 4
雙擊rfid_zlg600節(jié)點,配置模塊通信參數(shù)。
雙擊rfid_zlg600的消費者節(jié)點fscript,若成功驗證密鑰后則將讀取的卡UID進行顯示。
var i = 0print('result::::::::::::::::::::')if(msg.cmd == "get_mifare1_uid") { if(msg.result == 0) { print('mifare1_uid_len: ' + msg.mifare1_uid_len) print('mifare1_uid: start') len = msg.mifare1_uid_len rbuf = rbuffer_create(msg.mifare1_uid, len) for (i = 0; i < len; i = i + 1) { ? ? ? ? ? ?data = rbuffer_read_uint8(rbuf) ? ? ? ? ? ?print('data'+ i + ':' + data) ? ? ? ?} ? ? ? ?print('mifare1_uid: end') ? ? ? ? ? ? ? ?output.payload = "get_mifare1_uid_ok" ? ?} else { ? ? ? ?output.payload = "get_mifare1_uid_err" ? ?} ? ?}
2.3 下載驗證
繪制完流圖后,點擊CTRL+S即可保存流圖,點擊下載流圖??梢钥吹酱谥稚巷@示讀取卡UID的值的打印信息。
3. 寫塊數(shù)據(jù)
本業(yè)務(wù)需要先對卡內(nèi)操作的塊區(qū)驗證密鑰,驗證成功后對同一扇區(qū)都可進行寫操作(一個扇區(qū)有四個塊區(qū))。可以通過本業(yè)務(wù)對扇區(qū)尾的密碼塊進行修改,這也是更改密碼的唯一方法。
3.1 繪制流圖
添加timer,fscript,rfid_zlg600,和log節(jié)點到畫布中并連線如下圖,為了和后面的業(yè)務(wù)進行區(qū)分,timer的消費者fscript的顯示名稱在此改為寫塊數(shù)據(jù)。
3.2 節(jié)點配置
雙擊timer節(jié)點,配置周期性去寫塊數(shù)據(jù)的時間。
雙擊timer的fscript節(jié)點(顯示標(biāo)簽為寫塊數(shù)據(jù)),寫塊數(shù)據(jù)之前必需成功進行密鑰驗證。設(shè)置需要寫入的指定的扇區(qū)和寫入的數(shù)據(jù)。
print("write_mifare1_data")output.cmd = "write_mifare1_data"output.keytype = 0x60
buf = wbuffer_create()wbuffer_write_uint8(buf, 0xAA) //低字節(jié)wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) //高字節(jié)
output.key_data = wbuffer_get_data(buf)
buf1 = wbuffer_create()wbuffer_write_uint8(buf1, 0x12) //低字節(jié)wbuffer_write_uint8(buf1, 0x34) wbuffer_write_uint8(buf1, 0x56) wbuffer_write_uint8(buf1, 0x78) wbuffer_write_uint8(buf1, 0x90) wbuffer_write_uint8(buf1, 0x01) wbuffer_write_uint8(buf1, 0x02) wbuffer_write_uint8(buf1, 0x03) wbuffer_write_uint8(buf1, 0x04) wbuffer_write_uint8(buf1, 0x05) wbuffer_write_uint8(buf1, 0x06) wbuffer_write_uint8(buf1, 0x07) wbuffer_write_uint8(buf1, 0x08) wbuffer_write_uint8(buf1, 0x09) wbuffer_write_uint8(buf1, 0x11) wbuffer_write_uint8(buf1, 0x12) //高字節(jié)
output.data = wbuffer_get_data(buf1)output.data_len = 16
output.section_id = 1 output.block_id = 4
雙擊rfid_zlg600節(jié)點,配置模塊通信參數(shù)。
雙擊rfid_zlg600的消費者節(jié)點fscript,查看寫入塊數(shù)據(jù)的結(jié)果并打印。
var i = 0print('result::::::::::::::::::::')if (msg.cmd == "write_mifare1_data") { if(msg.result == 0) { output.payload = "write_mifare1_data_ok" } else { output.payload = "write_mifare1_data_err" }}
3.3 下載驗證
繪制完流圖后,點擊CTRL+S即可保存流圖,點擊下載流圖。
可以看到串口助手上顯示寫塊數(shù)據(jù)成功的打印信息。
4. 讀塊數(shù)據(jù)
本業(yè)務(wù)需要對指定塊區(qū)域進行密鑰驗證后,才可對同一扇區(qū)內(nèi)的數(shù)據(jù)進行讀操作(一個扇區(qū)包含四個塊區(qū),且一個扇區(qū)共用一個密鑰)。
4.1 繪制流圖
添加timer,fscript,rfid_zlg600,和log節(jié)點到畫布中并連線如下圖,為了和后面的業(yè)務(wù)進行區(qū)分,timer的消費者fscript的顯示名稱在此改為讀塊數(shù)據(jù)。
4.2 節(jié)點配置
雙擊timer節(jié)點,配置周期性去讀塊數(shù)據(jù)的時間。
雙擊timer的fscript節(jié)點(顯示標(biāo)簽為讀塊數(shù)據(jù)),讀塊數(shù)據(jù)之前必需成功進行密鑰驗證。設(shè)置需要讀取的指定的扇區(qū)。
print("read_mifare1_data")output.cmd = 'read_mifare1_data'output.keytype = 0x60
buf = wbuffer_create()
wbuffer_write_uint8(buf, 0xAA) //低字節(jié)wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) wbuffer_write_uint8(buf, 0xFF) //高字節(jié)
output.key_data = wbuffer_get_data(buf)output.key_data_len = 6
//一個扇區(qū)有4個塊output.section_id = 1output.block_id = 4
雙擊rfid_zlg600節(jié)點,配置模塊通信參數(shù)。
雙擊rfid_zlg600的消費者節(jié)點fscript,查看讀取到的塊數(shù)據(jù)的內(nèi)容并打印。
var i = 0print('result::::::::::::::::::::')
if (msg.cmd == "read_mifare1_data") { if(msg.result == 0) { print('mifare1_data_len: ' + msg.mifare1_data_len) print('mifare1_data: start') len = msg.mifare1_data_len rbuf = rbuffer_create(msg.mifare1_data, len) for (i = 0; i < len; i = i + 1) { ? ? ? ? ? ?data = rbuffer_read_uint8(rbuf) ? ? ? ? ? ?print('data'+ i + ':' + data) ? ? ? ?} ? ? ? ?print('mifare1_data: end') ? ? ? ? ? ? ? ?output.payload = "read_mifare1_data_ok" ? ?} else { ? ? ? ?output.payload = "read_mifare1_data_err" ? ?} ? ?}
4.3 下載驗證
繪制完流圖后,點擊CTRL+S即可保存流圖,點擊下載流圖??梢钥吹酱谥稚巷@示讀取塊數(shù)據(jù)內(nèi)容的打印信息。
-
無線
+關(guān)注
關(guān)注
31文章
5471瀏覽量
173897 -
ESDA
+關(guān)注
關(guān)注
0文章
28瀏覽量
7538 -
射頻讀卡器
+關(guān)注
關(guān)注
0文章
4瀏覽量
6618
發(fā)布評論請先 登錄
相關(guān)推薦
ID讀卡器Python小程序開發(fā)
液顯ID讀卡器C#小程序開發(fā)
![液顯ID<b class='flag-5'>讀卡器</b>C#小程序<b class='flag-5'>開發(fā)</b>](https://file1.elecfans.com/web3/M00/05/85/wKgZPGeAw16AYHH-AAPCP23Pv_M129.png)
【正點原子STM32H7R3開發(fā)套件試用體驗】開發(fā)套件開箱報告
充電樁非接觸式讀卡器 FSV-MD5422-01
![充電樁非接觸式<b class='flag-5'>讀卡器</b> FSV-MD5422-01](https://file1.elecfans.com/web1/M00/F3/DC/wKgZoWcgRpGAAtEVAAmfCqsFB9g605.png)
TPS63802HDKEVM-硬件開發(fā)套件
![TPS63802HDKEVM-硬件<b class='flag-5'>開發(fā)套件</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【xG24 Matter開發(fā)套件試用體驗】深入了解Silicon Labs xG24 Matter開發(fā)套件
【xG24 Matter開發(fā)套件試用體驗】初識xG24 Matter開發(fā)套件
DA16200 超低功耗 Wi-Fi 模塊開發(fā)套件 Pro數(shù)據(jù)手冊
![DA16200 超低功耗 Wi-Fi <b class='flag-5'>模塊</b><b class='flag-5'>開發(fā)套件</b> Pro數(shù)據(jù)手冊](https://file1.elecfans.com/web2/M00/EB/52/wKgaomZYRFeAUYu_AAIcdL7RdCA705.png)
DA16200 超低功耗 Wi-Fi 模塊開發(fā)套件數(shù)據(jù)手冊
![DA16200 超低功耗 Wi-Fi <b class='flag-5'>模塊</b><b class='flag-5'>開發(fā)套件</b>數(shù)據(jù)手冊](https://file1.elecfans.com/web2/M00/EA/68/wKgZomZYPi-AFsOaAAHH6y5qIrM275.png)
音頻語音數(shù)據(jù)(AVD)模塊開發(fā)套件DA14AVDDECTDEVKT數(shù)據(jù)手冊
![音頻語音數(shù)據(jù)(AVD)<b class='flag-5'>模塊</b><b class='flag-5'>開發(fā)套件</b>DA14AVDDECTDEVKT數(shù)據(jù)手冊](https://file1.elecfans.com/web2/M00/EB/4F/wKgaomZYN0iAX-P_AAJNQdN7IQ4241.png)
SmartBond ? DA14695 低功耗藍牙5.2 模塊開發(fā)套件 Pro-子板數(shù)據(jù)手冊
![SmartBond ? DA14695 低功耗藍牙5.2 <b class='flag-5'>模塊</b><b class='flag-5'>開發(fā)套件</b> Pro-子板數(shù)據(jù)手冊](https://file1.elecfans.com/web2/M00/EA/C5/wKgaomZVnsmAfkr6AAdj3pBfpho027.png)
DA14531 SMARTBOND TINYTM模塊開發(fā)套件硬件用戶手冊
![DA14531 SMARTBOND TINYTM<b class='flag-5'>模塊</b><b class='flag-5'>開發(fā)套件</b>硬件用戶手冊](https://file1.elecfans.com/web2/M00/E8/24/wKgaomZLFriAE4WMAAHhCvyA0Mc397.png)
網(wǎng)絡(luò)讀卡器_產(chǎn)品手冊
![](https://file1.elecfans.com/web2/M00/DB/3E/wKgZomYrUIWATP9DAAJ1L42KCrM570.png)
評論