一文读懂基于RC522和S50的RFID开发
基于RC522和S50的RFID開發(fā)
1. ISO14443-A協(xié)議
ISO14443協(xié)議是Contactless card standards(非接觸式IC卡標(biāo)準(zhǔn))協(xié)議,由4個(gè)部分組成:
- 物理特性:規(guī)定了接近式卡(PICC)的物理特性
- 頻譜功率和信號(hào)接口:規(guī)定了再接近式耦合設(shè)備(PCD)和接近式卡(PICC)之間提供功率和雙向通信的場(chǎng)的性質(zhì)與特征
- 初始化和防沖突算法:描述了PICC進(jìn)入PCD工作場(chǎng)的輪詢;在PCD和PICC之間通信的初始階段期間所使用的字節(jié)格式、幀和定時(shí);初始REQ和ATQ命令內(nèi)容;探測(cè)方法和與幾個(gè)卡(防沖突)中的某一個(gè)通信的方法;初始化PICC和PCD之間的通信所需要的其他參數(shù);容易和加速選擇在應(yīng)用準(zhǔn)則基礎(chǔ)上的幾個(gè)卡中的一個(gè)(即最需要處理的一個(gè))的任選方法
- 通訊協(xié)議:規(guī)定了以無觸點(diǎn)環(huán)境中的特殊需要為特色的半雙工傳輸協(xié)議,并定義了協(xié)議的激活和停活序列
ISO14443術(shù)語與縮寫:
– 接近式卡 Proximity card(PICC)
– 接近式耦合設(shè)備 Proximity coupling device(PCD)
– 防沖突環(huán) anticollision loop
– 比特沖突檢測(cè)協(xié)議 bit collision detection protocol
– 沖突 collision
– 幀 frame
– REQA:請(qǐng)求命令,類型A(Request To Command, Type A)
– REQB:請(qǐng)求命令,類型B(Request To Command, Type B)
– ATQA:請(qǐng)求應(yīng)答,類型A(Answer To Request, Type A)
– ATQB:請(qǐng)求應(yīng)答,類型B(Answer To Request, Type B)
– NVB:有效位的數(shù)目(Number of Valid Bits)
1.1 物理特性
PICC應(yīng)具有ISO/IEC 7810中為ID-1型卡規(guī)定的要求相應(yīng)的一般物理特性。還應(yīng)具有相應(yīng)的紫外線、X-射線、動(dòng)態(tài)彎曲應(yīng)力、動(dòng)態(tài)扭曲應(yīng)力、交變磁場(chǎng)、交變電場(chǎng)、靜電、靜態(tài)磁場(chǎng)及工作溫度等附加特性
1.2 頻譜功率和信號(hào)接口
PICC的初始對(duì)話 PCD和PICC之間的初始對(duì)話通過下列連續(xù)操作:
– PCD的RF工作場(chǎng)激活PICC
– PICC靜待來自PCD的命令
– PCD傳輸命令
– PICC傳輸響應(yīng)
這些操作使用下列條款中規(guī)定的射頻功率和信號(hào)接口:
– PCD應(yīng)產(chǎn)生給予能量的RF場(chǎng),為傳送功率,該RF場(chǎng)與PICC進(jìn)行耦合,為了通信,該RF場(chǎng)應(yīng)被調(diào)制。
– RF工作場(chǎng)頻率(fc)應(yīng)為13.56MHz±7kHz
1.3 初始化和防沖突算法
當(dāng)PICC暴露于未調(diào)制的工作場(chǎng)內(nèi),它能在5ms內(nèi)接受一個(gè)請(qǐng)求。為了檢測(cè)進(jìn)入其激勵(lì)場(chǎng)的PICC,PCD發(fā)送重復(fù)的請(qǐng)求命令并尋找ATQ,這個(gè)過程被稱為輪詢
- REQA和WAKE-UP幀:請(qǐng)求和喚醒幀用來初始化通信并按以下次序組成
– 通信開始:7個(gè)數(shù)據(jù)位發(fā)送,LSB首先發(fā)送(標(biāo)準(zhǔn)REQA的數(shù)據(jù)內(nèi)容是0x26,WAKE-UP請(qǐng)求的數(shù)據(jù)內(nèi)容是0x52)
– 通信結(jié)束:不加奇偶校驗(yàn)位
- 標(biāo)準(zhǔn)幀:標(biāo)準(zhǔn)幀用于數(shù)據(jù)交換并按以下次序組成
– 通信開始:n*(8個(gè)數(shù)據(jù)位+奇數(shù)奇偶校驗(yàn)位),n≥1。每個(gè)數(shù)據(jù)字節(jié)的LSB首先被發(fā)送。每個(gè)數(shù)據(jù)字節(jié)后面跟隨一個(gè)奇數(shù)奇偶校驗(yàn)位。
– 通信結(jié)束
- 面向比特的防沖突幀:僅在比特幀防沖突環(huán)期間使用,該幀是帶有7個(gè)數(shù)據(jù)字節(jié)的標(biāo)準(zhǔn)幀,它被分離成兩部分,第一部分用于從PCD到PICC的傳輸,第二部分用于從PICC到PCD的傳輸
- PICC狀態(tài):下圖提供了專門針對(duì)比特沖突檢測(cè)協(xié)議的類型A的PICC狀態(tài)描述
– POWER-OFF狀態(tài):在POWER-OFF狀態(tài)中,由于缺少載波能量,PICC不能被激勵(lì)并且應(yīng)不發(fā)射副載波
– IDLE狀態(tài) :在該狀態(tài)中,PICC被加電,并且能夠解調(diào)和識(shí)別從PCD來的有效REQA和WAKE-UP命令
– READY狀態(tài):一旦收到有效REQA或WAKE-UP報(bào)文則立即進(jìn)入該狀態(tài),用其UID選擇了PICC時(shí)則退出該狀態(tài)。在這種狀態(tài)中,比特幀防沖突或其他任選的防沖突方法都可以使用。所有串聯(lián)級(jí)別都在這一狀態(tài)內(nèi)處理以取得所有UID CLn
– ACTIVE狀態(tài):通過使用其完整UID選擇PICC來進(jìn)入該狀態(tài)
– HALT狀態(tài):在該狀態(tài)中,PICC應(yīng)僅響應(yīng)使PICC轉(zhuǎn)換為READY狀態(tài)的WAKE-UP命令
注: 處于HALT狀態(tài)的PICC將不參與任何進(jìn)一步的通信,除非使用了WAKE-UP命令
- 命令集:PCD用來管理與幾個(gè)PICC通信的命令如下示 ,這些命令使用上面描述的字節(jié)和幀格式
– REQA:由PCD發(fā)出,以探測(cè)用于類型A PICC的工作場(chǎng)(0x26)
– WAKE-UP:由PCD發(fā)出,使已經(jīng)進(jìn)入HALT狀態(tài)的PICC回到READY狀態(tài)(0x52)
– ANTICOLLISION:防碰撞(0x93)
– SELECT:選擇
– HALT:結(jié)束(0x50)
1.4 通訊協(xié)議
ISO/IEC14443的這一部分規(guī)定了非接觸的半雙工的塊傳輸協(xié)議并定義了激活和停止協(xié)議的步驟。這部分傳輸協(xié)議同時(shí)適用于A型卡和B型卡
基于14443-A的操作幀格式
– 請(qǐng)求卡 :0x26
– 喚醒所有卡 :0x52
– 防沖突 :0x93,0x20 得到卡ID
– 選擇卡片 :0x93,0x70, ID1,ID2,ID3,ID4, checksum, CRC16
2. RC522閱讀器
MF RC522 是應(yīng)用于13.56MHz 非接觸式通信中高集成度讀寫卡系列芯片中的一員。是NXP 公司針對(duì)“三表”應(yīng)用推出的一款低 電壓、低成本、體積小的非接觸式讀寫卡芯片,是智能儀表和便攜 式手持設(shè)備研發(fā)的較好選擇
- 支持 ISO 14443A/MIFARE,MFRC522 的內(nèi)部發(fā)送器部分可驅(qū)動(dòng)讀寫器天線與 ISO 14443A/MIFARE卡和應(yīng)答機(jī)的通信,無需其它的電路
- 可實(shí)現(xiàn)各種不同主機(jī)接口的功能:SPI 接口、串行 UART(類似 RS232,電壓電平取決于提供的管腳電壓)、I2C 接口
- 64 字節(jié)的發(fā)送和接收 FIFO 緩沖區(qū)
- 靈活的中斷模式
- 可編程定時(shí)器
- 內(nèi)部振蕩器,連接 27.12MHz 的晶體
RC522的內(nèi)部框圖以及外部功能框圖如下所示:
2.1 RC522寄存器
RC522部分內(nèi)部寄存器組介紹如下:
– CommandReg 啟動(dòng)和停止命令的執(zhí)行
– ComIrqReg 包含中斷請(qǐng)求標(biāo)志
– ErrorReg 錯(cuò)誤標(biāo)志,指示執(zhí)行的上個(gè)命令的錯(cuò)誤狀態(tài)
– Status2Reg 包含接收器和發(fā)送器的狀態(tài)標(biāo)志
– FIFODtataReg 64 字節(jié) FIFO 緩沖區(qū)的輸入和輸出
– FIFOLevelReg 指示 FIFO 中存儲(chǔ)的字節(jié)數(shù)
– ControlReg 不同的控制寄存器
– BitFramingReg 面向位的幀的調(diào)節(jié)
– CollReg RF 接口上檢測(cè)到的第一個(gè)位沖突的位的位置
– ModeReg 定義發(fā)送和接收的常用模式
– TxModeReg 定義發(fā)送過程的數(shù)據(jù)傳輸速率
– TxControlReg 控制天線驅(qū)動(dòng)器管腳 TX1 和 TX2 的邏輯特性
– TModeRegTPrescalerReg定義內(nèi)部定時(shí)器的設(shè)置
2.2 RC522功能
主要介紹SPI數(shù)字接口以及FIFO緩沖區(qū)
- SPI接口:在與主機(jī)微控制器通信時(shí), MFRC522 用作從機(jī)
– 在 SPI 通信中 MFRC522 模塊用作從機(jī)。 SPI 時(shí)鐘 SCK 由主機(jī)產(chǎn)生。數(shù)據(jù)通過 MOSI線從主機(jī)傳輸?shù)綇臋C(jī);數(shù)據(jù)通過 MISO 線從 MFRC522 發(fā)回到主機(jī)
– MOSI 和 MISO 傳輸每個(gè)字節(jié)時(shí)都是高位在前。MOSI 上的數(shù)據(jù)在時(shí)鐘的上升沿保持不變,在時(shí)鐘的下降沿改變。MISO 也與之類似,在時(shí)鐘的下降沿,MISO 上的數(shù)據(jù)由 MFRC522來提供,在時(shí)鐘的上升沿?cái)?shù)據(jù)保持不變
– SPI地址,地址字節(jié)按下面的格式傳輸。第一個(gè)字節(jié)的 MSB 位設(shè)置使用的模式。 MSB 位為 1 時(shí)從 MFRC522 讀出數(shù)據(jù); MSB 位為 0 時(shí)將數(shù)據(jù)寫入 MFRC522。 第一個(gè)字節(jié)的位 6-1 定義地址,最后一位應(yīng)當(dāng)設(shè)置為 0
- FIFO緩沖區(qū):FIFO緩沖區(qū)的輸入和輸出數(shù)據(jù)總線連接到 FIFODataReg 寄存器
– 通過寫FIFODataReg寄存器來將一個(gè)字節(jié)的數(shù)據(jù)存入FIFO緩沖區(qū),之后內(nèi)部FIFO緩沖區(qū)寫指針加 1
– 除了讀寫FIFO緩沖區(qū)外,FIFO緩沖區(qū)指針還可通過置位寄存器FIFOLevelReg的FlushBuffer位來復(fù)位。從而,FIFOLevel位被清零,寄存器ErrorReg的BufferOvfl位被清零,實(shí)際存儲(chǔ)的字節(jié)不能再訪問
– 已經(jīng)存放在 FIFO 緩沖區(qū)中的字節(jié)數(shù):寄存器FIFOLevelReg的FIFOLevel字段
2.3 RC522命令集
FIFO每個(gè)需要數(shù)據(jù)流(或數(shù)據(jù)字節(jié)流)作為輸入的命令在發(fā)現(xiàn)FIFO緩沖區(qū)有數(shù)據(jù)時(shí)會(huì)立刻處理,但收發(fā)命令除外。收發(fā)命令的發(fā)送由寄存器BitFramingReg的StartSend位來啟動(dòng);每個(gè)需要某一數(shù)量的參數(shù)的命令只有在它通過FIFO緩沖區(qū)接收到正確數(shù)量的參數(shù)時(shí)才能開始處理;FIFO緩沖區(qū)不能在命令啟動(dòng)時(shí)自動(dòng)清除。而且,也有可能要先將命令參數(shù)和/或數(shù)據(jù)字節(jié)寫入FIFO緩沖區(qū),再啟動(dòng)命令;每個(gè)命令的執(zhí)行都可能由微控制器向命令寄存器寫入一個(gè)新的命令代碼(如idle命令)來中斷
– IDLE 命令:MFRC522 處于空閑模式。該命令也用來終止實(shí)際正在執(zhí)行的命令
– CALCCRC 命令:FIFO 的內(nèi)容被傳輸?shù)?CRC 協(xié)處理器并執(zhí)行 CRC 計(jì)算這個(gè)命令必須通過向命令寄存器寫入任何一個(gè)命令(如空閑命令)來軟件清除
– TRANSMIT 命令:發(fā)送 FIFO 的內(nèi)容。在發(fā)送 FIFO 的內(nèi)容之前必須對(duì)所有相關(guān)的寄存器進(jìn)行設(shè)置。該命令在 FIFO 變成空后自動(dòng)終止
– RECEIVE 命令:該命令在接收到的數(shù)據(jù)流結(jié)束時(shí)自動(dòng)終止。
– TRANSCEIVE 命令:該循環(huán)命令重復(fù)發(fā)送 FIFO 的數(shù)據(jù),并不斷接收 RF 場(chǎng)的數(shù)據(jù)。第一個(gè)動(dòng)作是發(fā)送,發(fā)送結(jié)束后命令變?yōu)榻邮諗?shù)據(jù)流。
– MFAUTENT 命令:該命令用來處理 Mifare 認(rèn)證以使能到任何 Mifare 普通卡的安全通信。在命令激活前以下數(shù)據(jù)必須被寫入 FIFO: 認(rèn)證命令碼,塊地址,秘鑰,序列號(hào)。該命令在 Mifare 卡被認(rèn)證且 Status2Reg 寄存器的 MFCrypto1On 位置位時(shí)自動(dòng)終止。
– SOFTRESET 命令 :所有寄存器都設(shè)置成復(fù)位值。命令完成后自動(dòng)終止
2.4 基于14443-A命令集
- 尋卡 0x26 或者0x52
尋卡的協(xié)議內(nèi)容:一個(gè)尋卡命令就可以了,接著就可以發(fā)送
返回:2byte卡類型(4,0) - 防沖突 0x93
協(xié)議:防沖突命令 + 0x20
返回:4byte卡ID,1byte校驗(yàn)(異或)(62 A8 2B B EA) - 選卡
協(xié)議:命令字 + 0x70 + 4byte卡號(hào) + 1byte校驗(yàn) + 2byte CRC16校驗(yàn)
返回:卡校驗(yàn)0x08
3. S50電子標(biāo)簽
M1芯片,是指菲利浦下屬子公司恩智浦出品的芯片縮寫,全稱為NXP Mifare1系列,常用的有S50及S70兩種型號(hào),屬于非接觸式IC卡。非接觸式IC卡又稱射頻卡,成功地解決了無源(卡中無電源)和免接觸這一難題,是電子器件領(lǐng)域的一大突破。主要用于公交、輪渡、地鐵的自動(dòng)收費(fèi)系統(tǒng)。M1卡,優(yōu)點(diǎn)是可讀可寫的多功能卡,缺點(diǎn)是:價(jià)格稍貴,感應(yīng)距離短
3.1 S50卡概述
工作原理:向M1卡發(fā)一組固定頻率的電磁波,卡片內(nèi)有一個(gè)LC串聯(lián)諧振電路,其頻率與讀寫器發(fā)射的頻率相同,在電磁波的激勵(lì)下,LC諧振電路產(chǎn)生共振,從而使電容內(nèi)有了電荷,在這個(gè)電容的另一端,接有一個(gè)單向?qū)ǖ碾娮颖?#xff0c;將電容內(nèi)的電荷送到另一個(gè)電容內(nèi)儲(chǔ)存,當(dāng)所積累的電荷達(dá)到2V時(shí),此電容可做為電源為其它電路提供工作電壓,將卡內(nèi)數(shù)據(jù)發(fā)射出去或接取讀寫器的數(shù)據(jù)
3.2 S50卡的結(jié)構(gòu)與操作流程
S50由1KB的EEPROM、RF接口和數(shù)字式控制單元組成。能量和數(shù)據(jù)都通過天線傳送,天線由幾匝線圈組成并直接連到S50卡上,不需要其他外部元件
操作流程如下表所示:
3.3 S50卡存儲(chǔ)器結(jié)構(gòu)
1024*8位的EEPROM存儲(chǔ)器被分成16個(gè)區(qū),每個(gè)區(qū)中有4個(gè)段,每段有16字節(jié)。在擦除狀態(tài)時(shí),讀EEPROM單元的值是邏輯“0”;在寫狀態(tài)時(shí),讀EEPROM單元的值是邏輯“1”
- 廠商段:廠商段是存儲(chǔ)器第一個(gè)區(qū)的第一個(gè)數(shù)據(jù)段(段 0),它包含了 IC 卡廠商的數(shù)據(jù),基于保密性和系統(tǒng)的安全性,這一段在IC卡廠商編程之后被置為寫保護(hù)
- 數(shù)據(jù)段:所有的區(qū)都包含3個(gè)段(每段16字節(jié))保存數(shù)據(jù)(區(qū)0只有兩個(gè)數(shù)據(jù)段和一個(gè)只讀的廠商段),數(shù)據(jù)段可以被以下的訪問位(access bits)配置:
– 讀/寫段,用于譬如無線訪問控制
– 值段,用于譬如電子錢包 它需要額外的命令 像直接控制保存值的增加和減少
在執(zhí)行任何存儲(chǔ)器操作前都要先執(zhí)行確認(rèn)命令
- 值段:值段可以實(shí)現(xiàn)電子錢包的功能(有效的命令有:讀、寫、增、減、恢復(fù)、發(fā)送);值段有一個(gè)固定的數(shù)據(jù)格式,可以進(jìn)行錯(cuò)誤檢測(cè)和糾正并備份管理;值段只能在值段格式的寫操作時(shí)產(chǎn)生
– 值:表示一個(gè)帶符號(hào) 4 字節(jié)值 這個(gè)值的最低一個(gè)字節(jié)保存在最低的地址中 取反的字節(jié)以標(biāo)準(zhǔn)2 的格式保存 為了保證數(shù)據(jù)的正確性和保密性 值被保存了 3 次 兩次不取反保存 一次取反保存
– Adr:表示一個(gè) 1 字節(jié)地址 當(dāng)執(zhí)行強(qiáng)大的備份管理時(shí)用于保存存儲(chǔ)段的地址 地址字節(jié)保存了 4次 取反和不取反各保存兩次 在執(zhí)行增 減 恢復(fù) 傳送操作時(shí) 地址保持不變 它只能通過寫命令改變
- 區(qū)尾:每個(gè)區(qū)都有一個(gè)區(qū)尾,它包括:
– 密鑰A和B(可選),讀密鑰時(shí)返回邏輯 0
– 訪問這個(gè)區(qū)中4個(gè)段的條件(保存在第6字節(jié) ~ 第9字節(jié)) 訪問位(access bits)也可以指出數(shù)據(jù)段的類型(讀/寫或值)
如果不需要密鑰 B,那么段3的最后6字節(jié)可以作為數(shù)據(jù)字節(jié)
用戶數(shù)據(jù)可以使用區(qū)尾的第9字節(jié),這個(gè)字節(jié)具有和字節(jié)6、7和8一樣的訪問權(quán)
3.4 S50卡控制字
每個(gè)數(shù)據(jù)段和區(qū)尾的訪問條件由3個(gè)位來定義,它們以取反和不取反的形式保存在指定區(qū)的區(qū)尾。訪問位控制了使用密鑰A和B訪問存儲(chǔ)器的權(quán)力。當(dāng)知道相關(guān)的密鑰和當(dāng)前的訪問條件時(shí),可以修改訪問條件
– 每個(gè)字節(jié)的bit7控制block3,Bit6控制block2,Bit5控制block1
– Bit4控制block0,Bit3 ~ 0其實(shí)就是bit7 ~ 4取反的結(jié)果
– Block3出廠默認(rèn) ff ff ff ff ff ff ff 07 80 69 ff ff ff ff ff ff
- 區(qū)尾的訪問條件:區(qū)尾(段3)的訪問位,密鑰和訪問位的讀寫訪問可分為“從不”,“密鑰A”,“密鑰B”或“密鑰A|B”(A或B),在片給區(qū)尾和密鑰A傳送訪問條件被預(yù)定義為傳送配置。由于密鑰B可以在傳輸配置中被讀出,新的卡要用密鑰A確認(rèn)
下表中用灰色標(biāo)明的行是密鑰B可被讀的訪問條件,此時(shí)密鑰B可以存放數(shù)據(jù)
- 數(shù)據(jù)段的訪問條件:數(shù)據(jù)段(段0 ~ 2)的訪問位,讀/寫訪問可分為“從不”,“密鑰A”,“密鑰B”或“密鑰A|B”(A或B),相關(guān)訪問位的設(shè)置定義了應(yīng)用以及相應(yīng)的應(yīng)用命令
3.5 讀寫卡
- S50讀卡命令:
– 請(qǐng)求 0x26
– 防沖突 0x93,0x70
– A認(rèn)證 0x60,addr,keyA, ID
– 讀0x30,addr CRC16
- S50寫卡命令:
– 請(qǐng)求 0x26
– 防沖突 0x93,0x70
– A認(rèn)證 0x60,addr,keyA, ID
– 寫0xA0,addr ,CRC16
– 16bytes,CRC16
4. 基于RC522和S50的FRID開發(fā)實(shí)例
本實(shí)例使用STM32F103開發(fā)板與RC522連接,通過串口將讀取出的S50卡信息打印出來,通過按鍵控制將相關(guān)信息寫入到S50卡
4.1 硬件連接
本實(shí)例使用到了蜂鳴器(PB5)、按鍵(PA0/PE2/PE3/PE4)和LED燈(PC0),RC522除了要接入3.3V供電和GND外,還需要接以下四根線:
/*引腳說明*/: STM32 PB15(MISO) <--- RC522(MOSI) STM32 PB14(MOSI) ---> RC522(MISO) STM32 PB13(CLK) ---> RC522(SCK) STM32 PB12(CSS) ---> RC522(SDA)4.2 軟件編程
- 創(chuàng)建蜂鳴器(beep.c)和按鍵驅(qū)動(dòng)文件(key.c)以及相關(guān)頭文件
- 創(chuàng)建RC522驅(qū)動(dòng)文件RC522.c和RC522.h,下面給出頭文件里的各函數(shù)聲明,具體的函數(shù)實(shí)現(xiàn),可在文末下載源碼查看
- 在main函數(shù)中添加讀M1卡函數(shù)
4.3 下載驗(yàn)證
編譯無誤下載到開發(fā)板,打開串口調(diào)試助手后,調(diào)用RFID_Read_Data(0) 時(shí),讀取M1卡塊0的數(shù)據(jù),即廠商段,包含了M1卡的序列號(hào)即廠商數(shù)據(jù);調(diào)用RFID_Read_Data(3) 時(shí),讀取M1卡塊3的數(shù)據(jù),即區(qū)尾,包含A/B密鑰以及訪問控制位,該段出廠默認(rèn)為:ff ff ff ff ff ff ff 07 80 69 ff ff ff ff ff ff
關(guān)注我的公眾號(hào),在公眾號(hào)里發(fā)如下消息,即可獲取相應(yīng)的工程源代碼:
基于RC522和S50的RFID開發(fā)實(shí)例
總結(jié)
以上是生活随笔為你收集整理的一文读懂基于RC522和S50的RFID开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。