射频卡的使用
操作程序主要包括:初始化函數,尋卡,防沖突,選卡,轉換密鑰,傳送密鑰,驗證密鑰簡稱三輪認證,關閉打開天線,錢包沖值等函數。
RFID(radio frequency identification)是利用無線電波進行通信的一種自動識別技術。基本原理是通過讀頭和黏附在物體上的標簽之間的電磁耦合或電感耦合進行數據通信,以達到對標簽物品的自動識別。自動識別是指應用一定的識別裝置,通過被識別物品和識別裝置之間的接近活動,自動獲取被識別物品的相關信息,并提供給后臺計算機處理系統來完成相關后續處理的一種技術。
NFC是Near Field Communication縮寫,即近距離無線通訊技術。由飛利浦和索尼公司共同開發的NFC是一種非接觸式識別和互聯技術,可以在移動設備、消費類電子產品、PC和智能控件工具間進行近距離無線通信。NFC提供了一種簡單、觸控式的解決方案,可以讓消費者簡單直觀地交換信息、訪問內容與服務。
NFC從本質上與RFID沒有太大區別,都是基于地理位置相近的兩個物體之間的信號傳輸。
復位RC522--關閉天線--開啟天線--設置RC632的工作方式 --
1、C522共有3中通信方式,分別是UART、I2C和SPI,測試代碼用的SPI
SDA(數據接口)
SCK(時鐘接口)
MOSI(SPI 接口主出從入)
MISO(SPI 接口主入從出)
NC(懸空)
GND(地)
RST(復位信號)
3.3V(電源)
通訊步驟
尋卡。尋卡成功,返回卡的類型。
選卡。選卡成功,返回卡的序列號。
認證。
增減值。該步驟在將IC卡用做電子錢包時才會使用,比如門禁卡就不會使用。
?
?
?
?
| RC522 接口 | STM32F429 接口 ? ? ? ? ? ? ? ? ? ? ? |
| SDA(數據接口) | P2.7 |
| SCK(時鐘接口) | P2.6 |
| MOSI(SPI 接口主出從入) | P2.5 |
| MISO(SPI 接口主入從出) | P2.1 |
| NC(懸空) | |
| GND(地) | GND |
| RST(復位信號) | P2.3 |
| 3.3V(電源) | 3.3V |
寄存器定義
// PAGE 0 // 命令和狀態
#define RFU00 0x00
#define CommandReg 0x01 // 啟動和停止命令的執行
#define ComIEnReg 0x02 // 中斷請求傳遞的使能和禁能控制位
#define DivlEnReg 0x03 // 中斷請求傳遞的使能和禁能控制位
#define ComIrqReg 0x04 // 包含中斷請求標志
#define DivIrqReg 0x05 // 包含中斷請求標志
#define ErrorReg 0x06 // 錯誤標志,指示執行的上個命令的錯誤狀態
#define Status1Reg 0x07 // 包含通信的狀態標志
#define Status2Reg 0x08 // 包含接收器和發送器的狀態標志
#define FIFODataReg 0x09 // 64字節FIFO緩沖區的輸入和輸出
#define FIFOLevelReg 0x0A // 指示FIFO中存儲的字節數
#define WaterLevelReg 0x0B // 定義FIFO下溢和上溢報警的FIFO深度
#define ControlReg 0x0C // 不同的控制寄存器
#define BitFramingReg 0x0D // 面向位的幀的調節
#define CollReg 0x0E // RF接口上檢測到的第一個位沖突的位的位置
#define RFU0F 0x0F
// PAGE 1
#define RFU10 0x10
#define ModeReg 0x11 // 定義發送和接收的常用模式
#define TxModeReg 0x12 // 定義發送過程的數據傳輸速率
#define RxModeReg 0x13 // 定義接收過程中的數據傳輸速率
#define TxControlReg 0x14 // 控制天線驅動器管腳TX1和TX2的邏輯特性
#define TxAutoReg 0x15 // 控制天線驅動器的設置
#define TxSelReg 0x16 // 選擇天線驅動器的內部源
#define RxSelReg 0x17 // 選擇內部的接收器設置
#define RxThresholdReg 0x18 // 選擇位譯碼器的閾值
#define DemodReg 0x19 // 定義解調器的設置
#define RFU1A 0x1A
#define RFU1B 0x1B
#define MifareReg 0x1C // 控制ISO 14443/MIFARE模式中106kbit/s的通信
#define RFU1D 0x1D
#define RFU1E 0x1E
#define SerialSpeedReg 0x1F // 選擇串行UART接口的速率
// PAGE 2
#define RFU20 0x20
#define CRCResultRegM 0x21 // 顯示CRC計算的實際MSB和LSB值
#define CRCResultRegL 0x22
#define RFU23 0x23
#define ModWidthReg 0x24 // 控制ModWidth的設置
#define RFU25 0x25
#define RFCfgReg 0x26 // 配置接收器增益
#define GsNReg 0x27 // 選擇天線驅動器管腳TX1和TX2的調制電導
#define CWGsCfgReg 0x28 // 選擇天線驅動器管腳TX1和TX2的調制電導
#define ModGsCfgReg 0x29 // 選擇天線驅動器管腳TX1和TX2的調制電導
#define TModeReg 0x2A // 定義內部定時器的設置
#define TPrescalerReg 0x2B // 定義內部定時器的設置
#define TReloadRegH 0x2C // 描述16位長的定時器重裝值
#define TReloadRegL 0x2D // 描述16位長的定時器重裝值
#define TCounterValueRegH 0x2E // 顯示16位長的實際定時器值
#define TCounterValueRegL 0x2F // 顯示16位長的實際定時器值
// PAGE 3
#define RFU30 0x30
#define TestSel1Reg 0x31 // 常用測試信號的配置
#define TestSel2Reg 0x32 // 常用測試信號的配置和PRBS控制
#define TestPinEnReg 0x33 // 輸出驅動器的使能管腳(注:僅用于串行接口)
#define TestPinValueReg 0x34 // 定義D1-D7用作I/O總線時的值
#define TestBusReg 0x35 // 顯示內部測試總線的狀態
#define AutoTestReg 0x36 // 控制數字自測試
#define VersionReg 0x37 // 顯示版本
#define AnalogTestReg 0x38 // 控制管腳AUX1和AUX2
#define TestDAC1Reg 0x39 // 定義TestDAC1的測試值
#define TestDAC2Reg 0x3A // 定義TestDAC2的測試值
#define TestADCReg 0x3B // 顯示ADC I和Q通道的實際值#define RFU3C 0x3C
#define RFU3D 0x3D
#define RFU3E 0x3E
#define RFU3F 0x3F
?
S50非接觸式IC卡性能簡介(M1)
一、?? ?主要指標
??? ?容量為8K位EEPROM
??? ?分為16個扇區,每個扇區為4塊,每塊16個字節,以塊為存取單位
??? ?每個扇區有獨立的一組密碼及訪問控制
??? ?每張卡有唯一序列號,為32位
??? ?具有防沖突機制,支持多卡操作
??? ?無電源,自帶天線,內含加密控制邏輯和通訊邏輯電路
??? ?數據保存期為10年,可改寫10萬次,讀無限次
??? ?工作溫度:-20℃~50℃(濕度為90%)
??? ?工作頻率:13.56MHZ
??? ?通信速率:106 KBPS
??? ?讀寫距離:10 cm以內(與讀寫器有關)
三、?? ?工作原理
卡片的電氣部分只由一個天線和ASIC組成。
天線:卡片的天線是只有幾組繞線的線圈,很適于封裝到IS0卡片中。
ASIC:卡片的ASIC由一個高速(106KB波特率)的RF接口,一個控制單元和一個?8K位EEPROM組成。
工作原理:讀寫器向M1卡發一組固定頻率的電磁波,卡片內有一個LC串聯諧振電路,其頻率與讀寫器發射的頻率相同,在電磁波的激勵下,LC諧振電路產生共振,從而使電容內有了電荷,在這個電容的另一端,接有一個單向導通的電子泵,將電容內的電荷送到另一個電容內儲存,當所積累的電荷達到2V時,此電容可做為電源為其它電路提供工作電壓,將卡內數據發射出去或接取讀寫器的數據。
四、?? ?M1射頻卡與讀寫器的通訊
復位應答(Answer to request)
M1射頻卡的通訊協議和通訊波特率是定義好的,當有卡片進入讀寫器的操作范圍時,讀寫器以特定的協議與它通訊,從而確定該卡是否為M1射頻卡,即驗證卡片的卡型。
防沖突機制 (Anticollision Loop)
當有多張卡進入讀寫器操作范圍時,防沖突機制會從其中選擇一張進行操作,未選中的則處于空閑模式等待下一次選卡,該過程會返回被選卡的序列號。
選擇卡片(Select Tag)
選擇被選中的卡的序列號,并同時返回卡的容量代碼。
三次互相確認(3 Pass Authentication)
選定要處理的卡片之后,讀寫器就確定要訪問的扇區號,并對該扇區密碼進行密碼校驗,在三次相互認證之后就可以通過加密流進行通訊。(在選擇另一扇區時,則必須進行另一扇區密碼校驗。)
對數據塊的操作?
讀 (Read):讀一個塊;
寫 (Write):寫一個塊;
加(Increment):對數值塊進行加值;
減(Decrement):對數值塊進行減值;
存儲(Restore):將塊中的內容存到數據寄存器中;
傳輸(Transfer):將數據寄存器中的內容寫入塊中;
中止(Halt):將卡置于暫停工作狀態;
?
?
?
?
?
?
?
?
總結
- 上一篇: 万字多图:搞懂分布式系统缓存设计
- 下一篇: Node.js发送HTTP请求