版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗題目 基于IPv6的Contiki 系統(tǒng)入門實驗 實驗時間 2015/1/4一、 實驗?zāi)康模毫私釸FID 相關(guān)知識。掌握RFID 模塊自動識別IC 卡工作原理。二、 實驗原理及程序分析:1、STM8S處理器概述本實驗所使用RFID 模塊由STM8處理器和MFRC531(高集成非接觸讀寫芯片)兩片芯片搭建而成的。STM8是基于8 位框架結(jié)構(gòu)的微控制器,其CPU 內(nèi)核有6 個內(nèi)部寄存器,通過這些寄存器可高效地進(jìn)行數(shù)據(jù)處理。STM8的指令集支持80條基本語句及20種尋址模式,而且CPU的6 個內(nèi)部寄存器都擁有可尋址的地址。STM8 內(nèi)部的FLASH程序存儲器和數(shù)據(jù)EEPROM由一組通用寄存器來控
2、制。用戶可以使用這些寄存器來編程或擦除存儲器的內(nèi)容、設(shè)置寫保護、或者配置特定的低功耗模式。用戶也可以對器件的選項字節(jié)(Option byte) 進(jìn)行編程。FLASHl STM8S EEPROM 分為兩個存儲器陣列: 最多至128K字節(jié)的FLASH程序存儲器,不同的器件容量有所不同。 最多至2K字節(jié)的數(shù)據(jù)EEPROM(包括option byte 選擇字節(jié)),不同的器件容量有所不同。l 編程模式 字節(jié)編程和自動快速字節(jié)編程(沒有擦除操作) 字編程 塊編程和快速塊編程(沒有擦除操作) 在編程/ 擦除操作結(jié)束時和發(fā)生非法編程操作時產(chǎn)生中斷l(xiāng) 讀同時寫(RWW)功能。該特性并不是所有STM8S器件都擁有
3、。l 在應(yīng)用編程(IAP)和在線編程(ICP)能力。l 保護特性 存儲器讀保護(ROP) 基于存儲器存取安全系統(tǒng)(MASS 密鑰)的程序存儲器寫保護 基于存儲器存取安全系統(tǒng)(MASS 密鑰)的數(shù)據(jù)存儲器寫保護 可編程的用戶啟動代碼區(qū)域(UBC) 寫保護l 在待機(Halt) 模式和活躍待機(Active-halt)模式下,存儲器可配置為運行狀態(tài)和掉電狀態(tài)。數(shù)據(jù)EEPROM(DATA) 區(qū)域可用于存儲用戶具體項目所需的數(shù)據(jù)。默認(rèn)情況下,DATA 區(qū)域是寫保護的,這樣可以在主程序工作在IAP 模式時防止DATA 區(qū)域被無意地修改。只有使用特定的MASS 密鑰才能對DATA 區(qū)域的寫保護解鎖。2、M
4、FR531 概述MF RC531 是應(yīng)用于13.56MHz 非接觸式通信中高集成讀寫卡芯片系列中的一員。該讀寫卡芯片系列利用了先進(jìn)的調(diào)制和解調(diào)概念,完全集成了在13.56MHz 下所有類型的被動非接觸式通信方式和協(xié)議。芯片管腳兼容MF RC500、MF RC530 和SL RC400。MF RC531支持 ISO/IEC14443A/B 的所有層和MIFARE經(jīng)典協(xié)議,以及與該標(biāo)準(zhǔn)兼容的標(biāo)準(zhǔn)。支持®高速MIFARE非接觸式通信波特率。內(nèi)部的發(fā)送器部分不需要增加有源電路就能夠直接驅(qū)動近操作距離®的天線(可達(dá)100mm)。接收器部分提供一個堅固而有效的解調(diào)和解碼電路,用于ISO
5、14443A 兼容的應(yīng)答器信號。數(shù)字部分處理 ISO14443A 幀和錯誤檢測(奇偶CRC)。此外,它還支持快速 CRYPTO1 加密算法,用于驗證MIFARE 系列產(chǎn)品。與主機通信模式有8 位并行和SPI 模式,用戶可根據(jù)不同的需求選擇不同的模式,這樣給讀卡器/ 終端的設(shè)計提供了極大的靈活性。圖1.1 MFRC531特性l 高集成度的調(diào)制解調(diào)電路;l 采用少量外部器件,即可輸出驅(qū)動級接至天線;l 最大工作距離100mm;l 支持ISO/IEC14443 A/B 和MIFARE經(jīng)典協(xié)議;l 支持非接觸式高速通信模式,波特率可達(dá)424kb/s;l 采用Crypto1加密算法并含有安全的非易失性內(nèi)
6、部密匙存儲器;l 管腳兼容MF RC500、MF RC530和SL RC400;l 與主機通信的2 種接口:并行接口和 SPI,可滿足不同用戶的需求;l 自動檢測微處理器并行接口類型;l 靈活的中斷處理;l 64字節(jié)發(fā)送和接收 FIFO 緩沖區(qū);l 帶低功耗的硬件復(fù)位;l 可編程定時器;l 唯一的序列號;l 用戶可編程初始化配置;l 面向位和字節(jié)的幀結(jié)構(gòu);l 數(shù)字、模擬和發(fā)送器部分經(jīng)獨立的引腳分別供電;l 內(nèi)部振蕩器緩存器連接13.56MHz 石英晶體;l 數(shù)字部分的電源(DVDD )可選擇3.3V 或5V;l 在短距離應(yīng)用中,發(fā)送器(天線驅(qū)動)可以用3.3V 供電。MF RC531 適用于各
7、種基于ISO/IEC 14443 標(biāo)準(zhǔn),并且要求低成本、小尺寸、高性能以及單電源的非接觸式通信的應(yīng)用場合。l 公共交通終端;l 手持終端;l 板上單元;l 非接觸式PC終端;l 計量;l 非接觸式公用電話。并行微控制器接口自動檢測連接的8 位并行接口的類型。它包含一個的雙向 FIFO 緩沖區(qū)和一個可配置的中斷輸出。這樣就為連接各種MCU 提供了很大的靈活性。即使使用非常低成本的器件也能滿足高速非接觸式通信的要求。帶FIFO 的SPI 從機接口,其串行時鐘SCK 由主機提供。數(shù)據(jù)處理部分執(zhí)行數(shù)據(jù)的并行串行轉(zhuǎn)換。它支持的幀包括 CRC和奇偶校驗。它以完全透明的模式進(jìn)行操作,因而支持ISO14443
8、A 的所有層。狀態(tài)和控制部分允許對器件進(jìn)行配置以適應(yīng)環(huán)境的影響并使性能調(diào)節(jié)到最佳狀態(tài)。當(dāng)與MIFARE Standard和MIFARE 產(chǎn)品通信時,使用高速 CRYPTO1流密碼單元和一個可靠的非易失性密匙存儲器。模擬電路包含了一個具有非常低阻抗橋驅(qū)動器輸出的發(fā)送部分。這使得最大操作距離可達(dá)100mm。接收器可以檢測到并解碼非常弱的應(yīng)答信號。由于采用了非常先進(jìn)的技術(shù),接收器已不再是限制操作距離的因素了。該器件為32腳SO 封裝。器件使用了3 個獨立的電源以實現(xiàn)在EMC特性和信號解耦方面達(dá)到最佳性能。MF RC531具有出色的 RF性能并且模擬和數(shù)字部分可適應(yīng)不同的操作電壓。非接觸式天線使用以下
9、4 個管腳:為了驅(qū)動天線,MF RC531通過 TX1 和TX2 提供13.56MHz 的能量載波。根據(jù)寄存器的設(shè)定對發(fā)送數(shù)據(jù)進(jìn)行調(diào)制得到發(fā)送的信號。卡采用RF場的負(fù)載調(diào)制進(jìn)行響應(yīng)。天線拾取的信號經(jīng)過天線匹配電路送到RX 腳。MF RC531 內(nèi)部接收器對信號進(jìn)行檢測和解調(diào)并根據(jù)寄存器的設(shè)定進(jìn)行處理。然后數(shù)據(jù)發(fā)送到并行接口由微控制器進(jìn)行讀取。MF RC531 支持MIFARE有源天線的概念。它可以處理管腳甅FIN 和MFOUT處的MIFARE核心®模塊的基帶信號NPAUSE 和KOMP 。MIFARE接口可采用下列方式與甅F RC531的模擬或數(shù)字部分單獨通信:l 模擬電路可通過MI
10、FARE 接口獨立使用。這種情況下,MFIN 連接到外部產(chǎn)生的NPAUSE信號。MFOUT 提供KOMP 信號。l 數(shù)字電路可通過MIFARE接口驅(qū)動外部信號電路。這種情況下,甅FOUT提供內(nèi)部產(chǎn)生的NPAUSE 信號而MFIN 連接到外部輸入的KOMP 信號。4 線SPI 接口:代碼實現(xiàn)如下/功 能:尋卡/參數(shù)說明: req_codeIN:尋卡方式/ 0x52 = 尋感應(yīng)區(qū)內(nèi)所有符合14443A標(biāo)準(zhǔn)的卡/ 0x26 = 尋未進(jìn)入休眠狀態(tài)的卡/ pTagTypeOUT:卡片類型代碼/ 0x4400 = Mifare_UltraLight/ 0x0400 = Mifare_One(S50)/ 0
11、x0200 = Mifare_One(S70)/ 0x0800 = Mifare_Pro/ 0x0403 = Mifare_ProX/ 0x4403 = Mifare_DESFire/返 回: 成功返回MI_OK/signed char PcdRequest(unsigned char req_code,unsigned char *pTagType)signed char status;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MFRC531_WriteReg(RegCh
12、annelRedundancy,0x03);MFRC531_ClearBitMask(RegControl,0x08);MFRC531_WriteReg(RegBitFraming,0x07);MFRC531_SetBitMask(RegTxControl,0x03);MFRC531_SetTimer(4);MfComData.MfCommand = PCD_TRANSCEIVE;MfComData.MfLength = 1;MfComData.MfData0 = req_code;status = MFRC531_ISO14443_Transceive(pi);if (!status)if
13、(MfComData.MfLength != 0x10) status = MI_BITCOUNTERR; *pTagType = MfComData.MfData0;*(pTagType+1) = MfComData.MfData1;return status;/將存在RC531的EEPROM中的密鑰匙調(diào)入RC531的FIFO/input: startaddr=EEPROM地址/char PcdLoadKeyE2(unsigned int startaddr)char status;struct TransceiveBuffer MfComData;struct TransceiveBuff
14、er *pi;pi = &MfComData;MfComData.MfCommand = PCD_LOADKEYE2;MfComData.MfLength = 2;MfComData.MfData0 = startaddr & 0xFF;MfComData.MfData1 = (startaddr >> 8) & 0xFF;status = MFRC531_ISO14443_Transceive(pi);return status;/功能:將已轉(zhuǎn)換格式后的密鑰送到RC531的FIFO 中/input:keys=密鑰/signed char PcdAuthKe
15、y(unsigned char *pKeys)signed char status;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MFRC531_SetTimer(4);MfComData.MfCommand = PCD_LOADKEY;MfComData.MfLength = 12;memcpy(&MfComData.MfData0, pKeys, 12);status = MFRC531_ISO14443_Transceive(pi);return status;/
16、功能:用存放RC531的FIFO 中的密鑰和卡上的密鑰進(jìn)行驗證/input:auth_mode=驗證方式,0x60:驗證A密鑰,0x61:驗證B 密鑰/ block=要驗證的絕對塊號/ g_cSNR=序列號首地址/signed char PcdAuthState(unsigned char auth_mode,unsigned charblock,unsigned char *pSnr)signed char status;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MFRC
17、531_WriteReg(RegChannelRedundancy,0x0F);MFRC531_SetTimer(4);MfComData.MfCommand = PCD_AUTHENT1;MfComData.MfLength = 6;MfComData.MfData0 = auth_mode;MfComData.MfData1 = block;memcpy(&MfComData.MfData2, pSnr, 4);status = MFRC531_ISO14443_Transceive(pi);if (status = MI_OK)if (MFRC531_ReadReg(RegSec
18、ondaryStatus) & 0x07) status = MI_BITCOUNTERR; elseMfComData.MfCommand = PCD_AUTHENT2;MfComData.MfLength = 0;status = MFRC531_ISO14443_Transceive(pi);if (status = MI_OK)if (MFRC531_ReadReg(RegControl) & 0x08) status = MI_OK; else status = MI_AUTHERR; return status;/讀mifare_one卡上一塊(block)數(shù)據(jù)(1
19、6字節(jié))/input: addr = 要讀的絕對塊號/output:readdata = 讀出的數(shù)據(jù)/signed char PcdRead(unsigned char addr,unsigned char *pReaddata)signed char status;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi= &MfComData;MFRC531_SetTimer(4);MFRC531_WriteReg(RegChannelRedundancy,0x0F);MfComData.MfCommand =
20、 PCD_TRANSCEIVE;MfComData.MfLength = 2;MfComData.MfData0 = PICC_READ;MfComData.MfData1 = addr;status = MFRC531_ISO14443_Transceive(pi);if (status = MI_OK)if (MfComData.MfLength != 0x80) status = MI_BITCOUNTERR; else memcpy(pReaddata, &MfComData.MfData0, 16); return status;/寫數(shù)據(jù)到卡上的一塊signed char s
21、tatus;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MFRC531_SetTimer(5);MFRC531_WriteReg(RegChannelRedundancy,0x07);MfComData.MfCommand = PCD_TRANSCEIVE;MfComData.MfLength = 2;MfComData.MfData0 = PICC_WRITE;MfComData.MfData1 = addr;status = MFRC531_ISO14443_Transc
22、eive(pi);if (status != MI_NOTAGERR)if(MfComData.MfLength != 4) status=MI_BITCOUNTERR; elseMfComData.MfData0 &= 0x0F;switch (MfComData.MfData0)case 0x00:status = MI_NOTAUTHERR;/input:adde=要寫的絕對塊號/ writedata=寫入數(shù)據(jù)/signed char PcdWrite(unsigned char addr,unsigned char*pWritedata)signed char status;s
23、truct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MFRC531_SetTimer(5);MFRC531_WriteReg(RegChannelRedundancy,0x07);MfComData.MfCommand = PCD_TRANSCEIVE;MfComData.MfLength = 2;MfComData.MfData0 = PICC_WRITE;MfComData.MfData1 = addr;status = MFRC531_ISO14443_Transceive(pi
24、);if (status != MI_NOTAGERR)if(MfComData.MfLength != 4) status=MI_BITCOUNTERR; elseMfComData.MfData0 &= 0x0F;switch (MfComData.MfData0)case 0x00:status = MI_NOTAUTHERR;break;case 0x0A:status = MI_OK;break;default:status = MI_CODEERR;break;if (status = MI_OK)MFRC531_SetTimer(5);MfComData.MfComman
25、d = PCD_TRANSCEIVE;MfComData.MfLength = 16;memcpy(&MfComData.MfData0, pWritedata, 16);status = MFRC531_ISO14443_Transceive(pi);if (status != MI_NOTAGERR)MfComData.MfData0 &= 0x0F;switch(MfComData.MfData0)case 0x00:status = MI_WRITEERR;break;case 0x0A:status = MI_OK;break;default:status = MI_
26、CODEERR;break;MFRC531_SetTimer(4);return status;/命令卡進(jìn)入休眠狀態(tài)/signed char PcdHalt()signed char status = MI_OK;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MfComData.MfCommand = PCD_TRANSCEIVE;MfComData.MfLength = 2;MfComData.MfData0 = PICC_HALT;MfComData.MfData1 = 0
27、;status = MFRC531_ISO14443_Transceive(pi);if (status)if (status=MI_NOTAGERR | status=MI_ACCESSTIMEOUT)status = MI_OK;MFRC531_WriteReg(RegCommand,PCD_IDLE);return status;/硬件版本號const unsigned char hardmodel12 = "SL601F-0512"unsigned char g_bReceOk; /正確接收到上位機指令標(biāo)志unsigned char g_bReceAA; /接收到上
28、位機發(fā)送的AA 字節(jié)標(biāo)志unsigned char g_bRc531Ok; /RC531復(fù)位正常標(biāo)志unsigned int g_cReceNum; /接收到上位機的字節(jié)數(shù)unsigned int g_cCommand; /接收到的命令碼unsigned char g_cSNR4; /M1卡序列號unsigned char g_cIcdevH; /設(shè)備標(biāo)記unsigned char g_cIcdevL; /設(shè)備標(biāo)記unsigned char g_cFWI; /unsigned char g_cCidNad; /unsigned char g_cReceBuf64; /和上位機通訊時的緩沖區(qū)UA
29、RT2_Cmd(ENABLE);/響應(yīng)上位機發(fā)送的讀取硬件版本號命令/void ComGetHardModel(void)memcpy(&g_cReceBuf0, &hardmodel0, sizeof(hardmodel);AnswerOk(&g_cReceBuf0, sizeof(hardmodel);/響應(yīng)上位機發(fā)送的設(shè)置RC531協(xié)議命令,ISO14443A/B/void ComPcdConfigISOType(void)if (MI_OK = MFRC531_CfgISOType(g_cReceBuf6) AnswerCommandOk(); else Ans
30、werErr(-1); /響應(yīng)上位機發(fā)送的天線命令/void ComPcdAntenna(void)char status;if (!g_cReceBuf6) status = MFRC531_CloseAnt(); elsedelay_ms(10);status = MFRC531_OpenAnt();delay_ms(10);if (status = MI_OK) AnswerCommandOk(); else AnswerErr(FAULT10); /響應(yīng)上位機發(fā)送的A卡休眠命令/void ComHlta(void)if (MI_OK = PcdHalt() AnswerCommandO
31、k(); else AnswerErr(FAULT10); /正確執(zhí)行完上位機指令,應(yīng)答(有返回數(shù)據(jù))/input:answerdata = 應(yīng)答數(shù)據(jù)/ answernum = 數(shù)據(jù)長度/void AnswerOk(unsigned char *answerdata, unsigned int answernum)unsigned char chkdata;unsigned int i;disableInterrupts();UART2_SendByte(0xAA); /發(fā)送命令頭UART2_ SendByte(0xBB);chkdata = (unsigned char)(answernum + 6) & 0xFF); /長度字,包括狀態(tài)字和效驗字UART2_SendByte(chkdata);chkdata = (unsigned char)(answernum + 6)>>8) & 0xFF);UART2_SendByte(chkdata);UART2_SendByte(g_cIcdevH); /發(fā)送設(shè)備標(biāo)識if (g_cIcdevH = 0xAA)UART2_SendByte(0);UART2_SendByte(g_cIcdevL);if (g_cIcdevL = 0xAA)UART2_SendByte
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度農(nóng)村土地承包經(jīng)營權(quán)抵押貸款服務(wù)合同
- 2025年度家電維修質(zhì)量監(jiān)督與認(rèn)證服務(wù)合同4篇
- 二零二五年度跨境電商平臺承包合作店面服務(wù)合同3篇
- 2025年度木材加工廠專用木托盤租賃及更新?lián)Q代合同4篇
- 二零二五年度體育用品門面店鋪轉(zhuǎn)讓與市場拓展合同4篇
- 二零二五年度別墅窗簾個性化定制合同范本4篇
- 2025年度網(wǎng)紅直播鋪面轉(zhuǎn)租合同協(xié)議書4篇
- 2025年度藕塘生態(tài)農(nóng)業(yè)園區(qū)建設(shè)與運營管理合同樣本4篇
- 二零二五年度二零二五苗木新品種研發(fā)與推廣合同3篇
- 2025年度智能車庫門維修保養(yǎng)服務(wù)合同4篇
- 四川省高職單招電氣技術(shù)類《電子基礎(chǔ)》歷年考試真題試題庫(含答案)
- 中級半導(dǎo)體分立器件和集成電路裝調(diào)工技能鑒定考試題庫(含答案)
- 2024年江西生物科技職業(yè)學(xué)院單招職業(yè)技能測試題庫帶解析答案
- 橋本甲狀腺炎-90天治療方案
- (2024年)安全注射培訓(xùn)課件
- 2024版《建設(shè)工程開工、停工、復(fù)工安全管理臺賬表格(流程圖、申請表、報審表、考核表、通知單等)》模版
- 部編版《道德與法治》六年級下冊教材分析萬永霞
- 酒店人防管理制度
- 油田酸化工藝技術(shù)
- 上海高考英語詞匯手冊列表
- 移動商務(wù)內(nèi)容運營(吳洪貴)任務(wù)五 其他內(nèi)容類型的生產(chǎn)
評論
0/150
提交評論