久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13151|回復: 1
收起左側(cè)

在C51單片機上對讀寫卡芯片MFRC522編程

[復制鏈接]
ID:202709 發(fā)表于 2017-5-19 22:41 | 顯示全部樓層 |閱讀模式
C51單片機上對讀寫卡芯片MFRC522編程1 概述
在整個的射頻識別系統(tǒng)中。讀寫卡模塊負責建立單片機與電子標簽之間的通信,起著非常重要的作用。而整個讀寫卡模塊的核心,就是讀寫卡芯片MFRC522
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2A99.tmp.png
MFRC522 NXP 公司專為各種計量檢測設(shè)備而設(shè)計、推出的一款低成本、低功耗的非接觸式讀寫卡芯片。該芯片應(yīng)用于 13.56MHz 非接觸通信,應(yīng)用了較為先進的調(diào)制和解調(diào)概念,集成了眾多的通信方式和協(xié)議,其內(nèi)部強大的電路可直接驅(qū)動天線無需其他外接電路,通過其獨特的加密算法,更使其具備可較強的安全性。
作為一款較為成功的讀寫卡芯片,MFRC522與主機間的通信采用的是連線較少的串行通信,而且可根據(jù)不同的用戶需求,從 SPII2C、串行 UART三種總線模式中選擇,這樣的設(shè)計有利于減少連線數(shù)量,縮小 PCB 板體積,降低成本。
目前MFRC522在很多的領(lǐng)域都得到了廣泛應(yīng)用,尤其適用于低成本、小尺寸、低功耗和單電源的非接觸式通信的應(yīng)用場合,是智能儀表、板上單元、便攜式手持設(shè)備的極佳選擇。 目前,全國各大城市的公共交通終端以及非接觸式公用電話應(yīng)用的正是MFRC522
2 特性
1. 高度集成的模擬電路模塊,應(yīng)用新概念完成調(diào)制和解調(diào)。
2. 支持ISO 14443AMIFARE通信協(xié)議
3. 驅(qū)動優(yōu)化,采用少量外部器件就能輸出驅(qū)動級到天線
4. 支持MIFARE的加密算法
5. 可自由選擇多樣的主機接口:
①10Mbit/sSPI接口
② I2C接口,快速傳輸模式的速率為400kbit/s,
高速模式的速率為3400kbit/s
串行UART,傳輸速率高達1228.8kbit/s,幀取決于RS232接口,電壓電平取決于提供的管腳電壓
6. 靈活的中斷模式
7. 64字節(jié)的發(fā)送接收緩沖區(qū)
8. 具備軟件掉電、硬件掉電和發(fā)送器掉電三種低功耗模式,能夠通過關(guān)閉相應(yīng)的模塊或驅(qū)動器達到節(jié)電的目的。
9. 2.5~3.3V的低電源電壓,低功耗設(shè)計
10. 內(nèi)部振蕩器,鏈接27.12HZ的晶體
11.可編程定時器  
12.自由編程的I/O管腳
13.內(nèi)置溫度傳感器,當芯片溫度過高時會自動停止射頻信號的發(fā)射
14. 體積小,僅有5mm╳5mm╳0.85mm
3 系統(tǒng)結(jié)構(gòu)
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2AA9.tmp.png
MFRC522與MCU通過串口進行數(shù)據(jù)交換,其支持3種微控制器接口類型:SPI、I2C以及串行UART。且MFRC522 具備接口復位功能,能夠自動檢測當前執(zhí)行了上電復位或硬復位的微控制器的接口類型。
MFRC522的數(shù)據(jù)處理模塊負責執(zhí)行數(shù)據(jù)的并行與串行之間的轉(zhuǎn)換和奇偶校驗,并且集成了多種協(xié)議,支持 ISO14443A 的所有層。
狀態(tài)和控制模塊通過對器件進行配置來達到適應(yīng)環(huán)境和外部影響的目的,從而使芯片性能達到最佳狀態(tài)。
CRYPTO1 流密碼單元是保障MFRC522通信穩(wěn)定、安全的關(guān)鍵,當芯片與MIFARE電子標簽建立通信時,高速CRYPTO1 流密碼單元和非易失性密匙存儲器將完成密匙的校驗。
模擬電路中包含了一個功能強大的驅(qū)動部分,負責信號的發(fā)送、檢測合接收。
4 引腳配置
作者利用Protel繪制的原理圖:
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2AAA.tmp.png
如上圖所示,MFRC522芯片為 32 腳 HVQFN 封裝。器件使用了 3 個獨立的電源以實現(xiàn)在電磁兼容方面的要求。
●天線
MFRC522芯片通過TX1和TX2這兩個管腳向外輸出13.56MHz 的能量載波來驅(qū)動天線;當電子標簽收到天線發(fā)出的激勵信號后,就會發(fā)射出響應(yīng)信號,天線接收到響應(yīng)信號就會通過天線的外部電路將其送給RX管腳進行處理。
名 稱
類 型
功 能
TX1, TX2
輸出緩沖
天線驅(qū)動器
WMID
模擬
參考電壓
RX
輸入模擬
天線輸入信號
此外,為了確保驅(qū)動模塊的正常工作,MF RC522設(shè)計了單獨電源專為驅(qū)動部分供電。
名 稱
      類 型
