cataloguephp
0. 引言 1. RC522芯片(讀卡器)簡介 2. FM1702SL芯片(讀卡器)簡介 3. RFID M1卡簡介 4. 讀取ID/序列號(arduino uno、MFRC522芯片 Based On MF522-AN模塊) 5. 讀取ID/序列號(arduino uno、FM1702SL) 6. arduino uno、RC522向mifare卡寫入數據
0. 引言html
須要明白的一點是,一張卡可否hack取決於如下幾點算法
1. 卡自己的硬件結構和內部實現: 例如若是一張卡的電路設置了只讀邏輯,且沒有EPPROM這種存儲結構,則這張卡就只能被讀取數據(數據泄漏),可是若是一張卡具有可檫寫EPPROM, 且內部具有read/write邏輯電路,則咱們能夠嘗試向指定的扇區寫入新數據,以此達到僞造卡的目的 2. 卡的類型: 不一樣的卡類型對應了不一樣的通訊頻率、通訊方式,市面上能買到的RFID讀卡器型號是有限的,若是咱們要hack的那張卡超出了咱們的讀卡器的支持範圍,則 讀卡器的API也沒法正常工做,由於對RFID卡的hack並非直接修改卡自己的物理特性,而是經過卡內置的微性單片機電驢對卡中的存儲區域進行操做
1. RC522芯片(讀卡器)簡介編程
MF RC522是應用於13.56MHz非接觸式通訊中高集成度的讀寫卡芯片,是NXP公司針對「三表」應用推出的一款低電壓、低成本、體積小的非接觸式讀寫卡芯片,是智能儀表和便攜式手持設備研發的較好選擇。 MF RC522利用了先進的調製和解調概念,徹底集成了在13.56MHz下全部類型的被動非接觸式通訊方式和協議。支持14443A兼容應答器信號。數字部分處理ISO14443A幀和錯誤檢測。此外,還支持快速CRYPTO1加密算法,用語驗證MIFARE系列產品。MFRC522支持MIFARE系列更高速的非接觸式通訊,雙向數據傳輸速率高達424kbit/s。 做爲13.56MHz高集成度讀寫卡系列芯片家族的新成員,MF RC522與MF RC500和MF RC530有很多類似之處,同時也具有許多特色和差別。它與主機間通訊採用SPI模式,有利於減小連線,縮小PCB板體積,下降成本數組
NXP RC522微控制器是該單片機的核心
MF522-AN模塊採用Philips MFRC522原裝芯片設計讀卡電路,使用方便,成本低廉,適用於設備開發、讀卡器開發等高級應用的用戶、須要進行射頻卡終端設計/生產的用戶。本模塊可 直接裝入各類讀卡器模具。模塊採用電壓爲3.3V,經過SPI接口簡單的幾條線就能夠直接與用戶任何CPU主板相鏈接通訊,能夠保證模塊穩定可靠的工做、 讀卡距離遠安全
0x1: 電氣參數簡介架構
工做電流: 13—26mA/直流3.3V 空閒電流: 10-13mA/直流3.3V 休眠電流: <80uA 峯值電流: <30mA 工做頻率: 13.56MHz 支持的卡類型 1. mifare1 S50 2. mifare1 S70 3. mifare UltraLight 4. mifare Pro 5. mifare Desfire 產品物理特性: 尺寸: 40mm×60mm 環境工做溫度: 攝氏-20~80度 環境儲存溫度: 攝氏-40~85度 環境相對溼度: 相對溼度5%~95%
0x2: 模塊原理圖併發
0x3: MFRC522數據手冊less
MFRC522 是一個用來讀寫/操做RFID卡的外接模組,咱們對卡的全部的操做,都必須藉助MFRC522封裝並向外提供的API接口進行,MFRC522做爲 RFID讀卡器,須要將上位機發送的二進制數據封裝爲指定格式(相似TCP/IP的封裝),同時也要解析來自RFID卡發送的封裝好的數據,這個過程對 RFID卡來講也是同樣的
oop
the MFRC522 is a highly intergrated reader/writer for contactless communication at 13.56MHz. the MFRC522 reader supports ISO 14443A/MIFARE Mode,這意味着它能夠操做兩種制式類型的卡
1. Features
1. Highly integrated analog circuity to demodulate and decode response 2. Bufferd output drivers to connect an antenna with minimum number of external components 3. Supports ISO/IEC 14443A/MIFARE 4. Typical operating distance in Reader/Writer mode for communication to a ISO/IEC 14443A/MIFARE up to 50 mm depending on the antenna size and turning 5. Supports MIFARE Classic encryption in Reader/Writer mode 6. Supports of the MFIN/MFOUT 7. Additional power supply to directly supply the smart card IC connected via MFIN/MFOUT 8. Supports host interfaces 1) SPI interface up to 10Mbit/s 2) I2C interface up to 400kbit/s in Fast mode, up to 3400 kbit/s in High-speed mode 3) serial UART in different transfer speeds up to 1228.8 kbit/s, framing according to the RS232 interface with voltage levels according pad voltage supply 9. Comfortable 64 byte send and receive FIFO-buffer 10. Flexible interrupt modes 11. Hard reset with low power function 12. Power-down mode per software 13. Programmable timer 14. internal oscillator to connect 27.12 MHz quartz 15. 2.5 ~ 3.3V power supply 16. CRC Co-processor 17. Free programmable I/O pins 18. internal self test
2. Block diagram(封包協議)
Block diagram相似於TCP/IP協議棧中的數據鏈路層,上層的RFID標籤數據通過硬件層的封裝以後,造成1/0 bit流,經過DA轉換器造成模擬射頻波信號,經過空氣介質在標籤和閱讀器之間傳播
1. the analog interface handles the modulation and demodulation of the analog signals 2. the contactless UART handles the protocol requirements for the communication schemes in co-operation with the host. the comfortable FIFO buffer allows a fast and convenient data transfer from the host to the contactless UART and vice versa 3. various host interfaces are implemented to fulfill different customer requirements
RFID標籤產生的電感信號是一種模擬信號,由於標籤和閱讀器之間是無鏈接的,數據的傳輸必須依靠射頻波從空氣中傳播,所以必須是一連串的模擬波信號,在到達閱讀器以前必須經過AD轉換爲數字信號
3. Functional description
MFRC522 transmission module supports the Reader/Writer mode for ISO/IEC 1444三、MIFARE with different transfer speeds and modulation schemes
the contactless UART of MFRC522 and a dedicated external host are required to handle the complete MIFARE、ISO/IEC 14443A、MIFARE protocol
the internal CRC co-processor calculates the CRC value according the definition given in the ISO/IEC 14443A
4. MFRC522 Register SET
//Page 0:Command and Status Reserved00: Reserved for future use CommandReg: Starts and stops commands execution CommIEnReg: Controls bits to enable and disable the passing of interrupt Requests DivlEnReg: Controls bits to enable and disable the passing of interrupt Requests CommIrqReg: Contains interrupt Request bits DivIrqReg: Contains interrupt Request bits ErrorReg: Error bits showing the error status of the last command executed Status1Reg: Contains status bits for communication Status2Reg: Contains status bits of the receiver and transmitter FIFODataReg: in and output of 64 byte FIFO buffer FIFOLevelReg: indicates the number of bytes stored in the FIFO WaterLevelReg: Defines the level for FIFO under and overflow warning ControlReg: Contains miscellaneous Control Registers BitFramingReg: Adjustments for bit oriented frames CollReg: Bit position of the first bit collision detected on the RF-interface Reserved01: Reserved for future use //Page 1:Command Reserved10: Reserved for future use ModeReg: Defined general modes for transmitting and receiving TxModeReg: Defines the transmission data rate and framing RxModeReg: Defines the receive data rate and framing TxControlReg: Control the logical behavior of the antenna driver pins TX1 and TX2 TxAutoReg TxSelReg: Selects the internal sources for the antenna driver RxSelReg: Selects internal receiver setttings RxThresholdReg: Selects threadholds for the bit decoder DemodReg: Defines demodulator settings Reserved11: Reserved for future use Reserved12: Reserved for future use MifareReg Reserved13: Reserved for future use Reserved14: Reserved for future use SerialSpeedReg: Selects the speed of the serial UART interface //Page 2:CFG Reserved20: Reserved for future use CRCResultRegM: Shows the actual MSB values of the CRC calcalation CRCResultRegL: Shows the actual LSB values of the CRC calcalation Reserved21: Reserved for future use ModWidthReg: Controls the settting of the ModWidth Reserved22: Reserved for future use RFCfgReg: Configures the receiver gain GsNReg: Selects the conductance of the antenna driver pins TX1 and TX2 for modulation CWGsPReg ModGsPReg TModeReg: Defines settings for the internal timer TPrescalerReg TReloadRegH: Describes the 16 bit timer reload value TReloadRegL TCounterValueRegH: Shows the 16 bit actual timer value TCounterValueRegL //Page 3:TestRegister Reserved30: Reserved for future use #define TestSel1Reg 0x31 #define TestSel2Reg 0x32 #define TestPinEnReg 0x33 #define TestPinValueReg 0x34 #define TestBusReg 0x35 #define AutoTestReg 0x36 #define VersionReg 0x37 #define AnalogTestReg 0x38 #define TestDAC1Reg 0x39 #define TestDAC2Reg 0x3A #define TestADCReg 0x3B #define Reserved31 0x3C #define Reserved32 0x3D #define Reserved33 0x3E #define Reserved34 0x3F
5. DIGITAL Interfaces
SPI Compatible interface
A serial peripheral interface(SPI compatible)is supported to enable high speed communication to the host. the SPI interface can handle data speed of up to 10Mbit/s, in the communication with a host MFRC522 acts as a slave receiving data from the external host(能夠是arduino uno)for register settings and to send and receive data relevant for the communication on the RF interface
UART Interface
the internal UART interface is compatible to an RS232 serial interface
I2C Bus interface
I2C(Inter-Integrated Circuit)總線是由PHILIPS公司開發的兩線式串行總線,用於鏈接微控制器及其外圍設備。是微電子通訊控制領域普遍採用的一種總線標準。它是同 步通訊的一種特殊形式,具備接口線少,控制方式簡單,器件封裝形式小,通訊速率較高等優勢。I2C 總線支持任何IC 生產過程(CMOS、雙極性)。經過串行數據(SDA)線和串行時鐘 (SCL)線在鏈接到總線的器件間傳遞信息。每一個器件都有一個惟一的地址識別(不管是微控制器——MCU、LCD 驅動器、存儲器或鍵盤接口),並且均可以做爲一個發送器或接收器(由器件的功能決定)。LCD 驅動器只能做爲接收器,而存儲器則既能夠接收又能夠發送數據。除了發送器和接收器外,器件在執行數據傳輸時也能夠被看做是主機或從機(見表1)。主機是初 始化總線的數據傳輸併產生容許傳輸的時鐘信號的器件。此時,任何被尋址的器件都被認爲是從機
6. MFRC522 Command Set
the behavior is determined by a state machine capable to perform a certain set of commands, by writing the according command-code to register CommandReg the command is executed
Arguments and/or data necessary to process a command are exchanged via the FIFO buffer
上位機(能夠是arduino uno)經過MFRC522預設的指令集來間接的操做RFID射頻卡(讀寫指定扇區數據)
1. each command, that needs a data stream(or data byte stream) as input will immediately process the data it finds in the FIFO buffer 2. each command that needs a certain number of arguments will start processing only when it has received the correct number of arguments via the FIFO buffer 3. the FIFO buffer is not cleared automatically at command start, therefore, it is also possible to write the command arguments and/or the data bytes into the FIFO buffer and start the command afterwards 4. each command may be interrupted by the host by writing a new command code into register CommandReg
MFRC522 Commands Overview
MFRC522的指令都是雙字節的,即咱們要操做MFRC522就須要按照必定的時序向它發送一系列的雙字節指令碼,爲了方便編程,咱們封裝了一些程序庫
//MF522 command bits #define PCD_IDLE 0x00 //NO action; cancel current commands #define PCD_AUTHENT 0x0E //verify password key #define PCD_RECEIVE 0x08 //receive data #define PCD_TRANSMIT 0x04 //send data #define PCD_TRANSCEIVE 0x0C //send and receive data #define PCD_RESETPHASE 0x0F //reset #define PCD_CALCCRC 0x03 //CRC check and caculation
arduino向MFRC522發送指令本質上就是arduino向MFRC522的指令寄存器寫入2字節的指令,等待MFRC522讀取並執行、響應
Authentication 認證操做
1. MCM中設有專用的密碼存儲器(KEY-RAM),用於存儲3個密碼集KEYSET0,KEYSET1,KEYSET2,每個KEYSET又包含了各個扇區的KEY A 及KEY B 2. Authentication操做就是將KEY-RAM中的密碼與卡中對應的密碼進行三次相互認證 3. Authentication操做的卡應答以AE位給出 1) AE=1: 密碼出錯,未能經過認證 2) AE=0: 密碼正確,經過認證
READ/WRITE操做
1. READ/WRITE均需整塊操做 2. READ 1) 發送命令碼30H+塊地址(0~63) 2) 接收指定塊的數據(16B) 3) 一般用2次讀並比較是否一致來校驗是否正確讀 3. WRITE 1) 發送命令碼A0H+塊地址(0~63) 2) 接收ACK/NAK應答來校驗是否正確接收命令 3) 發送塊數據(16B) 4) 接收ACK/NAK應答來校驗是否正確寫入EEPROM
Value Operate 值操做
1. MIFARE卡專門爲公交/地鐵等行業的定額收費系統設有值操做命令,包括 1) INCREAMENT 2) DECREAMENT 3) TRANSFER 4) RESTORE 2. 對某塊進行值操做的前提是該塊已被初始化爲"值塊"(Value Block)而且Access Bits容許值操做
Relevant Link:
https://detail.tmall.com/item.htm?id=526342615313
2. FM1702SL芯片(讀卡器)簡介
FM1702SL是復旦微電子股份有限公司設計的基於ISO14443標準的非接觸卡讀卡機專用芯片,採用0.6毫米CMOS EEPROM工藝,支持13.56MHz頻率下的typeA非接觸通訊協議,支持多種加密算法,兼容Philips的MFRC530(SPI接口)讀卡機芯片
1. 高集成度的模擬電路,只需最少許的外圍電路 2. 操做距離可達10cm 3. 支持ISO14443 typeA協議 4. 內部帶有加密單元 5. 支持SPI接口模式 6. 包含515byte的EEPROM 7. 包含64byte的FIFO 8. 數字電路具備TTL/CMOS兩種工做模式 9. 軟件控制的power down模式 10. 一個可編程計時器 11. 一箇中斷處理器 12. 一個串行輸出輸入口 13. 啓動配置可編程 14. 數字、模擬和發射模塊都有獨立的電源供電,電壓範圍從3V到5V 15. 封裝形式爲SOP24小型封裝
0x1: 結構圖
0x2: 管腳信息
1. 管腳配置
2. 管腳描述
0x3: 數字接口
1. 支持的微處理器接口概述
FM1702SL支持SPI微處理器接口,在SPI通訊方式下,FM1702SL只能做爲slave端,SCK時鐘需由master端提供
2. 自動偵測微處理器接口類型
在每一次上電或硬件復位後,FM1702SL會復位微處理器接口處理模塊,而且經過檢測控制管腳上的電平來設置SPI接口
0x4: 寄存器組
FM1702SL的內部寄存器按功能不一樣分紅8組,每組爲一頁,包含8個寄存器
1. Page0: 指令和狀態寄存器組 2. Page1: 控制和狀態寄存器組 3. Page2: 發射及編碼控制寄存器組 4. Page3: 接收及接碼控制寄存器組 5. Page4: 時間及校驗寄存器組 6. Page5: FIFO、Timer、IRQ控制寄存器組 7. Page6: 預留寄存器組 8. 預留寄存器組
每個寄存器裏的每一位按其功能都有不一樣的讀寫權限
0x5: FIFO
FM1702SL包含一個8 * 64的並行FIFO,保存微處理器和FM1702SL之間通訊的數據
1. 訪問規則
FIFO經過FIFOData寄存器輸入和輸出數據,向這個寄存器裏寫一byte數據即向FIFO裏添加一byte數據,同時FIFO寫指針加一。從這個寄存器讀一byte數據即從FIFO裏讀出一byte數據,同時FIFO讀指針加一。FIFOLength寄存器記錄讀/寫指針之間的長度
當FM1702SL執行一條指令時,內部狀態機可能會對FIFO進行內部讀/寫操做,因此除了指令自己要求外,微處理器在FM1702SL指令執行過程當中不要對FIFO執行不正確的訪問
2. 控制FIFO
除了讀寫FIFO外,用戶能夠經過設置FlushFIFO位來複位FIFO指針,在這種狀況下,FIFO被清空,FIFOLength置0,FIFOOvfl標誌位被清除,FIFO內原有的數據再也不有效
3. FIFO狀態信息
微處理器能夠經過下列寄存器得到FIFO狀態
1. FIFO中數據長度: FIFOLength 2. FIFO漸滿警告: HiAlert 3. FIFO漸空警告: LoAlert 4. FIFO溢出: FOFOOvfl
FIFO能夠產生兩個中斷請求
1. 若是LoAlertRq置1,且LoAlert變爲1,會激活IRQ管腳 2. 若是HiAlertRq置1,且HiAlert變爲1,會激活IRQ管腳
0x6: 中斷請求系統
若是有中斷請求事件發生,FM1702SL會將PrimaryStatus寄存器裏的IRQ位置1,同時激活IRQ管腳,IRQ上的信號能夠用來向微控制器發出中斷請求
0x7: 啓動過程
1. Hard Power Down階段
在下列狀況會進入Hard Power Down階段
1. 因爲DVDD管腳上加電引發的上電覆位 2. 因爲AVDD管腳上加電引發的上電覆位 3. 在RSTPD管腳上加高電平
2. 初始化階段
初始化階段自動跟隨復位階段,須要128個時鐘週期,在初始化階段,EEPROM的第一、第2扇區內容被複制到10hex至2Fhex寄存器
3. 初始化SPI接口方式
芯片復位後,必須進行一次初始化程序以便初始化SPI接口模式,並且能夠同步微處理器和FM1702SL的啓動工做
在整個啓動過程當中,Command寄存器的值始終爲3Fhex,在初始階段結束後,FM1702SL自動進入Idel狀態,Command寄存器的值隨之變成00hex
執行下列程序確保初始化SPI接口
1. 讀Command寄存器,直到6bit值變成00hex,此時內部初始化階段已經結束,芯片準備好接收外部指令 2. 往Page寄存器寫80hex初始化SPI接口 3. 讀Command寄存器,若是它的值爲00hex,則SPI接口已經初始化成功 4. 往Page寄存器寫0hex,開始使用SPI接口 5. 完成接口初始化以後,能夠經過往Page寄存器寫00hex切換到線性尋址方式
0x8: 串行信號開關
FM1702SL包括兩個主要模塊
1. 數字模塊 1) 狀態機 2) 編碼器 3) 接碼邏輯 2. 模擬模塊 1) 調製器 2) 天線驅動器 3) 接收機 4) 放大電路 //這兩模塊的接口設計能夠將接口信號送入MFIN
0x9: FM1702SL指令集
FM1702SL的行爲由一個內部狀態機決定,該狀態機可執行一組專門的指令集,將某條指令代碼寫入指令寄存器可啓動一個相應的命令的執行
某些指令執行需攜帶參數和(或)數據,這些參數和數據主要經過FIFO進行交換
0x10: 認證及數據加密傳輸
FM1702SL使用的認證算法稱爲三重認證,它基於密鑰長度爲48bit的私有加密數據流。當一張卡按照ISO14443協議被選中後,用戶能夠按照標準協議繼續操做,這種狀況下,必須執行卡片認證,這一過程在執行Authen1和Authen2指令時自動完成,在卡認證的過程當中,加密算法被初始化,在成功認證以後與卡的通信處於加密狀態
1. 密鑰處理
在認證指令執行過程當中,FM1702SL從內部密鑰緩衝器中讀取密鑰,密碼老是從密鑰緩衝器中獲取,所以認證指令無需指明密鑰存儲地址,固然,在認證指令開始以前,用戶必須保證在密鑰緩衝器中已經準備好了密鑰
密鑰緩衝器能夠經過以下方式加載
1. 用LoadKeyE2指令從EEPROM中加載 2. 直接由外部處理器經過LoadKey指令從FIFO中加載
2. 操做三重認證指令
三重加密算法被用於執行標準認證,在密鑰緩衝器中必須存儲準確的密鑰以便可以進行成功的認證操做
1. 經過LoadKeyE2或者LoadKey加載密鑰到內部密鑰緩衝器 2. 啓動Authen1指令,結束以後,檢查錯誤標誌來判斷執行結果 3. 啓動Authen2指令,結束以後,檢查錯誤標誌以及CryptoOn標誌來判斷執行結果
FM1702SL分別支持MIFARE三重認證算法
Relevant Link:
http://wenku.baidu.com/link?url=dyarxoceft-GVg8PXQHBfcWotBWJWzZrG876bhy-TpAgIdIHbP5aomZl7KskuMM1emHn9WCt4G5d6F11JfOXwhIzCyL_s6DGmKjr4fPQiJ3 file:///C:/Users/zhenghan.zh/Desktop/FM1702SL%E4%B8%AD%E6%96%87%E8%AF%B4%E6%98%8E%E4%B9%A6.pd
3. RFID M1卡簡介
0x1: 主要指標
1. 容量爲 8K 位 EEPROM(這意味着M1卡支持數據的讀寫修改) 2. 分爲 16 個扇區,每一個扇區爲 4 塊,每塊 16 個字節,以塊爲存取單位(這意味着M1卡能夠承載多功能的IC卡,在不一樣的扇區分別存儲不一樣目的的數據) 3. 每一個扇區有獨立的一組密碼及訪問控制 4. 每張卡有惟一序列號,爲 32 位 5. 具備防衝突機制,支持多卡操做 6. 無電源,自帶天線,內含加密控制邏輯和通信邏輯電路 7. 數據保存期爲 10 年,可改寫 10 萬次,讀無限次 8. 工做溫度" -20℃~50℃(溼度爲 90%) 9. 工做頻率: 13.56MHZ 10. 通訊速率: 106 KBPS 11. 讀寫距離: 10 cm 之內(與讀寫器有關)
0x2: 存儲結構
M1 卡分爲 16 個扇區,每一個扇區由 4 塊(塊0、塊一、塊二、塊3)組成,(咱們也將 16 個扇區的 64 個塊按絕對地址編號爲 0~63)
每張M1卡必定都有16個扇區
0 扇區的塊 0(即絕對地址 0 塊),它用於存放廠商代碼,已經固化,不可更改(前4字節是卡序列號,第5字節是卡容量,六、7字節是卡類型、剩下是廠商定義的信息)。每一個扇區的塊0、塊一、塊2爲數據塊,可用於存貯數據,數據塊可做兩種應用
1. 用做通常的數據保存,能夠進行讀、寫操做 2. 用做數據值,能夠進行初始化值、加值、減值、讀值操做
每一個扇區的塊 3 爲控制塊,包括了密碼 A、存取控制、密碼 B。具體結構以下
//從3區塊讀出的數據 KeyA 0 0 0 0 0 0 存取控制 255 7 128 105 KeyB 255 255 255 255 255 255
每一個扇區的密碼和存取控制都是獨立的,能夠根據實際須要設定各自的密碼及存取控制。存取控制爲 4 個字節,共 32 位,扇區中的每一個塊(包括數據塊和控制塊)的存取條件是由密碼和存取控制共同決定的(相似於x86的內存讀寫管理r/w/rw),在存取控制中每一個塊都有相應的三個控制位,定義以下
三個控制位以正和反兩種形式存在於存取控制字節中,決定了該塊的訪問權限(如進行減值操做必須驗證 KEY A,進行加值操做必須驗證 KEY B,等等)
塊0的存取控制位C10 C20 C30=1 0 0時,驗證密碼A或密碼B正確後可讀;驗證密碼B正確後可寫;不能進行加值、減值操做
例如:當塊3的存取控制位C13 C23 C33=1 0 0時,表示
1. 密碼A: 不可讀,驗證KEYA或KEYB正確後,可寫(更改) 2. 存取控制: 驗證KEYA或KEYB正確後,可讀、可寫 3. 密碼B: 驗證KEYA或KEYB正確後,可讀、可寫
也就是說,對任何一張M1卡,要想對它進行讀寫操做,須要KeyA、KeyB、存儲控制位這3者綜合判斷的結果,並且大多數狀況下存儲控制位所在區塊是不容許寫操做的,這就像一個保險櫃的鑰匙放在保險櫃裏並加鎖了,只提供外面的一些僅有的界面提供操做,沒法直接拿到裏面的鑰匙
0x3: 三次握手密鑰認證過程
這實際上是一種典型的認證雙方預分配(協商)好一對相同的密鑰,經過各自生成的隨機種子,並使用該密鑰加密併發送給對方,向對方證實本身是可信的
0x3: 工做原理
卡片的電氣部分只由一個天線和 ASIC 組成
1. 天線: 卡片的天線是隻有幾組繞線的線圈,很適於封裝到 IS0 卡片中 2. ASIC: 卡片的 ASIC 由一個高速(106KB 波特率)的 RF 接口,一個控制單元和一個 8K 位 EEPROM 組成 //RFID卡自己也能夠看做是一個微型的單片機
讀寫器向 M1 卡發一組固定頻率的電磁波,卡片內有一個 LC 串聯諧振電路,其頻率與讀寫器發射的頻率相同,在電磁波的激勵下,LC 諧振電路產生共振,從而使電容內有了電荷,在這個電容的另外一端,接有一個單向導通的電子泵,將電容內的電荷送到另外一個電容內儲存,當所積累的電荷達到 2V 時,此電容可作爲電源爲其它電路提供工做電壓,將卡內數據發射出去或接取讀寫器的數據
1. 復位應答(Answer to request) M1 射頻卡的通信協議(相似於TCP/IP在不一樣的bit區間內保存不一樣目的的數據)和通信波特率是定義好的,當有卡片進入讀寫器的操做範圍時,讀寫器以特定的協議與它通信,從而肯定該卡是否爲 M1 射頻卡,即驗證卡片的卡型 2. 防衝突機制(Anticollision Loop) 當有多張卡進入讀寫器操做範圍時,防衝突機制會從其中選擇一張進行操做,未選中的則處於空閒模式等待下一次選卡,該過程會返回被選卡的序列號 3. 選擇卡片(Select Tag) 選擇被選中的卡的序列號,並同時返回卡的容量代碼 4. 三次互相確認(3 Pass Authentication) 選定要處理的卡片以後,讀寫器就肯定要訪問的扇區號,並對該扇區密碼進行密碼校驗,在三次相互認證以後就能夠經過加密流進行通信(在選擇另外一扇區時,則必須進行另外一扇區密碼校驗) //這裏必須明白的,RFID卡不是二維碼,不是隨便誰都能讀取到卡中的數據,讀卡器只能經過協議發送指令碼,通過驗證後,RFID卡會根據讀寫控制位決定是否返回指定區塊的數據(RFID自己是一個單片機) 5. 對數據塊的操做 1) 讀 (Read): 讀一個塊 2) 寫 (Write): 寫一個塊 3) 加 (Increment): 對數值塊進行加值 4) 減 (Decrement): 對數值塊進行減值 5) 存儲 (Restore): 將塊中的內容存到數據寄存器中 6) 傳輸 (Transfer): 將數據寄存器中的內容寫入塊中 6. 停止(Halt): 將卡置於暫停工做狀態
0x4: MIFARE卡的讀寫操做步驟
1. 激活MCM 2. MCM軟復位 3. 向MCM下載密碼(LOAD KEY),校驗傳輸密碼正確後可向MCM的KEY-RAM寫入用戶本身設定的密碼 //以上操做與卡無關 4. 請求應答(ANSWER TO REQUEST): 尋卡 5. 防衝突(ANTICOLLISION): 選擇惟一一張卡 6. 選擇標記(SELECT): 激活所選擇的卡 7. 認證(AUTHENTICATION): 安全性 8. 讀寫操做(讀、寫、加值、減值): 交換數據(READ/WRITE/INCREAMENT/DECREMENT) 9. 中止(HALT): 置卡爲中止模式,防止重複操做
讀寫器與M1卡交換數據的過程
1. 由讀寫器MCU(微控制器)發送指令給MCM 2. MCM執行指令並將其轉換爲射頻信號發送給卡 3. 卡接收到來自MCM的指令後,按指令完成其內部的各類處理,並回送應答信號/數據給MCM 4. MCM接收卡回送的射頻信號並將其轉換爲數字信號輸出給MCU,讀寫器MCU讀取MCM接收到的應答/數據,便可完成與M1卡的數據交換
0x5: 指令時序
每一個指令由7個基本步驟組成,必須按此時序編程才能完成該指令,這是MFRC522硬件對上位機發送指令的時序要求
1. 初始化,設置各寄存器,特別是BCNTS和BCNTR 2. 送指令碼到DATA,由MCM發送指令 3. 設置TOC,MCM準備接收來自卡的應答或數據 4. 檢查DV標誌,查詢數據接收是否完成 1) DV標誌爲"1"代表MCM與MIFARE卡片之間的傳輸已經完成,而且主處理機可能已經從MCM中收到數據,能夠進行下一步操做 2) DV=0表示數據接收還沒有完成或未能接收到數據,則程序循環檢測DV標誌直至DV=1。有一種狀況例外,既當定時器溢出時,不管接收是否完成DV都將被設置爲1,一樣將進行下一步操做 5. 清零TOC 6. 檢查出錯標誌(相似於x86架構的錯誤處理機制) 1) 如有標誌被設置,則進行相應的出錯處理,例如設置出錯標誌等,並返回主程序 2) 若沒有標誌被設置,表示接收正確,將進行下一步操做 7. MCU從DATA讀出MCM接收到的應答或數據
0x6: SerialNumberRead
http://files.cnblogs.com/files/LittleHann/M1_read.rar
Relevant Link:
http://wenku.baidu.com/link?url=seLu40bcRSJkNx4w62XULQAnvZp0NUx6TdBPwauyrgWZgVZElLD_FMnp_sM7YfOA3mDn2r_256LyL7y48OJ1Wr7PC7534gF46IXFrzcZLaS http://file.yfrobot.com/RFID.zip http://www.freebuf.com/fevents/110534.html http://blog.chinaunix.net/uid-23686726-id-3444925.html http://baike.baidu.com/link?url=IWEAgJEzFFecldhpuIemkFzPXE3tmgsSnlCoFNpDsqg-d1Fl4k-1TL95CEn02Xpwy8pLlwpI8PwINefETmafdK file:///D:/%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/RFID/TJDZ-RC522%E5%B0%84%E9%A2%91%E5%8D%A1%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C%E8%B5%84%E6%96%99Ver_1.0/%E7%9B%B8%E5%85%B3%E6%95%B0%E6%8D%AE%E6%89%8B%E5%86%8C%E5%92%8C%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE/MFRC522%E6%95%B0%E6%8D%AE%E6%89%8B%E5%86%8C.pdf file:///D:/%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/RFID/TJDZ-RC522%E5%B0%84%E9%A2%91%E5%8D%A1%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C%E8%B5%84%E6%96%99Ver_1.0/%E7%9B%B8%E5%85%B3%E6%95%B0%E6%8D%AE%E6%89%8B%E5%86%8C%E5%92%8C%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE/Mifare%E5%8D%A1%E8%AF%B4%E6%98%8E/Mifare1%20S50IC%E5%8D%A1%E4%B8%AD%E6%96%87%E8%AF%B4%E6%98%8E%E4%B9%A6.pdf
4. 讀取ID/序列號(arduino uno、MFRC522芯片 Based On MF522-AN模塊)
0x1: 接線方式
模塊採用MF RC522芯片,模塊與Arduino通信方式爲SPI(同步串行外設接口總線)通訊,Arduino工做在主模式下,RC522工做在從模式下,模塊與Arduino控制板鏈接方式以下
Arduino RC522 (工做電壓3.3V)
D5 <-------------> RST D10 <-------------> SDA D11 <-------------> MOSI D12 <-------------> MISO D13 <-------------> SCK
0x2: RFID庫文件
Arduino SPI 庫文件官方軟件自帶,咱們須要下載一個RFID庫文件,將庫文件放到指定文件夾,從新打開IDE便可調用該庫文件
0x3: Code
#include <SPI.h> #include <RFID.h> //D10 - 讀卡器CS引腳、D5 - 讀卡器RST引腳 RFID rfid(10,5); unsigned char status; unsigned char str[MAX_LEN]; //MAX_LEN爲16,數組最大長度 void setup() { Serial.begin(9600); SPI.begin(); rfid.init(); //初始化 Serial.print("init "); } void loop() { //Search card, return card types if (rfid.findCard(PICC_REQIDL, str) == MI_OK) { Serial.println("Find the card!"); // Show card type ShowCardType(str); //防衝突檢測,讀取卡序列號 if (rfid.anticoll(str) == MI_OK) { Serial.print("The card's number is : "); //顯示卡序列號 for(int i = 0; i < 4; i++){ Serial.print(0x0F & (str[i] >> 4),HEX); Serial.print(0x0F & str[i],HEX); } Serial.println(""); } //選卡(鎖定卡片,防止多數讀取,去掉本行將連續讀卡) rfid.selectTag(str); } rfid.halt(); //命令卡片進入休眠狀態 } void ShowCardType(unsigned char * type) { Serial.print("Card type: "); if(type[0]==0x04&&type[1]==0x00) Serial.println("MFOne-S50"); else if(type[0]==0x02&&type[1]==0x00) Serial.println("MFOne-S70"); else if(type[0]==0x44&&type[1]==0x00) Serial.println("MF-UltraLight"); else if(type[0]==0x08&&type[1]==0x00) Serial.println("MF-Pro"); else if(type[0]==0x44&&type[1]==0x03) Serial.println("MF Desire"); else Serial.println("Unknown"); }
Relevant Link:
http://www.openedv.com/thread-44628-1-1.html http://www.arduino.cn/forum.php?mod=viewthread&tid=4560&extra=&highlight=rfid&page=1 http://www.yfrobot.com/forum.php?mod=viewthread&tid=2377&extra= http://www.yfrobot.com/forum.php?mod=viewthread&tid=2375&highlight=rfid
5. 讀取ID/序列號(arduino uno、FM1702SL)
Relevant Link:
http://v.youku.com/v_show/id_XMzI0MjYxNDc2.html
6. arduino uno、RC522向mifare卡寫入數據
尋卡→防衝突→選卡→讀/寫卡
在編寫向M1卡寫入數據的代碼以前須要首先明白的是,M1卡的每一個扇區都有獨立的驗證密碼,在寫入數據以前以前須要先經過密碼驗證,方可進行進行後續的指令操做,相似於WEB的login界面。M1卡總共有16個扇x區,每一個扇區的默認密碼都是6 bytes 的0xFF
http://files.cnblogs.com/files/LittleHann/m1.rar
Relevant Link:
http://blog.sina.com.cn/s/blog_6754612e0101c0pe.html http://wenku.baidu.com/link?url=nHSqrV_vxk7zj_3rQqN8an3i262yShVdKLpdKKUOI69XTslH9wrOjAAQp_d3ee1qxulyuCvgmj21Cn5h2_DZo9AJhi7ICBEBMl-YeP9GahS http://blog.csdn.net/zitech/article/details/24135893/ http://www.geek-workshop.com/thread-4564-1-1.html http://www.geek-workshop.com/thread-4564-1-1.html http://wenku.baidu.com/link?url=IlOrYuXwtn8nHsgc_BbMihMuw-czCSKNbAwuirAut6JLzB9kGnlTFs8j1T90mGGfAAqcbyXUWLK9-BJ74lBMfkarpDAC0KFraZ7NWmp7CIy
Copyright (c) 2016 LittleHann All rights reserved