fm17xx數(shù)據(jù)手冊與編程指南fm1715_第1頁
fm17xx數(shù)據(jù)手冊與編程指南fm1715_第2頁
fm17xx數(shù)據(jù)手冊與編程指南fm1715_第3頁
fm17xx數(shù)據(jù)手冊與編程指南fm1715_第4頁
fm17xx數(shù)據(jù)手冊與編程指南fm1715_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、FM1715編程指南Ver 1.02004 年 4 月復(fù)旦微電子第 1 頁 共 47 頁 概述4二、ISO14443A 基礎(chǔ)5卡片返回的代碼說明5基本命令5REQUEST52.2.2OLL5SELECT6AUTHENTICATION6HALT6READ7WRITE7INCREMENT7DECREMENT8RESTORE8TRANSFER8三、FM1715 簡介10自動偵測微處理器接口類型10不同類型微處理器接口連接關(guān)系103.3 FM1715 寄存器11四、典型應(yīng)用電路13五、底層函數(shù)庫14頭文件14常用函數(shù)185.2.15.2.25.2.35.2.4卡片復(fù)位應(yīng)答信號的判斷18接收到的卡片 U

2、ID 號的判別18保存卡片的 UID 號19設(shè)置待發(fā)送數(shù)據(jù)的字節(jié)數(shù)215.3 FM1715 基本函數(shù)235.3.1 總線選擇235.3.2 FM1715 初始化235.3.35.3.45.3.55.3.65.3.75.3.8命令傳輸24讀 FM1715 中的 EEPROM 數(shù)據(jù)25向 FM1715 的 EEPROM 中寫入數(shù)據(jù)26清除 FM1715 的 FIFO 中的數(shù)據(jù)26向 FM1715 的 FIFO 中寫入 x 字節(jié)數(shù)據(jù)27從 FM1715 的 FIFO 中讀出 x 字節(jié)數(shù)據(jù)27FM1715 卡片操作基本函數(shù)29HALT29LOADKEY30REQUEST315.4.4OLLI31第 2

3、 頁 共 47 頁SELECT33AUTHENTICATION34READ35WRITE36INCREMENT38DECREMENT39RESTORE40TRANSFER42六、例程44卡片觸發(fā)44INITVAL VALUE456.3 讀卡466.4 寫卡46第 3 頁 共 47 頁 概述在此文檔中用戶可找到關(guān)于 FM1715 底層函數(shù)庫的描述,使用這些函數(shù)庫,可方便地使用 FM1715 模塊MIFARE 卡和標(biāo)準(zhǔn)卡.此編程指南中提供的底層函數(shù)庫是基于 MCS-51 的應(yīng)用環(huán)境,采用 C51編制,并在 KEILC51V6.0編譯環(huán)境下通過。第 4 頁 共 47 頁二、ISO14443A 基礎(chǔ)2

4、.1 卡片返回的代碼說明0 x00:0 x01:0 x04:0 x05:0 x0A:對指定地址的被CRC 或奇偶校驗錯誤交易: 溢出錯誤其它命令:對指定地址的CRC 或奇偶校驗錯誤確認(rèn)被2.2 基本命令2.2.1 REQUEST控制單元 射頻卡d:0 x26 or 0 x520 x26:IDLE 模式,只選擇天線范圍內(nèi) IDLE 模式的卡片0 x52:ALL 模式,選擇天線范圍內(nèi)所有卡片Len:0射頻卡 控制單元Len:2Data0: _TagType(低字節(jié))0 x04 Data1: _TagType(高字節(jié))0 x00在重新選擇卡片時必須執(zhí)行 request 操作。2.2.2OLL控制單元

5、 射頻卡d:0 x93Len: Data0:10 x20NVB射頻卡 控制單元Len: 5Data0:Data1:_Snr(LL)_Snr(LH)第 5 頁 共 47 頁Data2:Data3:Data4:_Snr(HL)_Snr(HH) BCC卡片系列號此操作必須緊隨在 request 操作后執(zhí)行.如果被選的卡片的系列號已知,可以不用執(zhí)行此操作2.2.3 SELECT控制單元 射頻卡d:0 x93Len: Data0:Data1:Data2:Data3:Data4:Data5:60 x70_Snr(LL)_Snr(LH)_Snn(HL)_Snr(HH)BCC卡片系列號(UID)射頻卡 控制單

6、元Len: 1Data0: _Size (卡片容量值:0 x08 或 0 x88)2.2.4 AUTHENTICATION控制單元 射頻卡d:0 x6020 x60or 0 x61Len: Data0:Data1:or 0 x61(0 x60 使用 KEYA 作驗證,0 x61 使 KEYB 作驗證) r (扇區(qū)號)*4(即每個扇區(qū)的塊 0 的塊地址)射頻卡 控制單元Len: 0如果讀寫模塊中的與卡片中的相匹配,則可以進行讀、寫等操作。2.2.5 HALT控制單元 射頻卡d:0 x50Len:0射頻卡 控制單元Len: 0將操作后的卡片置于 halt 模式。如果又要對卡片操作,必須重新執(zhí)行re

