?
一、環(huán)境介紹
開(kāi)發(fā)軟件:Keil5
非接觸式讀寫(xiě)卡模塊: MFRC522
二、功能介紹
使用MFRC522模塊完成對(duì)IC卡卡號(hào)讀取、卡類(lèi)型區(qū)分、IC卡扇區(qū)密碼修改、扇區(qū)數(shù)據(jù)讀寫(xiě)等功能;底層采用SPI模擬時(shí)序,可以很方便的移植到其他設(shè)備,完成項(xiàng)目開(kāi)發(fā)。 現(xiàn)在很多嵌入式方向的畢業(yè)設(shè)計(jì)經(jīng)常使用到該模塊,比如: 校園一卡通設(shè)計(jì)、水卡充值消費(fèi)設(shè)計(jì)、公交卡充值消費(fèi)設(shè)計(jì)等。
三、MFR522介紹
MF RC522 是應(yīng)用于13.56MHz 非接觸式通信中高集成度讀寫(xiě)卡系列芯片中的一員。是NXP 公司針對(duì)“三表”應(yīng)用推出的一款低電壓、低成本、體積小的非接觸式讀寫(xiě)卡芯片,是智能儀表和便攜式手持設(shè)備研發(fā)的較好選擇。
MF RC522 利用了先進(jìn)的調(diào)制和解調(diào)概念,完全集成了在13.56MHz 下所有類(lèi)型的被動(dòng)非接觸式通信方式和協(xié)議。支持 ISO14443A 的多層應(yīng)用。其內(nèi)部發(fā)送器部分可驅(qū)動(dòng)讀寫(xiě)器天線與ISO 14443A/MIFARE卡和應(yīng)答機(jī)的通信,無(wú)需其它的電路。接收器部分提供一個(gè)堅(jiān)固而有效的解調(diào)和解碼電路,用于處理ISO14443A 兼容的應(yīng)答器信號(hào)。數(shù)字部分處理ISO14443A 幀和錯(cuò)誤檢測(cè)(奇偶 &CRC)。此外,它還支持快速CRYPTO1 加密算法,用于驗(yàn)證MIFARE 系列產(chǎn)品。MFRC522 支持MIFARE?更高速的非接觸式通信,雙向數(shù)據(jù)傳輸速率高達(dá)424kbit/s。
作為13.56MHz 高集成度讀寫(xiě)卡系列芯片家族的新成員,MF RC522 與MF RC500和 MF RC530 有不少相似之處,同時(shí)也具備諸多特點(diǎn)和差異。它與主機(jī)間的通信采用連線較少的串行通信,且可根據(jù)不同的用戶需求,選取SPI、I2C 或串行UART(類(lèi)似RS232)模式之一,有利于減少連線,縮小PCB 板體積,降低成本。

?

