首页 > 微波/射频 > 射频学习交流 > RC523读身份证UID问题

RC523读身份证UID问题

录入:edatop.com    阅读:
我读身份证id第一步就不能通过,
寄存器配置如下:
ClearBitMask(Status2Reg, 0x08);
   //write_reg(ControlReg, 0x10);
            write_reg(ModeReg, 0x3F);  //0x3f                                     // For 0xFFFF crc
            write_reg(TReloadRegL, 30);
            write_reg(TReloadRegH, 0);
            write_reg(TModeReg, 0x8D);
            write_reg(TPrescalerReg, 0x3E);
            write_reg(TxASKReg, 0);                                         // Force 100ASK = 0
   
            // ------------------------- 发送部分设置 ------------------------------
            write_reg(GsNReg, 0xF8);                                        // TX输出电导设置
            write_reg(CWGsCfgReg, 0x3F);
            write_reg(ModGsCfgReg, 0x08); //0x0F                                  // 调制指数设置RegModGsp,, TYPEB ModConductance 0x1A
            write_reg(TxModeReg, 0x03);                                     // 编码器设置,106kbps,14443B
            write_reg(BitFramingReg, 0x00);                                 // 调制脉宽,0x13->2.95us RegTypeBFraming ,,TYPEB
            write_reg(AutoTestReg, 0x00);
   
            // ------------------------- 接收部分设置 ------------------------------
            // 低二位为接收增益,
            // 00,10,20,30,40,50,60,70
            // 18,23,18,23,33,38,43,48dB
            write_reg(RFCfgReg, 0x70);    //0x73                                  // 0x59 RegRxControl1//73,
            write_reg(RxModeReg, 0x03);                                     // 解码器设置,,106kbps,14443B
            write_reg(RxThresholdReg, 0x75);       //0x75                         // 高四位->最小信号强度,低三位->冲突最小信号强度,最大0xF7
            
            // ------------------------- TYPEB特征参数设定 -------------------------
            ClearBitMask(RxSelReg,0x3F);                                     // TR0
            SetBitMask(RxSelReg, 0x08);
            ClearBitMask(TxModeReg, 0x80);                                   // 无CRC,无奇偶校验
            ClearBitMask(RxModeReg, 0x80);
            ClearBitMask(Status2Reg, 0x08);                                  // MFCrypto1On =0
            // ------------------------- 天线开关设置 ------------------------------
            Antenna(RC_ANTENNA_OFF);
            Delay(10);
            Antenna(RC_ANTENNA_ON);  
寻卡过程如下:
buf[0] = 0x05;
    buf[1] = 0x00;
    buf[2] = 0x00;
   
    buf[3] = 0x71;                                                              // crc
    buf[4] = 0xFF;
   // CalulateCRC(buf, 3, &buf[3]);
    status = PcdComMF522(PCD_TRANSCEIVE, buf, 5, buf, &len);
//******************************************************************/
//功    能:通过RC522和ISO14443卡通讯
//参数说明:Command[IN]:RC522命令字
//          pInData[IN]:通过RC522发送到卡片的数据
//          InLenByte[IN]:发送数据的字节长度
//          pOutData[OUT]:接收到的卡片返回数据
//          *pOutLenBit[OUT]:返回数据的位长度
//******************************************************************/
char PcdComMF522(unsigned char Command  ,unsigned char *pInData ,
                 unsigned char InLenByte,unsigned char *pOutData,
                 unsigned int  *pOutLenBit                       )
{
  char status = MI_ERR                          ;
  unsigned char irqEn   = 0x00                  ;
  unsigned char waitFor = 0x00                  ;
  unsigned char lastBits                        ;
  unsigned char n                               ;
  unsigned int  i                               ;
  u8 errreg=0;
  switch (Command)
  {
    case PCD_AUTHENT:
      irqEn   = 0x12                            ;
      waitFor = 0x10                            ;
      break                                     ;
    case PCD_TRANSCEIVE:
      irqEn   = 0x77                            ;
      waitFor = 0x30                            ;
      break                                     ;
    default:
      break                                     ;
  }
  write_reg(ComIEnReg,irqEn|0x80)              ; //
  ClearBitMask(ComIrqReg,0x80)                  ;
  write_reg(CommandReg,PCD_IDLE)               ;
  SetBitMask(FIFOLevelReg,0x80)                 ; // 清空FIFO
  for(i=0; i<InLenByte; i++)
    write_reg(FIFODataReg,pInData)          ; // 数据写入FIFO
  write_reg(CommandReg, Command)               ; // 命令写入命令寄存器
  if(Command == PCD_TRANSCEIVE)
    SetBitMask(BitFramingReg,0x80)              ; // 开始发送     
  i = 6000                                      ; //根据时钟频率调整,操作M1卡最大等待时间25ms
  do
  {
    n = read_reg(ComIrqReg)                    ;
    i--                                         ;
  }
  while((i!=0)&&!(n&0x01)&&!(n&waitFor))        ;
  ClearBitMask(BitFramingReg,0x80)              ;
  if(i!=0)
  {
   errreg = read_reg(ErrorReg);
printf("read_reg(ErrorReg):0x%x\r\n",errreg);
    if(!(errreg&0x1B))
    {
      status = MI_OK                            ;
      if (n&irqEn&0x01)
        status = MI_NOTAGERR                    ;
      if(Command==PCD_TRANSCEIVE)
      {
        n = read_reg(FIFOLevelReg)             ;
        lastBits = read_reg(ControlReg)&0x07   ;
        if(lastBits)
          *pOutLenBit = (n-1)*8 + lastBits      ;
        else
          *pOutLenBit = n*8                     ;
        if(n==0)
          n = 1                                 ;
        if(n>MAXRLEN)
          n = MAXRLEN                           ;
        for (i=0; i<n; i++)
          pOutData = read_reg(FIFODataReg)  ;
      }
    }
    else
      status = MI_ERR                           ;        
  }
  SetBitMask(ControlReg,0x80)                   ;// stop timer now
  write_reg(CommandReg,PCD_IDLE)               ;
  return status;
}
一直无法识别身份证,有没有哪位大神可以指导下,谢谢

读s50卡倒是没问题

我也是 ,返回值不对,你解决了吗

申明:网友回复良莠不齐,仅供参考。如需专业解答,请学习本站推出的微波射频专业培训课程

上一篇:天线的增益从何而来
下一篇:si4463同步字配置问题

射频和天线工程师培训课程详情>>

  网站地图