7、quest 操作。第 6 頁 共 47 頁2.2.6 READ控制單元 射頻卡d:0 x30Len: Data0:1_Adr塊地址(063)射頻卡 控制單元Len: 16Data0: 數(shù)據(jù)塊的第一字節(jié)Data15:數(shù)據(jù)塊的最后一個字節(jié)2.2.7 WRITE控制單元 射頻卡d:0 xA0Len: Data0:17_Adr要寫入數(shù)據(jù)的塊地址(163)射頻卡 控制單元Len:4BitDATA0: 0 x0A(ACK)Data1:Data16:要寫入卡片中的第一個數(shù)據(jù)要寫入卡片中的最后一個數(shù)據(jù)射頻卡 控制單元Len: 4BitDATA0: 0 x0A(ACK)2.2.8 INCREMENT控制單元 射

8、頻卡d:0 xC1Len: Data0:5_Adr數(shù)值塊的地址射頻卡 控制單元Len: 4BitDATA0:Data1:Data2:Data3:0 x0A(ACK)_Value(LL)_Value(LH)_Value(HL)第 7 頁 共 47 頁Data4:_Value(HH)要增加的數(shù)值射頻卡 控制單元Len:02.2.9 DECREMENT控制單元 射頻卡d:0 xC0Len: Data0:5_Adr數(shù)值塊的地址射頻卡 控制單元Len: 4BitDATA0:Data1:Data2:Data3:Data4:0 x0A(ACK)_Value(LL)_Value(LH)_Value(HL)_V

9、alue(HH)要減少的數(shù)值射頻卡 控制單元Len: 02.2.10 RESTORE控制單元 射頻卡d:0 xC2Len: Data0:6_Adr數(shù)值塊的地址射頻卡 控制單元Len: 4BitDATA0:Data1:Data2:Data3:Data4:0 x0A(ACK)0 x000 x000 x000 x00射頻卡 控制單元Len:0此操作相當(dāng)于執(zhí)行 decrement(0)。2.2.11 TRANSFER控制單元 射頻卡第 8 頁 共 47 頁d:0 xB0Len: Data0:1Adr要傳輸數(shù)據(jù)的卡片塊地址射頻卡 控制單元Len: 4BitDATA0:0 x0A(ACK)第 9 頁 共

10、47 頁三、FM1715 簡介3.1 自動偵測微處理器接類型在每一次上電或硬件復(fù)位后,F(xiàn)M1712/1714/1715 會復(fù)位并行微處理器接口模式,并且通過檢測控制管腳上的電平來偵測當(dāng)前的微處理器接口模式。3.2不同類型微處理器接口連接關(guān)系FM1715和不同微處理器接口的連接見下表:第 10 頁 共 47 頁FM1712 FM1714 FM1715并行接口類型獨立的讀/寫選通模式通用的讀/寫選通模式獨立的地址/數(shù)據(jù)總線復(fù)用的地址/數(shù)據(jù)總線獨立的地址/數(shù)據(jù)總線復(fù)用的地址/數(shù)據(jù)總線握手聯(lián)絡(luò)方式下復(fù)用地址/數(shù)據(jù)總線ALEHIGHALEHIGHASnAStrbA2A2LOWA2LOWHIGHA1A1H

11、IGHA1HIGHHIGHA0A0HIGHA0LOWnWaitNRDNRDNRDNDSNDSnDStrbNWRNWRNWRR/NWR/NWnWriteNCSLOWD7D0D7D0AD7AD0D7D0AD7AD0AD7AD0口3.3 FM1715 寄存器FM1715 的寄存器按功能不同分成 8 組,每組為一頁,包含 8 個寄存器:Page0:指令和狀態(tài)寄存器組 Page1:控制和狀態(tài)寄存器組 Page2:發(fā)射及編碼控制寄存器組Page3:接收及控制寄存器組Page4:時間及校驗控制寄存器組Page5:FIFO,Timer 及 IRQ Page6:預(yù)留寄存器組 Page7:預(yù)留寄存器組控制寄存器組

12、第 11 頁 共 47 頁Page地址(hex)寄存器名功能00Page選擇寄存器組1d指令寄存器2FIFOData64byte FIFO 的輸入輸出寄存器3PrimarySus,及 FIFO 的標(biāo)識位寄存器4FIFOLength當(dāng)前 FIFO 內(nèi) byte 數(shù)5SecondarySus各種狀態(tài)標(biāo)識寄存器6erruptEn中斷使能/控制寄存器7erruptRq中斷請求標(biāo)識寄存器18Page選擇寄存器組9Control各種控制標(biāo)識寄存器AErrorFlag上一條指令結(jié)束后錯誤標(biāo)識BColl偵測到的第一個位的位置CTimerValue當(dāng)前 Timer 值DCRCResultLSBCRC 協(xié)處理器低

