補充:學(xué)習(xí)路徑
一。項目介紹及需求分析
1.酒店智能門禁使用場景介紹
1.客人入住
????????客人在前臺辦理入住手續(xù),前臺管理員通過門禁管理系統(tǒng)為客戶開一張門禁卡????????客戶持卡到相應(yīng)客房,用IC 卡刷卡開門????????客人過了入住時間后,卡自動失效,刷卡不能再次開門2.酒店管理
????????客房服務(wù)需要一張沒有時間限制,且能打開多個房門的卡????????酒店經(jīng)理需要一張沒有時間限制,且能打開所有房間的卡
2.酒店智能門禁需求
? ? ? ? 需要兩個器件,客房門禁讀寫器需求、前臺讀寫器分析需求。
1.客房門禁讀寫器需求分析????????普通客房卡:根據(jù)房間號和時間判斷是否允許開鎖????????客房服務(wù)卡:所在樓層所有房門允許開鎖????????酒店經(jīng)理卡:所有房門無條件開鎖????????開鎖超過一定時間,房門關(guān)閉狀態(tài)下,自動上鎖????????開鎖后,檢測到門打開又關(guān)閉后,自動上鎖????????讀寫器的房間號(含樓層)由授權(quán)卡和普通客房卡設(shè)置????????讀寫器的時間由時間卡設(shè)置????????黑名單:由黑名單設(shè)置卡設(shè)置,對名單中的卡一律不響應(yīng)(可選)????????低功耗的需求2.前臺讀寫器需求分析????????可以發(fā)出帶房號和入住截至?xí)r間的普通客房卡????????可以發(fā)出酒店經(jīng)理卡、客房服務(wù)卡等管理卡????????可以發(fā)出門鎖時間設(shè)置卡、授權(quán)卡、黑名單設(shè)置卡等功能卡????????所有發(fā)卡信息均來自上位機
二。項目實現(xiàn)方案(門禁讀寫器)
1.硬件實現(xiàn)方案
? ? ? ? 首先需要讀寫器(天線,對鞋芯片),需要實時時鐘(RTC),需要存儲數(shù)據(jù)(flash存儲),需要一些響應(yīng)(指示燈,蜂鳴器),需要一些差錯的管理(閉門檢測)。
????????嵌入式MCU 選主流的通用 MCU 即可,比如 STM32F103 , STM3F051 系列等,內(nèi)部帶 RTC , FLASH,如果考慮電池供電特點,最理想的是 STM32 的低功耗系列。????????RFID讀寫芯片,有很多選擇,比如 NXP 的 RC531 、 RC522 、 CLRC663 、 PN532 等, ST 公司的 ST25R3911B,國產(chǎn)的 FM17550 、 Si522 等,因為卡使用的是 NXP 的 Mifare S50 ,選性價比比較高 的RC522 或 Si522 即可,結(jié)合課程提供的硬件,選用 RC522 ,天線使用 PCB 板載天線。????????開鎖裝置為驅(qū)動舵機實現(xiàn),0 度上鎖, 90 度開鎖。????????閉門檢測,使用一個到位開關(guān)即可,結(jié)合課程提供的硬件,使用使用一個按鍵模擬。
2.軟件實現(xiàn)方案(方案流程圖)
(1)主流程
(2)讀寫任務(wù)流程(對卡的讀寫)
(3)門鎖控制任務(wù)流程(門應(yīng)答卡的操作)
三。項目實現(xiàn)方案(前臺讀寫器)
1.硬件實現(xiàn)方案
2.軟件實現(xiàn)方案
3.前臺讀寫器串口通信協(xié)議(通信約定)
1.通信約定
(1)波特率:115200bps
(2)數(shù)據(jù)格式:8,n,1
2.數(shù)據(jù)基本格式
幀頭: PC 到讀寫器為 55h ,讀寫器應(yīng)答為 AAh 。長度:長度字段之后所有數(shù)據(jù)字節(jié)數(shù)ECC 校驗:前面所有字節(jié)異或和3.PC機先發(fā)送,讀寫器應(yīng)答4.命令列表
塊數(shù)據(jù)解析
????????房間編號:6 字節(jié) ASCII 碼格式,前 2 字節(jié)為樓層號,后 4 字節(jié)為房間號,比如 3 層 18 號房間, “030018”,對應(yīng) ASCII 碼: 303330303138h????????時間:BCD( 二進制編碼的十進制 ) 碼,格式: YYMMDDhhmmss ,例如 2030 年 5 月 24 日 15:32:00 ,????????編碼為:300524153200h????????授權(quán)卡默認(rèn)密碼:FFh FFh FFh FFh????????校驗和:前面15 字節(jié)的異或和
4.S50卡存儲規(guī)劃
????????存儲區(qū):第1 扇區(qū)的第 0 塊,塊編號: 04????????密鑰使用方案:KeyA 認(rèn)證,將塊 7 的控制字修改成 011b , KeyB 可修改, ( 實驗保險起見, KeyB 仍 保持默認(rèn))????????修改密鑰和存取權(quán)限????????統(tǒng)一密鑰方案:KeyA 統(tǒng)一修改為一個固定密鑰,如 75767778797Ah( 實驗中采用的方式 )????????一卡一密方案:KeyA 統(tǒng)一使用 4 字節(jié)卡 UID 擴展成 6 字節(jié)與特殊 6 字節(jié)數(shù)按字節(jié)異或????????塊7 控制字: 75767778797A 7F078869 FFFFFFFFFFFF
四。RC522驅(qū)動(我對驅(qū)動的了解不多,目前只能對寄存器做一些操作)
1.RC522簡介
(1)MFRC522 是一款高度集成的 13.56MHz 非接觸通信讀寫 IC? ?? ? 1.支持ISO/IEC 14443 A/MIFARE 和 NTAG? ?? ? 2.典型的操作距離可達50 mm? ?? ? 3.支持I2C, SPI, UART 三種接口? ? ? ?4.與卡最高的傳輸速率可達848kbps? ? ? ?5.有64 字節(jié) FIFO 緩沖區(qū)用于收發(fā)? ?? ? 6.內(nèi)部靈活的中斷模式? ? ? ?7.硬件復(fù)位和低功耗模式? ? ? ?8.有軟件模式的低功耗? ? ? ?9.可編程的定時器? ? ? ?10.CRC協(xié)處理器? ? ?? 11.2.5V到 3.3V 供電(2)硬件結(jié)構(gòu)圖![]()
2.RC522Demo板接口介紹
硬件原理圖
PB15 對應(yīng)SPI2_MISOPB14 對應(yīng)SPI2_MOSIPB13 對應(yīng)SPI2_SCKPB12 對應(yīng)SPI2_NSS
3.RC522的SPI接口介紹
?SPI接口:? ? ?? ????1.工作在從模式? ? ? 2.最高通信速率:10Mbit/s? ? ? 3.字節(jié)序:MSB (高位在先)? ? ? 4.數(shù)據(jù)上升沿穩(wěn)定,下降沿可變,上升沿采樣(對應(yīng)STM32 SPI 極性模式 0 ,相位模式:第一個邊沿 采樣)? ? ? 5.SPI讀時序
4.RC522的寄存器
寄存器總結(jié)
????????CommandReg 啟動和停止命令的執(zhí)行????????ComlEnReg, DivIEnReg 中斷使能設(shè)置????????ComIrqReg , DivIrqReg 中斷請求標(biāo)志????????ErrorReg 錯誤標(biāo)志,指示執(zhí)行的上個命令的錯誤狀態(tài)????????Status1Reg, Status2Reg 包含各種狀態(tài)標(biāo)志????????FIFODtataReg 64 字節(jié) FIFO 緩沖區(qū)的輸入和輸出數(shù)據(jù)????????FIFOLevelReg 指示 FIFO 中存儲的字節(jié)數(shù)????????WaterLevelReg FIFO水位寄存器????????ControlReg 控制定時器等寄存器????????BitFramingReg 面向位的幀的調(diào)節(jié)????????CollReg RF 接口上檢測到的第一個位沖突的位的位置????????ModeReg 定義發(fā)送和接收的常用模式????????CRCResultReg 儲存 CRC 運算結(jié)果,高 8 位和低 8 位 2 個????????TModeReg 設(shè)置定時器模式和預(yù)分頻系數(shù)的高 4 位????????TxASKReg 發(fā)送調(diào)制設(shè)置????????TPrescalerReg 定時器預(yù)分頻系數(shù)的低 8 位????????TReloadReg 定時器重載寄存器,有高 8 位和低 8 位 2 個????????TCounterValReg 存放定時器的當(dāng)前值,有高 8 位和低 8 位 2 個
(1)CommandReg寄存器RcvOff: 模擬接收部分是否關(guān)閉, 0 不關(guān)閉, 1 關(guān)閉PowerDown: 進入 / 退出軟件掉電模式, 0 退出, 1 進入Command: 4bit 命令字
(2)ComIEnReg寄存器IRqInv: IRQ 引腳上的信號是否和 Status1Reg 中的 IRq 位相反TxIEn~TimerIEn: 1 使能中斷,對應(yīng)的中斷是否反應(yīng)到 IRQ 引腳上
(3)DivlEnReg寄存器IRQPushPull: 1 IRQ 引腳是標(biāo)準(zhǔn) CMOS 輸出, 0 IRQ 引腳開漏輸出MfinActIEn: 1 使能中斷,允許 MFIN 活動中斷反應(yīng)到 IRQ 引腳CRCIEn: 1 使能中斷,允許 CRC 中斷反應(yīng)到 IRQ 引腳
(4)ComlrqReg寄存器Set1: 寫入時,設(shè)置選中的位的狀態(tài), 0 被選中的位復(fù)位, 1 被選中的位置位TxIRq~TimerIRq: 對應(yīng)的中斷是否發(fā)生, 0 否, 1 是
(5)DivlrqReg寄存器Set2: 寫入時,設(shè)置選中的位的狀態(tài), 0 被選中的位復(fù)位, 1 被選中的位置位MfinActIRq: 1 MFIN 是活動的CRCIRq: 1 CalcCRC 命令運行且所有的數(shù)據(jù)已經(jīng)被處理
(6)ErrorReg寄存器WrErr: 認(rèn)證時向 FIFO 中寫數(shù)據(jù),引發(fā)此錯誤, 1 表示出錯, 0 未出錯,下同TempErr: 過熱(芯片溫度超過 125 ℃)報警BufferOvfl: FIFO 溢出錯CollErr: 檢測到位沖突CRCErr: 接收數(shù)據(jù)的 CRC 錯ParityErr: 接收數(shù)據(jù)的奇偶校驗錯ProtocolErr: 幀格式錯
(7)Status1Reg寄存器CRCOk: 1 CRC 結(jié)果為 0 ,發(fā)送和接收對 CRC 的驗證,通過 ErrorReg 的 CRCErr 位指示,這個狀態(tài)位只用于指示 CRC 運算過程,計算結(jié)果正確置 1CRCReady: CRC 計算完成IRq: 有被使能的中斷發(fā)生,使能中斷見: ComIEnReg 和 DivIEnReg 寄存器TRunning: 1 定時器在運行HiAlert: 1 FIFO 緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù)大于等于 (64- 水位字節(jié)數(shù) ) 報警LoAlert: 1 FIFO 緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù)小于等于水位字節(jié)數(shù)報警
(8)Status2Reg寄存器TempSensClear: 為 1 時,芯片溫度在 125 ℃以下會自動清除過熱報警 TempErrI2CForceHS : I2C 輸入過濾設(shè)置MFCrypto1On : 指示 MIFARE Crypto1 單元開啟,在認(rèn)證命令成功后置位ModemState[2:0] : 指示當(dāng)前發(fā)送接收狀態(tài)![]()
(9)FIFODataReg寄存器
(10)FIFOLevelReg寄存器FlushBuffer: 寫入 1 ,清除 FIFO 中的數(shù)據(jù)FIFOLevel[6:0]: FIFO 中數(shù)據(jù)字節(jié)數(shù)
(11)WaterLevelReg寄存器WaterLevel[5:0]: 定義水位字節(jié)數(shù)
(12)ControlReg寄存器TStopNow: 寫入 1 ,定時器立刻停止TStartNow: 寫入 1 ,定時器立刻啟動RxLastBits[2:0]: 接收的最后 1 字節(jié)數(shù)據(jù)有效位,如果時 000b ,則整個字節(jié)有效
(13)BitFrameingReg寄存器StartSend: 寫入 1 ,開始數(shù)據(jù)發(fā)送,僅在 Transceive 命令有效RxAlign[2:0]: 基于位防沖突幀中接收的第一位的位置TxLastBits[2:0]: 發(fā)送最后 1 字節(jié)的位數(shù), 000b 意味著發(fā)送所有位
(14)CollReg寄存器ValuesAfterColl: 0 所有接收到的位在發(fā)生沖突后被清零CollPosNotValid: 1 沒有發(fā)生沖突或者發(fā)生沖突的位置超出 CollPos[4:0] 的范圍CollPos[4:0]: 第一個發(fā)生位沖突的位置。例如 00h 表示在 32 位發(fā)生位沖突, 08h 表示在第 8 位發(fā)生位沖突
(15)ModeReg寄存器MSBFirst: 1 CRC 計算時, MSB 在先TxWaitRF: 1 僅在 RF 場產(chǎn)生后才發(fā)送PolMFin: 定義 MFIN 腳有效極性, 0 低有效, 1 高有效CRCPreset[1:0]: 定義 CRC 協(xié)處理器預(yù)置值, 00b 表示 0000h, 01b 表示 6363h, 10b 表示 A671h , 11b 表示 FFFFh
(16)CRCResultReg寄存器CRC 計算結(jié)果的高、低兩個字節(jié),僅在 Status1Reg 寄存器的 CRCReady 位置 1 時有效
(17)TModeReg寄存器TAuto: 1 在發(fā)送完成后,定時器自動啟動TGated[1:0]: 定時器工作在何種門模式設(shè)定, 00b 不啟動門模式, 01b 由 MFIN 腳啟動門模式, 10b 由 AUX1 腳啟動門模式, 11 保留TAutoRestart: 1 當(dāng)定時器倒計時到 0 以后,自動重新按重載寄存器中的值計數(shù); 0 定時器倒計時到 0 后, ComIrqReg 寄存器的 TimerIRq 位置 1TPrescaler_Hi[3:0]: 預(yù)分頻值的高 4bit ,與 TPrescalerReg 寄存器中的 8bit ,組成 12bit 的預(yù)分頻值 TPreScaler 。當(dāng) DemodReg 寄存器的 TPrescalEven 位為 0 ,則 定時器的分頻后頻率為: ftimer = 13.56 MHz / (2 TPreScaler+1) ,如果 TPrescalEven 位為 1 ,則 ftimer = 13.56MHz / (2 TPreScaler+2)
(18)TxASKReg寄存器Force100ASK: 1 強制 100% ASK 調(diào)制
(19)TPrescalerReg寄存器
(20)TReloadReg寄存器
(21)TReloadReg寄存器![]()
5.RC522的命令
RC522主要命令介紹:
1.IDLE 命令 , MFRC522 處于空閑模式。該命令也用來終止實際正在執(zhí)行的命令。2.CALCCRC 命令 , FIFO 的內(nèi)容被傳輸?shù)?/span> CRC 協(xié)處理器并執(zhí)行 CRC 計算這個命令必須通過向命令寄 存器寫入任何一個命令(如空閑命令)來軟件清除。3.TRANSMIT 命令 ,發(fā)送 FIFO 的內(nèi)容。在發(fā)送 FIFO 的內(nèi)容之前必須對所有相關(guān)的寄存器進行設(shè) 置。該命令在 FIFO 變成空后自動終止。4.RECEIVE 命令 ,該命令在接收到的數(shù)據(jù)流結(jié)束時自動終止。5.TRANSCEIVE 命令 ,該循環(huán)命令重復(fù)發(fā)送 FIFO 的數(shù)據(jù),并不斷接收 RF 場的數(shù)據(jù)。第一個動作是 發(fā)送,發(fā)送結(jié)束后命令變?yōu)榻邮諗?shù)據(jù)流。6.MFAUTENT 命令,該命令用來處理 Mifare 認(rèn)證以使能到任何 Mifare 普通卡的安全通信。在命令 激活前以下數(shù)據(jù)必須被寫入 FIFO : 認(rèn)證命令碼,塊地址,秘鑰,序列號。該命令在 Mifare 卡被 認(rèn)證且 Status2Reg 寄存器的 MFCrypto1On 位置位時自動終止。7.SOFTRESET 命令 ,所有寄存器都設(shè)置成復(fù)位值。命令完成后自動終止。
6.RC522的操作方法
1. 清除相關(guān)的狀態(tài)位和錯誤標(biāo)記位2. 待發(fā)送的數(shù)據(jù)放入 FIFO3. 如果最后 1 字節(jié)不是全部發(fā)送,設(shè)置發(fā)送位的數(shù)目4. 啟動 TRANSCEIVE 命令5. 查詢狀態(tài),等待接收結(jié)束6. 從 FIFO 中取出卡反饋的數(shù)據(jù)
五。RC522如何操作S50卡
1.Mifare S50卡操作回顧
? ? ? ? 首先響應(yīng)數(shù)據(jù),之后防沖突,選卡,最后數(shù)據(jù)的傳輸。
補充:S50卡操作命令
2.RC522的驅(qū)動組成
? 使用分層結(jié)構(gòu),用戶使用的是卡操作命令接口
1.14443-A命令,MF1卡命令
2.RC522命令
3.通用寄存器讀寫
4.SPI驅(qū)動:收發(fā)數(shù)據(jù)? ? ??
3.RC522操作實例
1.Cubemx配置
時鐘,SPI接口,打印串口? ? ?
2.寄存操作驅(qū)動分析
3.底層命令驅(qū)動分析
PcdComMF522()函數(shù)
4.應(yīng)用層操作接口函數(shù)分析
PcdRequest()函數(shù)
PcdAnticoll()函數(shù)
總之:
? ? ? ? 在keil工程中,使用公司提供的庫,調(diào)用。
根據(jù)上述設(shè)定的流程圖,書寫代碼
六。PN532驅(qū)動
1.PN532簡介
1.一款基于 8051 單片機核心,高度集成的非接觸式收發(fā)模塊2.它支持 6 個不同的操作模式: ( 手機既能做讀卡器也能模擬卡的秘密 )????????ISO/IEC14443A/MIFARE 讀 / 寫器????????FeliCa 讀 / 寫器????????ISO/IEC 14443B 讀 / 寫器????????ISO/IEC14443A MIFARE卡模擬模式????????FeliCa卡模擬模式????????ISO/IEC 18092 ECMA 340點對點3.對外支持3 種接口:????????I2C????????SPI????????HSU, (Serial High Speed UART) 高速 UART 口
原理圖
2.PN532操作Mifare卡的正確方法
HSU交互的幀格式
1.前序, PREAMBLE 1 字節(jié), 00h2.開始碼, START CODE 2 字節(jié), 00h FFh3.數(shù)據(jù)長度, LEN , 1 字節(jié) ,數(shù)據(jù)區(qū)字節(jié)數(shù) (TFI and PD0 to PDn) ,最大 2554.長度校驗, LCS , 1 字節(jié), LEN 的校驗和, [LEN + LCS] = 00h5.幀 ID , TFI , 1 字節(jié),根據(jù)消息方向取值????????D4h 表示 主機 ==>PN532????????D5h 表示 PN532 ==> 主機 DATA6.包數(shù)據(jù), Package Data , LEN-1 字節(jié)的包數(shù)據(jù), PD0 是命令碼7.數(shù)據(jù)校驗碼, DCS , 1 字節(jié), [TFI + PD0 + PD1 + … + PDn + DCS] = 00h, 尾序,POSTAMBLE , 1 字節(jié), 00h
擴展幀格式
和標(biāo)準(zhǔn)幀有區(qū)別的地方數(shù)據(jù)區(qū)長度, LENGTH = LENM x 256 + LENL長度校驗, LCS: [LENM + LENL + LCS] = 00h
ACK幀
NAK幀
初始化流程
交互流程(刷卡時的數(shù)據(jù)交互)
PN532的命令
PN532的喚醒
????????上電后,PN532 會自動進入低功耗狀態(tài),所以,發(fā)送的第一條命令,必須使用加長的數(shù)據(jù)幀頭來喚醒。![]()
列出射頻場中的卡 —— 詢卡、防沖突、選卡,可同時操作多張![]()
![]()
七。如何驅(qū)動舵機
1.什么是舵機
????????舵機是一種位置(角度)伺服的驅(qū)動器,適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。舵機是 融合了多項技術(shù)的科技結(jié)晶體,它由直流電機、減速齒輪組、傳感器和控制電路組成,是一套自動控制 裝置,用一個閉環(huán)反饋控制回路不斷校正輸出的偏差,使系統(tǒng)的輸出保持恒定。
2.舵機驅(qū)動方式
????????PWM信號的占空比來控制的,該 PWM 信號的周期位 20ms ,寬度在 0.5ms——2.5ms 之間,驅(qū)使舵機轉(zhuǎn) 動角在0——180 度之間? ? ? ? ? ? ? ?![]()
![]()
3.舵機驅(qū)動代碼分析
1.STM32Cubemx配置
????????目標(biāo),將定時器的通道配置成PWM 輸出模式,周期 20ms ,占空比可調(diào), 0.5ms~2.5ms2.重點代碼
????????啟動定時器的PWM 輸出????????修改占空比
八。前臺讀寫器實現(xiàn)
1.實現(xiàn)方案回顧
2.讀寫器代碼設(shè)計
九。門禁讀寫器實現(xiàn)
1.實現(xiàn)方案回顧
2.硬件需要注意的地方
3.參數(shù)區(qū)的設(shè)計
4.讀寫器代碼設(shè)計文章來源:http://www.zghlxwxcb.cn/news/detail-730891.html
十。項目展示文章來源地址http://www.zghlxwxcb.cn/news/detail-730891.html
到了這里,關(guān)于4.物聯(lián)網(wǎng)射頻識別,RFID開發(fā)【智能門禁項目】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!