0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

IC卡讀寫系統(tǒng)的單片機(jī)實現(xiàn) STM32+MFRC522實現(xiàn)IC卡讀寫

1126626497 ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-03-01 10:40 ? 次閱讀

?

一、環(huán)境介紹

MCU:STM32F103ZET6

開發(fā)軟件:Keil5

非接觸式讀寫卡模塊: MFRC522

二、功能介紹

使用MFRC522模塊完成對IC卡卡號讀取、卡類型區(qū)分、IC卡扇區(qū)密碼修改、扇區(qū)數(shù)據(jù)讀寫等功能;底層采用SPI模擬時序,可以很方便的移植到其他設(shè)備,完成項目開發(fā)。 現(xiàn)在很多嵌入式方向的畢業(yè)設(shè)計經(jīng)常使用到該模塊,比如: 校園一卡通設(shè)計、水卡充值消費(fèi)設(shè)計、公交卡充值消費(fèi)設(shè)計等。

三、MFR522介紹

MF RC522 是應(yīng)用于13.56MHz 非接觸式通信中高集成度讀寫卡系列芯片中的一員。是NXP 公司針對“三表”應(yīng)用推出的一款低電壓、低成本、體積小的非接觸式讀寫卡芯片,是智能儀表和便攜式手持設(shè)備研發(fā)的較好選擇。

MF RC522 利用了先進(jìn)的調(diào)制和解調(diào)概念,完全集成了在13.56MHz 下所有類型的被動非接觸式通信方式和協(xié)議。支持 ISO14443A 的多層應(yīng)用。其內(nèi)部發(fā)送器部分可驅(qū)動讀寫器天線與ISO 14443A/MIFARE卡和應(yīng)答機(jī)的通信,無需其它的電路。接收器部分提供一個堅固而有效的解調(diào)和解碼電路,用于處理ISO14443A 兼容的應(yīng)答器信號。數(shù)字部分處理ISO14443A 幀和錯誤檢測(奇偶 &CRC)。此外,它還支持快速CRYPTO1 加密算法,用于驗證MIFARE 系列產(chǎn)品。MFRC522 支持MIFARE?更高速的非接觸式通信,雙向數(shù)據(jù)傳輸速率高達(dá)424kbit/s。

作為13.56MHz 高集成度讀寫卡系列芯片家族的新成員,MF RC522 與MF RC500和 MF RC530 有不少相似之處,同時也具備諸多特點(diǎn)和差異。它與主機(jī)間的通信采用連線較少的串行通信,且可根據(jù)不同的用戶需求,選取SPI、I2C 或串行UART(類似RS232)模式之一,有利于減少連線,縮小PCB 板體積,降低成本。

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

四、IC卡介紹

非接觸式IC卡又稱射頻卡,由IC芯片、感應(yīng)天線組成,封裝在一個標(biāo)準(zhǔn)的PVC卡片內(nèi),芯片及天線無任何外露部分。是世界上最近幾年發(fā)展起來的一項新技術(shù),它成功的將射頻識別技術(shù)和IC卡技術(shù)結(jié)合起來,結(jié)束了無源(卡中無電源)和免接觸這一難題,是電子器件領(lǐng)域的一大突破??ㄆ谝欢ň嚯x范圍(通常為5—10cm)靠近讀寫器表面,通過無線電波的傳遞來完成數(shù)據(jù)的讀寫操作。

射頻讀寫器向IC卡發(fā)一組固定頻率的電磁波,卡片內(nèi)有一個LC串聯(lián)諧振電路,其頻率與讀寫器發(fā)射的頻率相同,這樣在電磁波激勵下,LC諧振電路產(chǎn)生共振,從而使電容內(nèi)有了電荷;在這個電荷的另一端,接有一個單向?qū)ǖ碾娮颖?,將電容?nèi)的電荷送到另一個電容內(nèi)存儲,當(dāng)所積累的電荷達(dá)到2V時,此電容可作為電源為其它電路提供工作電壓,將卡內(nèi)數(shù)據(jù)發(fā)射出去或接受讀寫器的數(shù)據(jù)。

非接觸性IC卡與讀卡器之間通過無線電波來完成讀寫操作。二者之間的通訊頻率為13.56MHZ。非接觸性IC卡本身是無源卡,當(dāng)讀寫器對卡進(jìn)行讀寫操作時,讀寫器發(fā)出的信號由兩部分疊加組成:一部分是電源信號,該信號由卡接收后,與本身的L/C產(chǎn)生一個瞬間能量來供給芯片工作。另一部分則是指令和數(shù)據(jù)信號,指揮芯片完成數(shù)據(jù)的讀取、修改、儲存等,并返回信號給讀寫器,完成一次讀寫操作。讀寫器則一般由單片機(jī),專用智能模塊和天線組成,并配有與PC的通訊接口,打印口,I/O口等,以便應(yīng)用于不同的領(lǐng)域。