13、 8 位ECRCResultMSBCRC 協(xié)處理器高 8 位FBitFraming調(diào)整面向 bit 的幀格式210Page選擇寄存器組11TxControl控制寄存器12CWConductance選擇發(fā)射腳 TX1 和 TX2 發(fā)射天線的阻抗13ModConductance定義輸出驅(qū)動阻抗14CoderControl定義編碼模式和時鐘頻率15ModWidth選擇載波調(diào)制寬度16PreSet16預(yù)設(shè)寄存器,不要改變內(nèi)容17TypeBFraming定義 ISO14443-B 幀格式318Page選擇寄存器組19RXControl1控制寄存器1ADecoderControl控制寄存器關(guān)于 FM171

14、5寄存器的詳細(xì)描述請參閱FM1712_1714_1715 中文說明書.pdf文檔。第 12 頁 共 47 頁1BBitPhase調(diào)整和時鐘相差1CRxthreshold選 bit的閾值1DBPSKDemControlBPSK控制寄存器1ERxControl2控制及選擇接收源1FClockQControl時鐘產(chǎn)生控制寄存器420Page選擇寄存器組21RxWait選擇發(fā)射和接收之間的時間間隔22ChannelRedundancy選擇數(shù)據(jù)校驗種類和模式23CRCPresetLSBCRC 預(yù)置寄存器低 8 位24CRCPresetMSBCRC 預(yù)置寄存器高 8 位25PreSet25預(yù)設(shè)寄存器,不要

15、改變內(nèi)容26MFOUTSelect選擇 MFOUT 信號源27PreSet27預(yù)設(shè)寄存器,不要改變內(nèi)容528Page選擇寄存器組29FIFOLevel定義 FIFO 溢出級別2ATimerClock選擇 Timer 時鐘的分頻2BTimerControl選擇 Timer 啟動/停止條件2CTimerReload Timer預(yù)置值2DIRQPinConfig IRQIRQ 輸出配置2EPreSet2E預(yù)設(shè)寄存器,不要改變內(nèi)容2FPreSet2F預(yù)設(shè)寄存器,不要改變內(nèi)容630Page選擇寄存器組31CryptoSelect認(rèn)證模式選擇32RFU預(yù)留寄存器33RFU預(yù)留寄存器34RFU預(yù)留寄存器35

16、RFU預(yù)留寄存器36RFU預(yù)留寄存器37RFU預(yù)留寄存器738Page選擇寄存器組39RFU預(yù)留寄存器3ARFU預(yù)留寄存器3BRFU預(yù)留寄存器3CRFU預(yù)留寄存器3DRFU預(yù)留寄存器3ERFU預(yù)留寄存器3FRFU預(yù)留寄存器四、典型應(yīng)用電路第 13 頁 共 47 頁五、底層函數(shù)庫5.1 頭文件/*/*/*/*/*/*/*main 程序頭文件 主要功能:常量定義編制:時間:修改:wangwenqing時間:2003 年 9 月*/*/*/*/*/*/*/#ifndef _MAIN_INCLUDED_ #define _MAIN_INCLUDED_/常量定義 #define FALSE #defin

17、eTRUE01/FM1715 命令碼 #defineTransceive #define Transmit #define ReadE2 #define WriteE2 #define Authent1 #define Authent2 #define LoadKeyE2 #define LoadKey0 x1E0 x1a 0 x030 x010 x0c 0 x140 x0b 0 x19/發(fā)送接收命令/發(fā)送命令/讀 FM1715 EEPROM 命令/寫 FM1715 EEPROM 命令/驗證命令認(rèn)證過程第 1 步/驗證命令認(rèn)證過程第 2 步/將密鑰從 EEPROM/將密鑰從 FIFO 緩存到

18、KEY 緩存到 KEY 緩存#defineRF_TimeOut #define Req0 x 0 x010 x02/發(fā)送命令延時時間#defil/數(shù)據(jù)類型定義#define uchar unsigned char#define uunsigned/卡片類型定義定義 #define TYPEA_MODE #define TYPEB_MODE #define SHANGHAI_MODE012/TypeA 模式/TypeB 模式/模式#define TM0_HIGH #define TM0_LOW #define TIMEOUT0 xf0 0 x60100/定時器 0/定時器 0 低位,4MS 定時

19、/超時計數(shù)器 4MS100=0.4 秒/射頻卡通信命令碼定義第 14 頁 共 47 頁#define #define #define #define #define #define #define #define #define #define #define #define #defineRF_CMD_REQUEST_STD RF_CMD_REQUEST_ALL0 x260 x520 x930 x930 x600 x610 x300 xa0 0 xc1 0 xc0 0 xc2 0 xb0 0 x50RF_CMD_OLRF_CMD_SELECTRF_CMD_AUTH_LA RF_CMD_AUT

20、H_LBRF_CMD_READ RF_CMD_WRITE RF_CMD_INC RF_CMD_DEC RF_CMD_RESTORE RF_CMD_TRANSFER RF_CMD_HALT/Sus Values#define #define #define #define #define #defineALL KEYB KEYA_AB CRC_A CRC_B0 x010 x040 x000 x4012#define #defineCRC_OK CRC_ERR01#define #defineBCC_OK BCC_ERR01/*卡類型定義*#define #define #define #defi