功 能
TVDD  
電源
發(fā)送器電源電壓
TVSS
電源  
發(fā)送器電源地
●模擬電源
MFRC522 的模擬部分使用單獨電源進行供電。
名 稱   
       類 型
功 能
AVDD
電源
模擬部分電源電壓
AVSS
       電源
模擬部分電源地
  
●數(shù)字電源
MFRC522 數(shù)字部分使用單獨電源進行供電。
名 稱
類 型
功 能
DVDD
電源
數(shù)字部分電源電壓
DVSS
電源
數(shù)字部分電源地
            
●振蕩器
頻率為27.12MHz 的晶振通過一段緩沖區(qū)被連接到OSCIN管腳和 OSCOUT管腳。如果開發(fā)者需要采用外部晶振作為時鐘,可從 OSCIN 引入外部時鐘信號。
名稱
類型
功能
OSCIN
輸入
振蕩器緩沖輸入
OSCOUT
輸出
振蕩器緩沖輸出
●電子標簽接口
MFRC522 為 MIFARE®有源天線的設(shè)計提供了相應(yīng)的支持。通過SIGIN 和SIGOUT就可以對MIFARE的信號進行處理。
名稱
類型
功能
SIGIN
帶施密特觸發(fā)器的輸入
MIFARE 接口輸入
SIGOUT
輸出
MIFARE 接口輸出
AUX1/2
輸出
輔助輸出:用于測試
                          
●串行接口
名稱
類型
功能
D1 … D7
I/O
不同接口的數(shù)據(jù)線
(測試腳、I2C、SPI、UART )
SDA
I/O
串行數(shù)據(jù)線
I2C
輸入
I2C使能
EA
輸入
地址:提供I2C的地址
  