四、IC卡介紹
非接觸式IC卡又稱(chēng)射頻卡,由IC芯片、感應(yīng)天線組成,封裝在一個(gè)標(biāo)準(zhǔn)的PVC卡片內(nèi),芯片及天線無(wú)任何外露部分。是世界上最近幾年發(fā)展起來(lái)的一項(xiàng)新技術(shù),它成功的將射頻識(shí)別技術(shù)和IC卡技術(shù)結(jié)合起來(lái),結(jié)束了無(wú)源(卡中無(wú)電源)和免接觸這一難題,是電子器件領(lǐng)域的一大突破。卡片在一定距離范圍(通常為5—10cm)靠近讀寫(xiě)器表面,通過(guò)無(wú)線電波的傳遞來(lái)完成數(shù)據(jù)的讀寫(xiě)操作。
射頻讀寫(xiě)器向IC卡發(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á)到2V時(shí),此電容可作為電源為其它電路提供工作電壓,將卡內(nèi)數(shù)據(jù)發(fā)射出去或接受讀寫(xiě)器的數(shù)據(jù)。
非接觸性IC卡與讀卡器之間通過(guò)無(wú)線電波來(lái)完成讀寫(xiě)操作。二者之間的通訊頻率為13.56MHZ。非接觸性IC卡本身是無(wú)源卡,當(dāng)讀寫(xiě)器對(duì)卡進(jìn)行讀寫(xiě)操作時(shí),讀寫(xiě)器發(fā)出的信號(hào)由兩部分疊加組成:一部分是電源信號(hào),該信號(hào)由卡接收后,與本身的L/C產(chǎn)生一個(gè)瞬間能量來(lái)供給芯片工作。另一部分則是指令和數(shù)據(jù)信號(hào),指揮芯片完成數(shù)據(jù)的讀取、修改、儲(chǔ)存等,并返回信號(hào)給讀寫(xiě)器,完成一次讀寫(xiě)操作。讀寫(xiě)器則一般由單片機(jī),專(zhuān)用智能模塊和天線組成,并配有與PC的通訊接口,打印口,I/O口等,以便應(yīng)用于不同的領(lǐng)域。
M1卡詳細(xì)指標(biāo)
M1卡是指M1芯片,是指菲利浦下屬子公司恩智浦出品的芯片縮寫(xiě),全稱(chēng)為NXP Mifare1系列,常用的有S50及S70兩種型號(hào)。
M1(S50)卡詳細(xì)規(guī)格:
- 芯片類(lèi)型:PhilipsMifare1ICS50
- 存儲(chǔ)容量:8Kbit,16個(gè)分區(qū),每分區(qū)兩組密碼;
- 工作頻率:13.56?MHz;
- 通訊速率:106KBoud;
- 讀寫(xiě)距離:2.5~10cm;
- 讀寫(xiě)時(shí)間:1~2ms;
- 工作溫度:-20℃~55℃;
- 擦寫(xiě)壽命:>100,000次;
- 數(shù)據(jù)保存:>10年;
- 外形尺寸:ISO標(biāo)準(zhǔn)卡85.6x54x0.82;
- 封裝材料:PVC、PET、PETG、0.13mm銅線;
Mifare S50和Mifare S70又常被稱(chēng)為Mifare Standard、Mifare Classic、MF1,是遵守ISO14443A標(biāo)準(zhǔn)的卡片中應(yīng)用最為廣、影響力最大的的一員。而Mifare S70的容量是S50的4倍,S50的容量是1K字節(jié),S70的容量為4K字節(jié)。
讀寫(xiě)器對(duì)卡片的操作時(shí)序和操作命令,二者完全一致。 Mifare S50和Mifare S70的每張卡片都有一個(gè)4字節(jié)的全球唯一序列號(hào),卡上數(shù)據(jù)保存期為10年,可改寫(xiě)10萬(wàn)次,讀無(wú)限次。一般的應(yīng)用中,不用考慮卡片是否會(huì)被讀壞寫(xiě)壞的問(wèn)題,
當(dāng)然暴力硬損壞除外。 Mifare S50和Mifare S70的區(qū)別主要有兩個(gè)方面。一是讀寫(xiě)器對(duì)卡片發(fā)出請(qǐng)求命令,二者應(yīng)答返回的卡類(lèi)型(ATQA)字節(jié)不同。Mifare S50的卡類(lèi)型(ATQA)是0004H,Mifare S70的卡類(lèi)型(ATQA)是0002H。另一個(gè)區(qū)別就是二者的容量和內(nèi)存結(jié)構(gòu)不同。
M1卡分為16個(gè)扇區(qū),每個(gè)扇區(qū)由4塊(0、1、2、3)組成。實(shí)際操作時(shí),將16個(gè)扇區(qū)分為64個(gè)塊,按絕對(duì)地址編號(hào)為0-63。
結(jié)構(gòu)如下:

?


?