21、neMIFARE_8K MIFARE_TOKEN SHANGHAI_8K SHANGHAI_TOKEN0123/MIFARE 系列 8KB 卡片/MIFARE 系列 1KB TOKEN 卡片/標(biāo)準(zhǔn)系列 8KB 卡片標(biāo)準(zhǔn)系列 1KB TOKEN 卡片/* 函數(shù)錯誤代碼定義*#define #define #define #define #define #define #define #define #define #define #define #define有效) #define #define #define #define #defineFM1715_OK FM1715_NOTAGERR

22、FM1715_CRCERR FM1715_EMPTY FM1715_AUTHERR FM1715_PARITYERR FM1715_CODEERR FM1715_SERNRERR FM1715_SELECTERR FM1715_NOTAUTHERR FM1715_BITCOUNTERR0123456891011/正確/無卡/卡片 CRC 校驗錯誤/數(shù)值溢出錯誤/驗證不成功/卡片奇偶校驗錯誤/通訊錯誤(BCC 校驗錯)/卡片序列號錯誤(olli錯誤)/卡片數(shù)據(jù)長度字節(jié)錯誤(SELECT 錯誤)/卡片沒有通過驗證/從卡片接收到的位數(shù)錯誤/從卡片接收到的字節(jié)數(shù)錯誤(僅讀函數(shù)FM1715_BYTECO

23、UNTERR 12FM1715_RESTERR FM1715_TRANSERR FM1715_WRITEERR FM1715_INCRERR FM1715_DECRERR1314151617/調(diào)用 restore 函數(shù)出錯/調(diào)用 transfer 函數(shù)出錯/調(diào)用 write 函數(shù)出錯/調(diào)用 increment 函數(shù)出錯/調(diào)用decrement 函數(shù)出錯第 15 頁 共 47 頁#define #define #define #define #define #define #define #define #define #defineFM1715_READERR FM1715_LOADKEYER

24、R FM1715_FRAMINGERR FM1715_REQERR FM1715_SELERR18192021222324252642/調(diào)用 read 函數(shù)出錯/調(diào)用 LOADKEY 函數(shù)出錯/FM1715 幀錯誤/調(diào)用 req 函數(shù)出錯/調(diào)用 sel 函數(shù)出錯FM1715_ FM1715_OLLERR IVALERR/調(diào)用oll 函數(shù)出錯/調(diào)用初始化函數(shù)出錯/調(diào)用高級讀塊值函數(shù)出錯FM1715_READVALERR FM1715_DESELECTERR FM1715_CMD_ERR/命令錯誤/* FM1715 地址定義*#define #define #define #define #def

25、ine #defi #define #definePage_SeldFIFOPrimarySXBYTE0 x7000 XBYTE0 x7001 XBYTE0 x7002 XBYTE0 x7003 XBYTE0 x7004 XBYTE0 x7005 XBYTE0 x7006 XBYTE0 x7007/頁寫寄存器/命令寄存器/64 字節(jié) FIFO 緩沖的輸入輸出寄存器us/,及 FIFO 的狀態(tài)寄存器 1FIFO_Length condaryS erruptEn_Req/當(dāng)前 FIFO 內(nèi)字節(jié)數(shù)寄存器/各種狀態(tài)寄存器 2us/中斷使能/寄存器/中斷請求標(biāo)識寄存器#define #define #d

26、efine #define #defineControl ErrorFlag Coll TimerValue Bit_FrameXBYTE0 x7009 XBYTE0 x700A XBYTE0 x700B XBYTE0 x700c XBYTE0 x700F/控制寄存器/錯誤狀態(tài)寄存器/檢測寄存器/定時器當(dāng)前值/位幀調(diào)整寄存器#define #define #define #define #defineTxControl CWConductance ModConductance CoderControl TypeBFramingXBYTE0 x7011 XBYTE0 x7012 XBYTE0 x

27、7013 XBYTE0 x7014 XBYTE0 x7017/發(fā)送控制寄存器/選擇發(fā)射腳 TX1 和 TX2 發(fā)射天線的阻抗/定義輸出驅(qū)動阻抗/定義編碼模式和時鐘頻率/定義 ISO14443B 幀格式#define #defineDecoderControl Rxcontrol2XBYTE0 x701a XBYTE0 x701e/控制寄存器控制及選擇接收源#define #define #define #define #defineRxWait ChannelRedundancy CRCPresetLSB CRCPresetMSB MFOUTSelectXBYTE0 x7021 XBYTE0

28、x7022 XBYTE0 x7023 XBYTE0 x7024 XBYTE0 x7026/選擇發(fā)射和接收之間的時間間隔/RF 通道檢驗?zāi)J皆O(shè)置寄存器/mf OUT 選擇配置寄存器#define #define #defineTimerClock TimerControl TimerReloadXBYTE0 x702a XBYTE0 x702b XBYTE0 x702c/定時器周期設(shè)置寄存器/定時器控制寄存器/定時器初值寄存器#define #define #endifTypeSH TestDigiSelectXBYTE0 x7031 XBYTE0 x703d/標(biāo)準(zhǔn)選擇寄存器/測試管腳配置寄存器

29、sbit MFRST = P1 0;/FM1715 復(fù)位管腳定義第 16 頁 共 47 頁uchar idata readdata16 uchar idata value4 uchar idata KeySet;_at_ 0 x0040;_at_ 0 x0050;/讀寫數(shù)據(jù)緩沖區(qū)/增減的數(shù)值類型/卡片標(biāo)識字符uchar idaagtype2_at_ 0 x0096;/* FM1715 變量定義*uchar idata PRO_SendBuf16 uchar idata PRO_RecvBuf16 uchar idata buffer24_at_ 0 x0080;_at_ 0 x0080;_at

30、_ 0 x0060;_at_ 0 x007a;_at_ 0 x0090;/發(fā)送處理緩沖區(qū) 16 BYTE/接收處理緩沖區(qū) 16 BYTE/FM1715 命令發(fā)送接收緩沖區(qū)/序列號/扇區(qū)號uchar idata uchar idataUID5r第 17 頁 共 47 頁5.2 常用函數(shù)5.2.1 卡片復(fù)位應(yīng)答信號的判斷/*/*名稱: Judge_Req/*功能: 該函數(shù)實現(xiàn)對卡片復(fù)位應(yīng)答信號的判斷/*輸入: *buff, 指向應(yīng)答數(shù)據(jù)的指針/*輸出:TRUE, 卡片應(yīng)答信號正確*/*/*/*/*/*FALSE, 卡片應(yīng)答信號錯誤/*/ uchar Judge_Req(uchar idata *b

31、uff)uchar temp1,temp2;temp1 = *buff; temp2 = *(buff + 1);if(temp1 = 0 x03)|(temp1 = 0 x04)|(temp1 = 0 x05)|(temp1 = 0 x53)&(temp2 = 0 x00)return TRUE;return FALSE;注:temp1 = 03temp1 = 04temp1 = 05temp1 = 53;標(biāo)準(zhǔn) TOKEN 卡; MIFARE 標(biāo)準(zhǔn) 8K; MIFARE 標(biāo)準(zhǔn) TOKEN 卡;標(biāo)準(zhǔn) 8K 卡此返回值為目前市場使用的各類卡片的返回結(jié)果,將來可能有的返回類別。5.2.2 接收到的

