Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1163942
  • 博文数量: 93
  • 博客积分: 7185
  • 博客等级: 准将
  • 技术积分: 3560
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-02 13:54
文章分类
文章存档

2011年(43)

2010年(11)

2009年(27)

2008年(12)

分类:

2009-03-24 00:21:50

#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
 
 
 
 
阅读(4899) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~