由于本次設(shè)計中MFRC522與MCU之間最終選擇了SPI接口,在此特將各引腳在SPI接口模式下的定義列出:
引腳名稱
SPI 方式  
SDA
NSS
I2C
L
EA
H
D7
MISO
D6
MOSI
D5
SCK
5 MFRC522的功能實現(xiàn)
為了通過編程實現(xiàn)MFRC522的讀寫卡功能,我們的第一步就是把要用的命令字和地址進行定義。我們通過查找芯片手冊,得到詳盡的MFRC522命令字、MifareOne卡片命令字以及MFRC522各寄存器的功能與定義。
接下來,打開Keil uVision4并在工程中添加rc522.h文件,用這個文件定義所有射頻識別過程中可能用到的命令字與地址:
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2ABB.tmp.png
通過上圖大家可以看到,整個522.h文件中基本全都是#define 我們只需要將芯片手冊中的信息仔細錄入,并寫好注釋。而且,為了便于管理,rc522.h里的語句被我分成了四類,分別是:①MFRC522命令字
②MifareOne卡片命令字  ③ MFRC522寄存器  ④MF522通訊錯誤的處理代碼
接下來,我們就要開始編程實現(xiàn)MFRC522的一些具體功能了。在工程中新建rc522.c文件,在該文件中編寫MFRC5222讀寫卡過程中需要的指令。
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2AEB.tmp.png      
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2AEC.tmp.pngRC522完整的讀寫卡流程框圖:
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2AFD.tmp.png      
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2AFE.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2AFF.tmp.pngfile:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B0F.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B10.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B11.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B31.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B32.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B33.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B44.tmp.pngfile:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B45.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B46.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B57.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B58.tmp.pngfile:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B68.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B69.tmp.pngfile:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B6A.tmp.pngfile:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B8B.tmp.png         
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B8C.tmp.pngfile:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B8D.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B9D.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2B9E.tmp.pngfile:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2BAF.tmp.pngfile:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2BB0.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2BB1.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2BC1.tmp.pngfile:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2BC2.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2BC3.tmp.png
file:///C:\Users\wangpu\AppData\Local\Temp\ksohtml\wps2BD4.tmp.png
根據(jù)上面的讀寫卡流程框圖,我們按照每個框的內(nèi)容編寫與之相對應(yīng)的程序。
●尋卡請求
讀寫卡模塊向外發(fā)射激勵信號,一旦有Mifare卡進入讀寫器天線工作范圍,讀寫模塊發(fā)送命令。Mifare卡收到命令后會將卡上的儲存單元中的卡片類型號(TagType)信息即2個字節(jié)數(shù)據(jù)發(fā)給讀寫器。從而建立Mifare卡與RC522通信的第一步。
尋卡請求函數(shù):
char PcdRequest(unsigned char req_code,unsigned char *pTagType)
說明:
req_code[IN]:尋卡方式
               0x52 = 尋感應(yīng)區(qū)內(nèi)所有符合14443A標準的卡
               0x26 = 尋未進入休眠狀態(tài)的卡
          pTagType[OUT]:卡片類型代碼
               0x4400 = Mifare_UltraLight
               0x0400 = Mifare_One(S50)
               0x0200 = Mifare_One(S70)
               0x0800 = Mifare_Pro(X)
               0x4403 = Mifare_DESFire
操作成功返回值為0 即完成整個的尋卡請求。
●防沖撞+選定Mifare卡
由于RC522在同一時間內(nèi)只能與一個Mifare卡進行通信,因此在完成尋卡請求之后,為了防止有多個Mifare卡同時處于讀寫卡模塊天線工作范圍而造成沖撞,需進行防沖撞操作,即讀寫卡模塊與一張Mifare卡建立聯(lián)絡(luò),取得其全球唯一的序列號。
防沖撞函數(shù):
char PcdAnticoll(unsigned char *pSnr)
說明: pSnr[OUT]:用于卡片序列號,4字節(jié)
操作成功時函數(shù)返回值為0.
在獲得Mifare卡的序列號之后,我們需要做的就是對指定的序列號的Mifare卡進行選定,只有被選中的卡才能與RC522建立進一步的通信,其它的Mifare卡將全部回到初始狀態(tài)。
選定Mifar卡函數(shù):
char PcdSelect(unsigned char *pSnr)
說明:pSnr[IN]:之前防沖撞操作中獲得的Mifare卡序列號,4字節(jié)
操作成功時函數(shù)返回值為0.
●驗證Mifare密碼
為了訪問Mifare卡中的某個扇區(qū)里存放的數(shù)據(jù),必須進行密碼的驗證。用戶首先要通過編程將已經(jīng)設(shè)定好的密鑰存入RC522內(nèi)部的密鑰存儲區(qū)中,然后再比對Mifare卡中存放的密鑰與RC522密鑰存儲區(qū)中的密鑰是否相同,只有確認二者相同之后才可以對當前Mifare卡的這個扇區(qū)進行下一步操作。
密碼驗證函數(shù):
char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)
說明:
auth_mode[IN]: 密碼驗證模式
          0x60 = 驗證A密鑰
          0x61 = 驗證B密鑰
          addr[IN]:塊地址
          pKey[IN]:密碼
          pSnr[IN]:卡片序列號,4字節(jié)