32、卡片 UID 號的判別/*/*名稱: Check_UID/*功能: 該函數(shù)實現(xiàn)對收到的卡片的序列號的判斷/*輸入: N/A/*輸出:TRUE: 序列號正確*/*/*/*/*/*FALSE: 序列號錯誤/*/ uchar Check_UID(void)第 18 頁 共 47 頁uchar temp;uchar i;temp = 0 x00;for(i = 0;i 5; i+)temp = temp UIDi;if(temp = 0)return TRUE;return FALSE;5.2.3 保存卡片的 UID 號/*/*名稱: Save_UID*/*/*/*/*/*/*功能:/*輸入:/*/*

33、/*輸出:該函數(shù)實現(xiàn)保存卡片收到的序列號row: 產(chǎn)生col: 產(chǎn)生的行的列l(wèi)ength: 接収到的 UID 數(shù)據(jù)長度N/A/*/ void Save_UID(uchar row,uchar col,uchar length)uchar i; uchar temp; uchar temp1;if (row = 0 x00) & (col = 0 x00)for(i = 0; i length; i+)UIDi = bufferi;elsetemp = buffer0; temp1 = UIDrow - 1; switch (col)第 19 頁 共 47 頁case 0:temp1 = 0 x

34、00; row = row + 1; break;case 1:temp = temp & 0 xFE; temp1 = temp1 & 0 x01; break;case 2:temp = temp & 0 xFC; temp1 = temp1 & 0 x03; break;case 3:temp = temp & 0 xF8; temp1 = temp1 & 0 x07; break;case 4:temp = temp & 0 xF0; temp1 = temp1 & 0 x0F; break;case 5:temp = temp & 0 xE0; temp1 = temp1 & 0 x

