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