M1卡詳細(xì)指標(biāo)

M1卡是指M1芯片,是指菲利浦下屬子公司恩智浦出品的芯片縮寫,全稱為NXP Mifare1系列,常用的有S50及S70兩種型號。

M1(S50)卡詳細(xì)規(guī)格

  1. 芯片類型:PhilipsMifare1ICS50
  2. 存儲容量:8Kbit,16個分區(qū),每分區(qū)兩組密碼;
  3. 工作頻率:13.56?MHz;
  4. 通訊速率:106KBoud;
  5. 讀寫距離:2.5~10cm;
  6. 讀寫時間:1~2ms;
  7. 工作溫度:-20℃~55℃;
  8. 擦寫壽命:>100,000次;
  9. 數(shù)據(jù)保存:>10年;
  10. 外形尺寸:ISO標(biāo)準(zhǔn)卡85.6x54x0.82;
  11. 封裝材料:PVC、PET、PETG、0.13mm銅線;

Mifare S50和Mifare S70又常被稱為Mifare Standard、Mifare Classic、MF1,是遵守ISO14443A標(biāo)準(zhǔn)的卡片中應(yīng)用最為廣、影響力最大的的一員。而Mifare S70的容量是S50的4倍,S50的容量是1K字節(jié),S70的容量為4K字節(jié)。

讀寫器對卡片的操作時序和操作命令,二者完全一致。 Mifare S50和Mifare S70的每張卡片都有一個4字節(jié)的全球唯一序列號,卡上數(shù)據(jù)保存期為10年,可改寫10萬次,讀無限次。一般的應(yīng)用中,不用考慮卡片是否會被讀壞寫壞的問題,

當(dāng)然暴力硬損壞除外。 Mifare S50和Mifare S70的區(qū)別主要有兩個方面。一是讀寫器對卡片發(fā)出請求命令,二者應(yīng)答返回的卡類型(ATQA)字節(jié)不同。Mifare S50的卡類型(ATQA)是0004H,Mifare S70的卡類型(ATQA)是0002H。另一個區(qū)別就是二者的容量和內(nèi)存結(jié)構(gòu)不同。

M1卡分為16個扇區(qū),每個扇區(qū)由4塊(0、1、2、3)組成。實際操作時,將16個扇區(qū)分為64個塊,按絕對地址編號為0-63。

結(jié)構(gòu)如下:

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

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

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

Mifare 1 S50 白卡讀寫時一般步驟: 尋卡-->下載塊密碼--> 讀寫塊數(shù)據(jù)??刂茐K也是一樣。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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)限: 驗證密碼A或者密碼B都可以對數(shù)據(jù)塊進(jìn)行讀寫操作或者加值鍵值操作。

2. 代表控制塊的權(quán)限

(1) 驗證A密碼之后可以寫A/B密碼,不能讀密碼。

可以讀控制字節(jié)(4個),無法寫控制字節(jié)

可以讀寫B(tài)密碼

(2) 驗證B密碼之后,可以讀寫A/B密碼,也可讀控制字節(jié),但無法寫控制字節(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時序讀寫一個字節(jié)
函數(shù)參數(shù):data:要寫入的數(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時鐘使能 
	RCC->APB2ENR|=1<<7;     //PF時鐘使能
	
	//PA5  時鐘 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;
}	


/*
功能描述:選卡讀取卡存儲器容量
輸入?yún)?shù):serNum 傳入卡序列號
返 回 值:成功返回卡容量
*/
u8 RC522_MFRC522_SelectTag(u8 *serNum) //讀取卡存儲器容量
{     
	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]為卡序列號
		buffer[6]^=*(serNum+i);	  //卡校驗碼
	}
	
	RC522_CalulateCRC(buffer,7,&buffer[7]);	//buffer[7]-buffer[8]為RCR校驗碼
	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ù),納秒級