35、1F; break;case 6:temp = temp & 0 xC0; temp1 = temp1 & 0 x3F; break;case 7:temp = temp & 0 x80; temp1 = temp1 & 0 x7F; break;default:break;buffer0 = temp;UIDrow - 1 = temp1 | temp; for(i = 1; i length; i+)UIDrow - 1 + i = bufferi;第 20 頁 共 47 頁5.2.4 設(shè)置待發(fā)送數(shù)據(jù)的字節(jié)數(shù)/*/*名稱: Set_BitFraming*/*/*/*/*/*功能:/*輸入:

36、/*/*輸出:該函數(shù)設(shè)置待發(fā)送數(shù)據(jù)的字節(jié)數(shù)row: 產(chǎn)生 col: 產(chǎn)生 N/A的行的列/*/ void Set_BitFraming(uchar row,uchar col)switch (row)case 0:buffer1 = 0 x20; break;case 1:buffer1 = 0 x30; break;case 2:buffer1 = 0 x40; break;case 3:buffer1 = 0 x50; break;case 4:buffer1 = 0 x60; break;default:break;switch(col)case 0:Bit_Frame = 0 x00;

37、 break;case 1:Bit_Frame = 0 x11;buffer1 = (buffer1 | 0 x01); break;case 2:Bit_Frame = 0 x22;第 21 頁 共 47 頁buffer1 = (buffer1 | 0 x02); break;case 3:Bit_Frame = 0 x33;buffer1 = (buffer1 | 0 x03); break;case 4:Bit_Frame = 0 x44;buffer1 = (buffer1 | 0 x04); break;case 5:Bit_Frame = 0 x55;buffer1 = (buff

38、er1 | 0 x05); break;case 6:Bit_Frame = 0 x66;buffer1 = (buffer1 | 0 x06); break;case 7:Bit_Frame = 0 x77;buffer1 = (buffer1 | 0 x07); break;default:break;第 22 頁 共 47 頁5.3 FM1715 基本函數(shù)5.3.1 總線選擇/*/*名稱: FM1715_Bus_Sel/*功能: 該函數(shù)實現(xiàn)對 FM1715 操作的總線方式(并行總線,SPI)選擇/*輸入: N/A*/*/*/*/*/*輸出:TRUE,總線選擇成功總線選擇失敗/*FALSE

39、,/*/ uchar FM1715_Bus_Sel(void)uchar i;Page_Sel = 0 x80;/表示PageSelect的值做為寄存器地址A5,A4 和A3,低/三位寄存器地址A2A0 由/外部地址線A2A0/延時決定for(i = 0; i RF_TimeOut; i+)if(d = 0 x00)/讀命令執(zhí)行結(jié)果, bit7為0表示接口檢測結(jié)束Page_Sel = 0 x00; return TRUE;return FALSE;5.3.2 FM1715 初始化/*/*名稱: Init_FM1715/*功能: 該函數(shù)實現(xiàn)對 FM1715 初始化操作*/*/*/*/*/*/*輸

40、入: mode:工作模式,/*/*0:TYPEA 模式1:TYPEB 模式模式/*輸出:N/A/*/ void Init_FM1715(uchar mode)uchar idatatemp;ui;MFRST = 1;for (i = 0; i 0 x1_nop_();MFRST = 0;for (i = 0; i 0 x1/FM1715 復(fù)位; i+); i+)第 23 頁 共 47 頁_nop_();while(_nop_();d != 0)等待mand = 0,FM1715 復(fù)位成功FM1715_Bus_Sel(); TimerClock = 0 x0b; TimerControl = 0

41、 x02; TimerReload = 0 x42; nterruptEn = 0 x7f;/FM1715 總線選擇/151us/per/發(fā)送結(jié)束開定時器,接收開始關(guān)定時器/10ms 定時/關(guān)所有中斷temp =erruptEn;_Req = 0 x7f;MFOUTSelect = 0 x02; TxControl = 0 x5b;if (mode = SHANGHAI_MODE)TypeSH = 0 x01;elseTypeSH = 0 x00;/調(diào)試用/開啟 TX1、TX2/模式/Rxcontrol2=0 x01;if(mode = TYPEB_MODE)CoderControl = 0

42、x20; TypeBFraming = 0 x05; DecoderControl = 0 x19; ChannelRedundancy = 0 x24; TxControl = 0 x4b; CWConductance = 0 x3f; ModConductance = af;/TYPEB 模式5.3.3 命令傳輸/*/*名稱:d_Send*/*/*/*/*/*/*/*功能: 該函數(shù)實現(xiàn)向 FM1715 發(fā)送命令集的功能/*輸入: count, 待發(fā)送命令集的長度/*/*buff, 指向待發(fā)送數(shù)據(jù)的指針Comm_Set, 命令碼/*輸出: TRUE, 命令被正確執(zhí)行/*FALSE, 命令執(zhí)行

43、錯誤/*/uchard_Send(uchar count, uchar idata * buff, uchar Comm_Set)第 24 頁 共 47 頁uj;uchar idaemp,temp1;/_Req=0 x7f;d = 0 x00;Clear_FIFO();Write_FIFO(count, buff);/Rxcontrol2=0 x01;temp = MFOUTSelect;d = Comm_Set;/命令執(zhí)行/檢查命令執(zhí)行否for(j = 0; j RF_TimeOut; j+)temp = MFOUTSelect;temp = temp1 =d;_Req & 0 x80;if