操作正確時返回 0.
●讀操作
完成了密碼認證,我們就可以從Mifare卡中的扇區(qū)中讀出數(shù)據(jù),每次讀出數(shù)據(jù)的大小為16字節(jié)。
讀操作函數(shù):
char PcdRead(unsigned char addr,unsigned char *pData)
說明:
addr[IN]:塊地址,取值范圍0—63
pData[OUT]:從Mifare卡中讀出的數(shù)據(jù),16字節(jié)
操作成功返回0.
●本次設(shè)計中使用的程序:
void ctrlprocess(void)
{
  unsigned char ii;
  char status;
  status=PcdRequest(PICC_REQIDL,&RevBuffer[0]);//尋天線區(qū)內(nèi)未進入休眠狀態(tài)的卡,返回卡片類型 2字節(jié)
  if(status!=MI_OK)
  {
    return;
  }
  status=PcdAnticoll(&RevBuffer[2]);//防沖撞,返回卡的序列號, 4字節(jié)的序列號被存放在RevBuffer[2]中
  if(status!=MI_OK)
  {
    return;
  }
  memcpy(MLastSelectedSnr,&RevBuffer[2],4);//將RevBuffer[2]中存放的4字節(jié)的序列號復制到MLastSelectedSnr變量中存儲
for(ii=0;ii<4;ii++)
  {
    Show816(0,5+2*ii,(MLastSelectedSnr[ii]>>4)&0x0f);       
    Show816(0,6+2*ii,MLastSelectedSnr[ii]&0x0f);
  }        //將4個字節(jié)序列號分別存放到MLastSelectedSnr[0]到MLastSelectedSnr[3],方便后續(xù)的顯示與發(fā)送
2 Mifare One
Mifare卡的激勵
首先,通信系統(tǒng)中的讀卡器始終都在通過天線向周圍發(fā)射一組頻率固定的電磁波,這組電磁波即激勵信號。接下來,一旦非接觸式Mifare卡進入讀寫器工作范圍內(nèi),即會被讀寫器的激勵限號信號所激勵。受到激勵信號的影響,Mifare卡內(nèi)部的諧振電路就會產(chǎn)生共振,從而使卡的內(nèi)部電容中內(nèi)產(chǎn)生了電荷。而在這個電容的另一端,我們通過一個單向?qū)ǖ碾娮颖茫涂梢詫㈦娙輧?nèi)儲存的電荷轉(zhuǎn)移到另一個電容內(nèi)儲存。然后,整個共振和電荷轉(zhuǎn)移的過程周而復始,當電容中存儲的電壓達到2 V時,此電容就成為Mifare卡的電源,并開始為卡內(nèi)的其他電路提供工作電壓,從而幫助Mifare卡完成應(yīng)答、存儲、通信等一系列功能。
ATR模塊的啟動:Answer To Request(“應(yīng)答讀寫器發(fā)出的請求”)
當非接觸式Mifare卡進入讀寫器的工作范圍內(nèi)時,我們就可以控制讀寫器向Mifare卡發(fā)出Request all(Request std)指令,收到指令后的Mifare卡將啟動ATR模塊。這時,Mifare卡的內(nèi)部芯片就會將卡的類型號(TagType)傳送給讀寫器,從而建立Mifare卡與讀寫器的聯(lián)絡(luò)。
注意,如果不進行ATR的啟動,讀寫器對卡的進一步操作(/寫操作等)將不會進行。所以,我們可以將ATR啟動理解為Mifare卡與讀寫器之間通信的第一步。
AntiCollision模塊:Mifare卡防沖突
當有多張Mifare卡處在讀寫器的天線工作范圍內(nèi)時,AntiCollision模塊,即防沖突功能將被啟動。這時,讀寫器首先將逐一地與每一張Mifare卡進行通信,從而讀取每一張Mifare卡序列號(Serial Number)。由于每一張Mifare卡都的序列號都是獨一無二的,因此我們就可以借助讀寫器中的AntiCollision防重疊模塊以及Mifare卡上的防重疊模塊,通過Mifare卡唯一的序列號來選定多張Mifare卡中的一張。被選中的卡就可以暢通無阻地與讀寫器進行數(shù)據(jù)交換,而那些未被選中的卡則處于待命狀態(tài),準備隨時與讀寫器進行通信聯(lián)絡(luò)。
Select Application 模塊:選中并鎖定Mifare卡片
Mifare卡與讀寫器完成了上面的兩個步驟之后,若讀寫器要想對卡進行讀/寫操作,還須對已經(jīng)完成了ATR啟動的Mifare卡進行“Select”操作,從而使卡真正地被選中。
被選中并鎖定的Mifare卡會將卡片上存儲的“Size” 字節(jié)傳送給讀寫器。只有當讀寫器收到這一字節(jié)之后,才可對卡進行下一步的操作。
Authentication & Access Control 模塊:認證及存取控制模塊
以上的三個步驟完成后,我們還必須要對卡上已經(jīng)設(shè)置了的密碼進行認證,只有密碼匹配,我們才能被允許進一步的讀/寫操作。
Mifare卡上有16個扇區(qū),每個扇區(qū)都能夠獨立設(shè)置各自的密碼,各個扇區(qū)之間互不干涉,因此我們必須逐一地分別加以認證,才能對密碼匹配的扇區(qū)進行下一步的操作。
這種設(shè)計的優(yōu)點是每個扇區(qū)都可以獨立開來,應(yīng)用于一個特定的場合,從而讓一張Mifare卡實現(xiàn)多種功能,我們校內(nèi)的“一卡通”就是一個典型的例子。
Mifare卡的密碼的認證采用了三次相互的認證的方法,安全性極佳。試圖靠猜測密碼打開卡某個扇區(qū)幾乎不可能。
Control & Arithmetic Unit:控制及算術(shù)運算單元
該單元主要由Mifare卡內(nèi)部的中中央微處理器(MCU)構(gòu)成,它是整個卡的“大腦”。它對卡的各個單元進行控制,同時它還需要完成對各種數(shù)據(jù)的運算處理。
RAM/ROM:存儲單元
Mifare卡內(nèi)部的RAM主要起到配合控制及算術(shù)運算單元,將運算的結(jié)果進行暫時存儲的功能。RAM中的數(shù)據(jù)在卡失掉電源后(卡片離開讀寫器天線的有效工作范圍)將會丟失。
ROM中則存儲了一些已經(jīng)固化了的Mifare卡運行所必須的程序指令,當需要調(diào)用時,由控制及算術(shù)運算單元直接從ROM中取出,從而通過指令對每個單元進行控制。