*/
void RC522_Delay(u32 ns)
{
  u32 i;
  for(i=0;i
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 射頻
    +關(guān)注

    關(guān)注

    102

    文章

    5471

    瀏覽量

    166937
  • IC卡
    +關(guān)注

    關(guān)注

    2

    文章

    162

    瀏覽量

    34015
  • 嵌入式
    +關(guān)注

    關(guān)注

    5045

    文章

    18817

    瀏覽量

    298499
  • NXP
    NXP
    +關(guān)注

    關(guān)注

    60

    文章

    1243

    瀏覽量

    181485
  • STM32
    +關(guān)注

    關(guān)注

    2257

    文章

    10828

    瀏覽量

    352468
收藏 人收藏

    評論

    相關(guān)推薦

    如何使用MFRC522模塊完成對IC卡號讀取及數(shù)據(jù)讀寫功能呢

    MFRC522是什么?非接觸式IC又是什么?如何使用MFRC522模塊完成對IC卡號讀取及數(shù)
    發(fā)表于 12-10 06:32

    STM32+MFRC522完成IC卡號讀取/密碼修改/數(shù)據(jù)讀寫的方法

    一、環(huán)境介紹MCU:STM32F103ZET6開發(fā)軟件:Keil5非接觸式讀寫模塊: MFRC522完整工程源碼下載:https://download.csdn.net/downlo
    發(fā)表于 02-08 07:23

    【技術(shù)精選】嵌入式STM32原創(chuàng)征文活動精選文章

    + HC05串口藍(lán)牙設(shè)計簡易的藍(lán)牙音箱基于STM32的WEB服務(wù)器設(shè)計IC讀寫系統(tǒng)單片機(jī)
    發(fā)表于 07-27 18:26

    RC522 RFID射頻支持哪些讀寫

    MFRC-522 RC522RFID射頻支持哪些類型讀寫?對IC有什么要求.
    發(fā)表于 10-24 07:42

    基于89C51的IC讀寫器設(shè)計與實現(xiàn)

    本文主要介紹了一種新型的 IC 讀寫終端的設(shè)計,IC 讀寫終端是一個
    發(fā)表于 08-24 11:25 ?206次下載

    基于PIC單片機(jī)IC讀寫器的設(shè)計

    摘要:本文介紹了以PIC16C74單片機(jī)為核心的IC讀寫器的系統(tǒng)設(shè)計,系統(tǒng)
    發(fā)表于 12-22 21:52 ?216次下載

    公交非接觸IC讀寫器的應(yīng)用設(shè)計

    公交非接觸IC讀寫器的應(yīng)用設(shè)計 采用PHILIPS公司的MifareIC,設(shè)計以射頻技
    發(fā)表于 01-13 10:07 ?2120次閱讀

    IC讀寫仿真

    IC讀寫仿真IC讀寫仿真IC
    發(fā)表于 11-10 16:49 ?5次下載

    如何在C51單片機(jī)上對讀寫芯片MFRC522編程的詳細(xì)資料概述

    在整個的射頻識別系統(tǒng)中。 讀寫模塊負(fù)責(zé)建立單片機(jī)與電子標(biāo)簽之間的通信,起著非常重要的作用。 而整個讀寫
    發(fā)表于 08-08 08:00 ?39次下載
    如何在C51<b class='flag-5'>單片機(jī)</b>上對<b class='flag-5'>讀寫</b><b class='flag-5'>卡</b>芯片<b class='flag-5'>MFRC522</b>編程的詳細(xì)資料概述

    PC機(jī)單片機(jī)如何通信程序和IC讀寫應(yīng)用程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是PC機(jī)單片機(jī)如何通信程序和IC讀寫應(yīng)用程序免費(fèi)下載。
    發(fā)表于 10-25 08:00 ?9次下載

    AT89S8252單片機(jī)實現(xiàn)接觸式IC讀寫控制的設(shè)計

    1、 AT89S8252單片機(jī)芯片,此芯片具有SPI接口,可以用來讀寫IC芯片。 2、 使用與SPI接口兼容的串行數(shù)據(jù)接口的IC
    發(fā)表于 08-19 14:54 ?1976次閱讀
    AT89S8252<b class='flag-5'>單片機(jī)</b><b class='flag-5'>實現(xiàn)</b>接觸式<b class='flag-5'>IC</b><b class='flag-5'>卡</b><b class='flag-5'>讀寫</b>控制的設(shè)計

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

    本文介紹了以 PIC16C74 單片機(jī)為核心的 IC 讀寫器的系統(tǒng)設(shè)計,系統(tǒng)
    發(fā)表于 01-02 08:00 ?1次下載
    如何使用PIC<b class='flag-5'>單片機(jī)</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>IC</b><b class='flag-5'>卡</b><b class='flag-5'>讀寫</b>器的設(shè)計

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

    本文對AT24系列存貯器和AT89系列單片機(jī)的特征及總線狀態(tài)作為介紹,并以AT24C01與AT89C2051為例詳細(xì)描述了通用存貯器IC的工作原理及用單片機(jī)進(jìn)行
    的頭像 發(fā)表于 07-04 12:09 ?3793次閱讀
    使用<b class='flag-5'>單片機(jī)</b>設(shè)計<b class='flag-5'>IC</b><b class='flag-5'>卡</b><b class='flag-5'>讀寫</b>器的資料概述

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

    STM32+MFRC522完成IC卡號讀取、密碼修改、數(shù)據(jù)讀寫
    發(fā)表于 12-04 19:36 ?59次下載
    <b class='flag-5'>STM32+MFRC522</b>完成<b class='flag-5'>IC</b>卡號讀取、密碼修改、數(shù)據(jù)<b class='flag-5'>讀寫</b>

    基于單片機(jī)IC讀寫Proteus仿真設(shè)計

    基于單片機(jī)IC讀寫Proteus仿真設(shè)計資料包含仿真及源程序
    發(fā)表于 04-20 15:36 ?17次下載