44、(temp = 0 x00) | (temp1 = 0 x80)/Rxcontrol2=0 x41; return TRUE;/Rxcontrol2=0 x41; return FALSE;5.3.4 讀 FM1715 中的 EEPROM 數(shù)據(jù)/*/*名稱: Read_E2*/*/*/*/*/*/*/*/*功能:/*輸入:/*/*/*/*輸出:/*該函數(shù)實現(xiàn)從 FM1715 的 EE 中讀出數(shù)據(jù)lsb, EE 地址(低字節(jié)) msb, EE 地址(高字節(jié))count, 待讀出數(shù)據(jù) EE 的字節(jié)個數(shù) buff, 指向待讀出數(shù)據(jù)的指針 TRUE, EE 數(shù)據(jù)正確讀出FALSE, EE 數(shù)據(jù)讀出有誤

45、/*/ucharRead_E2(uchar lsb,uchar msb,uchar count,uchar idata *buff)uchar temp;*buff=lsb;*(buff+1)=msb;*(buff+2)=count;mand_Send(3,buff,ReadE2); Read_FIFO(buff);if (temp=FALSE) return(TRUE);return(FALSE);第 25 頁 共 47 頁5.3.5 向 FM1715 的 EEPROM 中寫入數(shù)據(jù)/*/*名稱: Write_E2*/*/*/*/*/*/*/*/*功能:/*輸入:/*/*/*/*輸出:/*該函

46、數(shù)實現(xiàn)向 FM1715 的 EE 中寫入數(shù)據(jù)lsb, EE 地址(低字節(jié)) msb, EE 地址(高字節(jié))count, 待寫入數(shù)據(jù) EE 的字節(jié)個數(shù) buff, 指向待寫入數(shù)據(jù)的指針 TRUE, EE 數(shù)據(jù)正確寫入FALSE, EE 數(shù)據(jù)寫入有誤/*/ucharWrite_E2(uchar lsb,uchar msb,uchar count,uchar idata *buff)uchar idaemp,i;for(i = 0;i count; i+)*(buff + count - i + 2) = *(buff - i + count);*buff = lsb;*(buff + 1) = m

47、sb;temp =d_Send(count + 2, buff, WriteE2);temp = SecondarySus;temp = temp & 0 x40; if (temp = 0 x40)return TRUE;return FALSE;5.3.6 清除 FM1715 的 FIFO 中的數(shù)據(jù)/*/*名稱: Clear_FIFO/*功能: 該函數(shù)實現(xiàn)清空 FM1715 中 FIFO 的數(shù)據(jù)/*輸入: N/A/*輸出: TRUE, FIFO 被清空*/*/*/*/*/*FALSE, FIFO 未被清空/*/ uchar Clear_FIFO(void)uchar temp;ui;tem

48、p = Control;temp = (temp | 0 x01); Control = temp;for(i = 0; i RF_TimeOut; i+)/清空 FIFO/檢查 FIFO 是否被清空第 26 頁 共 47 頁temp = FIFO_Length; if(temp = 0)return TRUE;return FALSE;5.3.7 向 FM1715 的 FIFO 中寫入 x 字節(jié)數(shù)據(jù)/*/*名稱: Write_FIFO/*功能: 該函數(shù)實現(xiàn)向 FM1715 的 FIFO 中寫入 x bytes 數(shù)據(jù)/*輸入: count, 待寫入字節(jié)的長度*/*/*/*/*/*buff, 指

49、向待寫入數(shù)據(jù)的指針/*輸出: N/A/*/ void Write_FIFO(uchar count,uchar idata *buff)uchar i;for(i = 0; i = 24)temp = 24;for(i = 0;i temp; i+)/temp=255 時,會進入死循環(huán)/因此增加 FIFO_Length 越限判斷/yanshouli,2003-12-2第 27 頁 共 47 頁*(buff + i) = FIFO;return temp;第 28 頁 共 47 頁FM1715 卡片操作基本函數(shù)HALT/*/*名稱: MIF_Halt/*功能: 該函數(shù)實現(xiàn)暫停 MIFARE 卡/

50、*輸入: N/A*/*/*/*/*/*/*/*輸出:/*/*/*FM1715_OK: 應(yīng)答正確 FM1715_PARITYERR: 奇偶校驗錯 FM1715_CRCERR: CRC 校驗錯 FM1715_NOTAGERR: 無卡/*/ uchar MIF_Halt(void)uchar temp;ui;CRCPresetLSB = 0 x63; CWConductance = 0 x3f; ChannelRedundancy = 0 x03;*buffer = RF_CMD_HALT;*(buffer + 1) = 0 x00;temp =d_Send(2, buffer, Transmit)

51、;if (temp = TRUE)for (i = 0; i = 0 x80)lsb = temp - 0 x80; msb = 0 x01;elsemsb = 0 x00;lsb = temp + 0 x80;/計算存放地址elsemsb = 0 x01;lsb = temp + 0 x40;buffer0 = lsb; buffer1 = msb;temp =d_Send(2, buffer, LoadKeyE2);temp = ErrorFlag & 0 x40; if (temp = 0 x40)return FALSE;return TRUE;第 30 頁 共 47 頁5.4.3 R

52、EQUEST/*/*名稱: Request*/*/*/*/*/*/*/*功能:/*輸入:/*/*輸出:/*/*該函數(shù)實現(xiàn)對放入 FM1715 操作范圍之內(nèi)的卡片的 Request 操作mode: ALL(監(jiān)測所以 FM1715 操作范圍之內(nèi)的卡片)STD(監(jiān)測在 FM1715 操作范圍之內(nèi)處于 HALT 狀態(tài)的卡片) FM1715_NOTAGERR: 無卡FM1715_OK: 應(yīng)答正確FM1715_REQERR: 應(yīng)答錯誤/*/ uchar Request(uchar mode)ucharidaemp;CRCPresetLSB = 0 x63; CWConductance = 0 x3f; b