- 第0個(gè)扇區(qū)用于存放廠商代碼,意見(jiàn)固話,不可更改。
- 每個(gè)扇區(qū)的塊0、塊1、塊2為數(shù)據(jù)塊,可以用于存儲(chǔ)數(shù)據(jù)。數(shù)據(jù)塊可以進(jìn)行讀寫(xiě)操作。
- 每個(gè)扇區(qū)的塊3為控制塊,包括了密碼A、存儲(chǔ)控制、密碼B。具體結(jié)構(gòu)如下:

?

4. 每個(gè)扇區(qū)的密碼和控制位都是獨(dú)立的,可以根據(jù)實(shí)際需求設(shè)定各自的密碼及存取控制。存取控制為4個(gè)字節(jié),共32位,扇區(qū)中的每個(gè)塊(包括數(shù)據(jù)和控制塊)存取條件是由密碼和存取控制共同決定的,在存取控制中每個(gè)塊都有一個(gè)相應(yīng)的三個(gè)控制位。定義如下:

?

Mifare 1 S50 白卡讀寫(xiě)時(shí)一般步驟: 尋卡-->下載塊密碼--> 讀寫(xiě)塊數(shù)據(jù)。控制塊也是一樣。


?


? 數(shù)據(jù)塊的訪問(wèn)權(quán)限設(shè)置表格:(根據(jù)自己需要的權(quán)限,完成上圖字節(jié)6、7、8的填充即可)

?


?

控制塊的讀寫(xiě)權(quán)限設(shè)置:(包含了對(duì)密碼A、控制權(quán)限、密碼的讀寫(xiě)權(quán)限)

?


?

7 6 5 4 3 2 1 0
字節(jié)6 1 1 1 1 1 1 1 1
字節(jié)7 0 0 0 0 1 1 1 1
字節(jié)8 0 0 0 0 0 0 0 0
字節(jié)9
設(shè)置的控制權(quán)限如下:0xFF 0x0F 0x00 0x00
代表數(shù)據(jù)塊的權(quán)限: 驗(yàn)證密碼A或者密碼B都可以對(duì)數(shù)據(jù)塊進(jìn)行讀寫(xiě)操作或者加值鍵值操作。
2. 代表控制塊的權(quán)限
(1) 驗(yàn)證A密碼之后可以寫(xiě)A/B密碼,不能讀密碼。
可以讀控制字節(jié)(4個(gè)),無(wú)法寫(xiě)控制字節(jié)
可以讀寫(xiě)B(tài)密碼
(2) 驗(yàn)證B密碼之后,可以讀寫(xiě)A/B密碼,也可讀控制字節(jié),但無(wú)法寫(xiě)控制字節(jié)。

