#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
/*****************************************************************************
*端口定义
*****************************************************************************/
sbit RC500_CE=P2^6; /*RC500片选*/
sbit RC500_RST=P2^7; /*RC500复位*/
/*****************************************************************************
*函数原型
*****************************************************************************/
extern char PcdReset(); /*复位并初始化RC500*/
extern char PcdRequest(uchar req_code); /*寻卡*/
extern char PcdAnticoll(uchar *snr); /*防冲撞*/
extern char PcdSelect(uchar *snr); /*选定一张卡*/
extern char ChangeCodeKey(uchar *uncoded,uchar *coded); /*转换密钥格式*/
extern char PcdAuthKey(uchar *coded); /*传送密钥*/
extern char PcdAuthState(uchar auth_mode,uchar block,uchar *snr); /*验证密钥*/
extern char PcdRead(uchar addr,uchar *readdata); /*读块*/
extern char PcdWrite(uchar addr,uchar *writedata); /*写块*/
extern char PcdValue(uchar dd_mode,uchar addr,uchar *value); /*增(减)钱包值*/
extern char PcdRestore(uchar addr); /*调钱包值*/
extern char PcdTransfer(uchar addr); /*备份钱包值*/
extern char PcdHalt(void); /*卡休眠*/
extern char PcdReadE2(uint startaddr,uchar length,uchar *readdata); /*读RC500-EEPROM数据*/
extern char PcdWriteE2(uint startaddr,uchar length,uchar *writedata); /*写数据到RC500-EEPROM*/
extern char PcdConfigRestore(); /*恢复RC500出厂设置*/
extern char PcdLoadConfig(uint startaddr); /*调RC500-EEPROM中自设定的设置*/
extern void PcdAntennaOn(); /*开启RC500天线发射*/
extern void PcdAntennaOff(); /*关闭RC500天线发射*/
extern char PcdComTransceive(struct TranSciveBuffer *pi); /*和RC500通讯*/
extern void WriteRC(uchar Address,uchar value); /*写RC500寄存器*/
extern void WriteRawRC(uchar Address,uchar value); /*写RC500寄存器*/
extern uchar ReadRC(uchar Address); /*读RC500寄存器*/
extern uchar ReadRawRC(uchar Address); /*读RC500寄存器*/
extern void SetBitMask(uchar reg,uchar mask); /*置RC500寄存器位*/
extern void ClearBitMask(uchar reg,uchar mask); /*清RC500寄存器位*/
extern void PcdSetTmo(uchar tmoLength); /*设置RC500定时器*/
extern void DelayMs(uchar j); /*延时*/
extern void DelayUs(uchar j); /*延时*/
/*****************************************************************************
*MFIRE卡命令字
*****************************************************************************/
#define PICC_REQIDL 0x26 /*寻天线区内未进入休眠状态的卡*/
#define PICC_REQALL 0x52 /*寻天线区内全部卡*/
#define PICC_ANTICOLL1 0x93 /*防冲撞*/
#define PICC_AUTHENT1A 0x60 /*验证A密钥*/
#define PICC_AUTHENT1B 0x61 /*验证B密钥*/
#define PICC_READ 0x30 /*读块*/
#define PICC_WRITE 0xA0 /*写块*/
#define PICC_DECREMENT 0xC0 /*扣款*/
#define PICC_INCREMENT 0xC1 /*充值*/
#define PICC_RESTORE 0xC2 /*调钱包到缓冲区*/
#define PICC_TRANSFER 0xB0 /*保存缓冲区中数据*/
#define PICC_HALT 0x50 /*休眠*/
/*****************************************************************************
*RC500命令字
*****************************************************************************/
#define PCD_IDLE 0x00 /*取消当前命令*/
#define PCD_WRITEE2 0x01 /*写EEPROM*/
#define PCD_READE2 0x03 /*读EEPROM */
#define PCD_LOADCONFIG 0x07 /*调EEPROM中保存的RC500设置*/
#define PCD_LOADKEYE2 0x0B /*将EEPROM中保存的密钥调入缓存*/
#define PCD_AUTHENT1 0x0C /*验证密钥第一步*/
#define PCD_AUTHENT2 0x14 /*验证密钥第二步*/
#define PCD_RECEIVE 0x16 /*接收数据*/
#define PCD_LOADKEY 0x19 /*传送密钥*/
#define PCD_TRANSMIT 0x1A /*发送数据*/
#define PCD_TRANSCEIVE 0x1E /*发送并接收数据*/
#define PCD_RESETPHASE 0x3F /*复位*/
#define PCD_CALCCRC 0x12 /*CRC计算*/
//RC500寄存器定义
#define RegPage 0x00 //选择寄存器页
#define RegCommand 0x01 //启动和停止命令的执行
#define RegFIFOData 0x02 //64 字节FIFO 缓冲区输入和输出
#define RegPrimaryStatus 0x03 //接收器和发送器以及FIFO 缓冲区状态标志
#define RegFIFOLength 0x04 //FIFO 中缓冲的字节数
#define RegSecondaryStatus 0x05 //不同的状态标志
#define RegInterruptEn 0x06 //使能和禁止中断请求通过的控制位
#define RegInterruptRq 0x07 //中断请求标志
#define RegControl 0x09 //不同的控制标志例如定时器节电
#define RegErrorFlag 0x0A //显示上次命令执行错误状态的错误标志
#define RegCollPos 0x0B //RF 接口检测到的第一个冲突位的位置
#define RegTimerValue 0x0C //定时器的实际值
#define RegCRCResultLSB 0x0D //CRC 协处理器寄存器的最低位
#define RegCRCResultMSB 0x0E //CRC 协处理器寄存器的最高位
#define RegBitFraming 0x0F //位方式帧的调节
#define RegTxControl 0x11 //天线驱动脚TX1 和TX2 的逻辑状态控制
#define RegCwConductance 0x12 //选择天线驱动脚TX1 和TX2 的电导率
#define RFU13 0x13 //RFU
#define RegCoderControl 0x14 //RFU,selects coder rate
#define RegModWidth 0x15 //选择调整脉冲的宽度
#define RFU16 0x16 //RFU
#define RFU17 0x17 //RFU
#define RegRxControl1 0x19 //控制接收器状态
#define RegDecoderControl 0x1A //控制解码器状态
#define RegBitPhase 0x1B //选择发送器和接收器时钟之间的位相位
#define RegRxThreshold 0x1C //选择位解码器的阀值
#define RFU1D 0x1D //RFU
#define RegRxControl2 0x1E //控制解码器状态和定义接收器的输入源
#define RegClockQControl 0x1F //控制时钟产生用于90o相移的Q 信道时钟
#define RegRxWait 0x21 //选择发送后接收器启动前的时间间隔
#define RegChannelRedundancy 0x22 //选择RF 信道上数据完整性检测的类型和模式
#define RegCRCPresetLSB 0x23 //CRC 寄存器预设值的低字节
#define RegCRCPresetMSB 0x24 //CRC 寄存器预设值的高字节
#define RFU25 0x25 //RFU
#define RegMfOutSelect 0x26 //选择输出到管脚MFOUT 的内部信号
#define RFU27 0x27 //RFU
#define RegFIFOLevel 0x29 //定义FIFO 上溢和下溢警告界限
#define RegTimerClock 0x2A //选择定时器时钟的分频器
#define RegTimerControl 0x2B //选择定时器的起始和停止条件
#define RegTimerReload 0x2C //定义定时器的预装值
#define RegIRqPinConfig 0x2D //配置IRQ 脚的输出状态
#define RFU2E 0x2E //RFU
#define RFU2F 0x2F //RFU
#define RFU31 0x31 //RFU
#define RFU32 0x32 //RFU
#define RFU33 0x33 //RFU
#define RFU34 0x34 //RFU
#define RFU35 0x35 //RFU
#define RFU36 0x36 //RFU
#define RFU37 0x37 //RFU
#define RFU39 0x39 //RFU
#define RegTestAnaSelect 0x3A //选择模拟测试模式
#define RFU3B 0x3B //RFU
#define RFU3C 0x3C //RFU
#define RegTestDigiSelect 0x3D //选择数字测试模式
#define RFU3E 0x3E //RFU
#define RegTestDigiAccess 0x3F //RFU
#define DEF_FIFO_LENGTH 64 //RC500 FIFO长度定义FIFO size=64byte
//RC500命令字
#define PCD_IDLE 0x00 /*取消当前命令*/
#define PCD_WRITEE2 0x01 /*写EEPROM*/
#define PCD_READE2 0x03 /*读EEPROM */
#define PCD_LOADCONFIG 0x07 /*调EEPROM中保存的RC500设置*/
#define PCD_LOADKEYE2 0x0B /*将EEPROM中保存的密钥调入缓存*/
#define PCD_AUTHENT1 0x0C /*验证密钥第一步*/
#define PCD_CALCCRC 0x12 /*CRC计算*/
#define PCD_AUTHENT2 0x14 /*验证密钥第二步*/
#define PCD_RECEIVE 0x16 /*接收数据*/
#define PCD_LOADKEY 0x19 /*传送密钥*/
#define PCD_TRANSMIT 0x1A /*发送数据*/
#define PCD_TRANSCEIVE 0x1E /*发送并接收数据*/
#define PCD_RESETPHASE 0x3F /*复位*/
//MFIRE卡命令字
#define PICC_REQIDL 0x26 /*寻天线区内未进入休眠状态的卡*/
#define PICC_REQALL 0x52 /*寻天线区内全部卡*/
#define PICC_ANTICOLL1 0x93 /*防冲撞*/
#define PICC_ANTICOLL2 0x95
#define PICC_ANTICOLL3 0x97
#define PICC_AUTHENT1A 0x60 /*验证A密钥*/
#define PICC_AUTHENT1B 0x61 /*验证B密钥*/
#define PICC_READ 0x30 /*读块*/
#define PICC_WRITE 0xA0 /*写块*/
#define PICC_DECREMENT 0xC0 /*扣款*/
#define PICC_INCREMENT 0xC1 /*充值*/
#define PICC_RESTORE 0xC2 /*调钱包到缓冲区*/
#define PICC_TRANSFER 0xB0 /*保存缓冲区中数据*/
#define PICC_HALT 0x50 /*休眠*/
//定义卡的类型
#define mifare1 1
#define mifarepro 2
#define mifarelight 3
#define unkowncard 4
阅读(4954) | 评论(0) | 转发(0) |