回復

使用道具 舉報

ID:308785 發(fā)表于 2019-5-13 22:22 | 顯示全部樓層
謝謝 這個說明感覺提升了我很多
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品视频一区二区三区 | 亚洲欧洲精品一区 | 国产精品美女www爽爽爽视频 | 亚洲欧洲综合av | www.嫩草| a黄在线观看 | 777毛片| 中文字幕在线第一页 | 精品1区 | 天天影视亚洲综合网 | 精品毛片在线观看 | 97超级碰碰| 欧美成年黄网站色视频 | 欧美色图另类 | 国产高清在线精品一区二区三区 | 成年人视频免费在线观看 | 精品国产欧美日韩不卡在线观看 | 日韩精品一区二区三区中文在线 | 欧美天堂 | 国产成人99 | 天堂av中文 | 可以在线观看av的网站 | 欧美日韩免费一区二区三区 | 涩涩片影院 | 99久久精品国产毛片 | 四虎影院一区二区 | 欧美黑人一区二区三区 | 国产精品久久久久久久久 | 韩日av片 | 人人种亚洲 | av黄色在线观看 | 精品一二三区在线观看 | 97狠狠干 | 在线观看第一区 | 精品久久成人 | 男女一区二区三区 | 日韩一级免费 | 美日韩精品 | 国产一区二区在线免费观看 | 国产精品欧美一区二区 | 日韩av电影在线观看 |