五、核心代碼
5.1 rc522.c
完整工程源碼下載: https://download.csdn.net/download/xiaolong1126626497/18905806
#include "sys.h"
#include "RFID_RC522.h"
#include "delay.h"
#include "string.h"
#include "usart.h"
/*
函數(shù)功能:移植接口--SPI時(shí)序讀寫(xiě)一個(gè)字節(jié)
函數(shù)參數(shù):data:要寫(xiě)入的數(shù)據(jù)
返 回 值:讀到的數(shù)據(jù)
*/
u8 RC522_SPI_ReadWriteOneByte(u8 tx_data)
{
u8 rx_data=0;
u8 i;
for(i=0;i<8;i++)
{
RC522_SCLK=0;
if(tx_data&0x80){RC522_OUTPUT=1;}
else {RC522_OUTPUT=0;}
tx_data<<=1;
RC522_SCLK=1;
rx_data<<=1;
if(RC522_INPUT)rx_data|=0x01;
}
return rx_data;
}
/*
函數(shù)功能:初始化RC522的IO口
*/
void RC522_IO_Init(void)
{
RCC->APB2ENR|=1<<2; //PA時(shí)鐘使能
RCC->APB2ENR|=1<<7; //PF時(shí)鐘使能
//PA5 時(shí)鐘 RC522_SCLK
//PA6 輸入 RC522_INPUT
//PA7 輸出 RC522_OUTPUT
GPIOA->CRL&=0x000FFFFF;
GPIOA->CRL|=0x38300000;
GPIOA->ODR|=0x3<<5;
//RC522_RST <----->PF1--復(fù)位腳
//RC522_SDA <----->PF0--片選腳
GPIOF->CRL&=0xFFFFFF00;
GPIOF->CRL|=0x00000033;
GPIOF->ODR|=0x3<<0;
}
/*
功能描述:選卡讀取卡存儲(chǔ)器容量
輸入?yún)?shù):serNum 傳入卡序列號(hào)
返 回 值:成功返回卡容量
*/
u8 RC522_MFRC522_SelectTag(u8 *serNum) //讀取卡存儲(chǔ)器容量
{
u8 i;
u8 status;
u8 size;
u8 recvBits;
u8 buffer[9];
buffer[0]=PICC_ANTICOLL1; //防撞碼1
buffer[1]=0x70;
buffer[6]=0x00;
for(i=0;i<4;i++)
{
buffer[i+2]=*(serNum+i); //buffer[2]-buffer[5]為卡序列號(hào)
buffer[6]^=*(serNum+i); //卡校驗(yàn)碼
}
RC522_CalulateCRC(buffer,7,&buffer[7]); //buffer[7]-buffer[8]為RCR校驗(yàn)碼
RC522_ClearBitMask(Status2Reg,0x08);
status=RC522_PcdComMF522(PCD_TRANSCEIVE,buffer,9,buffer,&recvBits);
if((status==MI_OK)&&(recvBits==0x18))
size=buffer[0];
else
size=0;
return size;
}
/*
延時(shí)函數(shù),納秒級(jí)
*/
void RC522_Delay(u32 ns)
{
u32 i;
for(i=0;i
-
射頻
+關(guān)注
關(guān)注
106文章
5749瀏覽量
170276 -
IC卡
+關(guān)注
關(guān)注
2文章
174瀏覽量
35086 -
嵌入式
+關(guān)注
關(guān)注
5148文章
19643瀏覽量
316979 -
NXP
+關(guān)注
關(guān)注
61文章
1344瀏覽量
189107 -
STM32
+關(guān)注
關(guān)注
2293文章
11031瀏覽量
364271
發(fā)布評(píng)論請(qǐng)先 登錄
如何使用MFRC522模塊完成對(duì)IC卡卡號(hào)讀取及數(shù)據(jù)讀寫(xiě)功能呢
STM32+MFRC522完成IC卡號(hào)讀取/密碼修改/數(shù)據(jù)讀寫(xiě)的方法
【技術(shù)精選】嵌入式STM32原創(chuàng)征文活動(dòng)精選文章
RC522 RFID射頻支持哪些卡的讀寫(xiě)?
基于89C51的IC卡讀寫(xiě)器設(shè)計(jì)與實(shí)現(xiàn)
基于PIC單片機(jī)的IC卡讀寫(xiě)器的設(shè)計(jì)
公交非接觸IC卡讀寫(xiě)器的應(yīng)用設(shè)計(jì)
如何在C51單片機(jī)上對(duì)讀寫(xiě)卡芯片MFRC522編程的詳細(xì)資料概述

PC機(jī)與單片機(jī)如何通信程序和IC卡讀寫(xiě)應(yīng)用程序免費(fèi)下載
AT89S8252單片機(jī)實(shí)現(xiàn)接觸式IC卡讀寫(xiě)控制的設(shè)計(jì)

如何使用PIC單片機(jī)實(shí)現(xiàn)IC卡讀寫(xiě)器的設(shè)計(jì)

使用單片機(jī)設(shè)計(jì)IC卡讀寫(xiě)器的資料概述

STM32+MFRC522完成IC卡號(hào)讀取、密碼修改、數(shù)據(jù)讀寫(xiě)

評(píng)論