53、uffer0 = mode; Bit_Frame = 0 x07; ChannelRedundancy = 0 x03; temp = Control;temp = temp & (0 xf7);Control = temp;/Request 模式選擇/發(fā)送 7bit/關(guān)閉 CRCCRYPTO1 位temp =d_Send(1, buffer, Transceive);if(temp = FALSE)return FM1715_NOTAGERR;Read_FIFO(buffer);temp = Judge_Req(buffer); if (temp = TRUE)tagtype0 = buff

54、er0; tagtype1 = buffer1; return FM1715_OK;return FM1715_REQERR;/從 FIFO 中應(yīng)答信息/判斷應(yīng)答信號是否正確5.4.4OLLI/*/*名稱:/*功能:/*輸入:/*輸出:/*oll該函數(shù)實現(xiàn)對放入 FM1715 操作范圍之內(nèi)的卡片的防N/AFM1715_NOTAGERR: 無卡FM1715_BYTECOUNTERR: 接收字節(jié)錯誤*/*/*/*/*/*/*/檢測/*/*FM1715_SERNRERR: 卡片序列號應(yīng)答錯誤FM1715_OK: 卡片應(yīng)答正確/*/第 31 頁 共 47 頁ucharoll(void)uchar te

55、mp; uchar i;uchar row,col; uchar pre_row;row = 0;col = 0;pre_row = 0;CRCPresetLSB = 0 x63; CWConductance = 0 x3f; ModConductance = 0X3f; buffer0 = RF_CMD_ buffer1 = 0 x20; ChannelRedundancy = 0 x03;OL;/關(guān)閉 CRC,打開奇偶校驗mand_Send(2, buffer, Transceive);while(1)if(temp=FALSE)return(FM1715_NOTAGERR);temp =

56、 ErrorFlag; if(temp & 0 x02)=0 x02)return(FM1715_PARITYERR);if(temp & 0 x04)=0 x04) return(FM1715_FRAMINGERR);/temp=FIFO_Length; if (temp=0)return FM1715_BYTECOUNTERR;Read_FIFO(buffer); Save_UID(row, col, temp); Show_UID();temp = ErrorFlag; temp = temp & 0 x01; if(temp = 0 x00)temp = Check_UID(); if

57、(temp = FALSE)return(FM1715_SERNRERR);return(FM1715_OK);else/將收到的 UID 放入 UID 數(shù)組中/顯示 UID/判斷接収數(shù)據(jù)是否出錯/校驗收到的 UIDtemp = Cs;檢測寄存器row = temp / 8; col = temp % 8;第 32 頁 共 47 頁buffer0 = RF_CMD_OL;Set_BitFraming(row + pre_row, col); pre_row = pre_row + row;for(i = 0; i pre_row + 1; i+)bufferi + 2 = UIDi;if(co

58、l != 0 x00)row = pre_row + 1;elserow = pre_row;/設(shè)置待發(fā)送數(shù)據(jù)的字節(jié)數(shù)temp =d_Send(row + 2, buffer, Transceive);5.4.5 SELECT/*/*名稱: Select_Card*/*/*/*/*/*/*/*/*/*功能:/*輸入:/*輸出:/*/*/*/*/*該函數(shù)實現(xiàn)對放入 FM1715 操作范圍之內(nèi)的某張卡片進行選擇N/AFM1715_NOTAGERR: 無卡 FM1715_PARITYERR: 奇偶校驗錯 FM1715_CRCERR: CRC 校驗錯 FM1715_BYTECOUNTERR: 接收字節(jié)

59、錯誤FM1715_OK: 應(yīng)答正確FM1715_SELERR: 選卡出錯/*/ uchar Select_Card(void)uchar temp,i;CRCPresetLSB = 0 x63; CWConductance = 0 x3f; buffer0 = RF_CMD_SELECT; buffer1 = 0 x70;for(i = 0; i 5; i+)bufferi+2=UIDi;ChannelRedundancy=0 x0f;mand_Send(7,buffer,Transceive);/開啟 CRC,奇偶校驗校驗if(temp=FALSE)return(FM1715_NOTAGER

60、R);else第 33 頁 共 47 頁temp=ErrorFlag;if (temp & 0 x02)=0 x02) return(FM1715_PARITYERR);if(temp & 0 x04)=0 x04) return(FM1715_FRAMINGERR);if (temp & 0 x08)=0 x08) return(FM1715_CRCERR);temp=FIFO_Length; if (temp!=1)return(FM1715_BYTECOUNTERR);Read_FIFO(buffer); temp = *buffer;/從 FIFO 中應(yīng)答信息if (temp=0 x0

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論