اطلاعیه

Collapse
No announcement yet.

RC522 RFID Reader&Writer

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    RC522 RFID Reader&Writer

    سلام
    آقا من یه مشکل عجیب با RC522 دارم.
    ماژول رو کامل راه انداختم و به راحتی روی کارت و تگ همراه ماژول عملیات خواندن و نوشتن انجام میشه.
    منتها کارتهایی که از بازار گرفتم اصلا شناسایی نمیشه و ماژول هیچ عکس العملی نداره.
    امروز هم رفتم از دفتر تهران ECA کارت مایفر گرفتم ولی باز هم هیچ عکس العملی نداره.
    دوستان لطفا راهنمایی کنید.


    انسان شکست نمی خورد بلکه ناامید می شود

    #2
    پاسخ : RC522 RFID Reader&Writer

    دوستانی که از این ماژول جواب گرفتن لطفا همراهی کنن. فقط روی کارت و تگ خودش مینویسه
    حتی کارت اتوبوس رو هم نمیتونه شناسایی کنه
    انسان شکست نمی خورد بلکه ناامید می شود

    دیدگاه


      #3
      پاسخ : پاسخ : RC522 RFID Reader&Writer

      نوشته اصلی توسط میلاد فزونی
      دوستانی که از این ماژول جواب گرفتن لطفا همراهی کنن. فقط روی کارت و تگ خودش مینویسه
      حتی کارت اتوبوس رو هم نمیتونه شناسایی کنه


      سلام من این ماژول چندوقت پیش از فروشگاه گیتی گرفتم (تواصفهان)مشکلیم نداشتم باهاش اونم از سایت می خره عموما وسایلش!! شما کد وشماتیک بگذار تا بشه کمک کرد خو!
      Ali Reza Tarkesh Esfahani

      Yahoo: amt_1390@yahoo.com

      دیدگاه


        #4
        پاسخ : پاسخ : RC522 RFID Reader&Writer

        نوشته اصلی توسط Ali Chiefer


        سلام من این ماژول چندوقت پیش از فروشگاه گیتی گرفتم (تواصفهان)مشکلیم نداشتم باهاش اونم از سایت می خره عموما وسایلش!! شما کد وشماتیک بگذار تا بشه کمک کرد خو!
        دوست عزیز کارت های دسفایر رو به راحتی میخونم و مینویسم ولی حتی نمیتونم مایفر رو شناسایی کنم
        این هم لایبرری که از همین سایت گرفتم :

        کد:
        #include <mega32a.h>
        #include <spi.h>
        
        //  AVR -- MFRC522
        //  MISO <- MISO
        //  MOSI -> MOSI
        //  SCK -> SCK
        //PORTB.3 -> SDA
        
        ////////////  PORTB.3 is ss (sda)(nss) pin
        #define cs_set PORTB.3=1
        #define cs_clr PORTB.3=0
        
        /////////////////////////////////////////////////////////////////////
        #define DEF_FIFO_LENGTH    64         //FIFO size=64byte
        #define MAXRLEN        18
        
        /////////////////////////////////////////////////////////////////////
        #define PCD_IDLE       0x00        //È¡Ïûµ±Ç°ÃüÁî
        #define PCD_AUTHENT      0x0E        //ÑéÖ¤ÃÜÔ¿
        #define PCD_RECEIVE      0x08        //½ÓÊÕÊý¾Ý
        #define PCD_TRANSMIT     0x04        //·¢ËÍÊý¾Ý
        #define PCD_TRANSCEIVE    0x0C        //·¢ËͲ¢½ÓÊÕÊý¾Ý
        #define PCD_RESETPHASE    0x0F        //¸´Î»
        #define PCD_CALCCRC      0x03        //CRC¼ÆËã
        
        /////////////////////////////////////////////////////////////////////
        #define PICC_REQIDL      0x26        //Ñ°ÌìÏßÇøÄÚδ½øÈëÐÝÃß״̬
        #define PICC_REQALL      0x52        //Ñ°ÌìÏßÇøÄÚÈ«²¿¿¨
        #define PICC_ANTICOLL1    0x93        //·À³åײ
        #define PICC_ANTICOLL2    0x95        //·À³åײ
        #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        //ÐÝÃß
        
        /////////////////////////////////////////////////////////////////////
        // PAGE 0
        #define   RFU00         0x00  
        #define   CommandReg      0x01  
        #define   ComIEnReg       0x02  
        #define   DivlEnReg       0x03  
        #define   ComIrqReg       0x04  
        #define   DivIrqReg       0x05
        #define   ErrorReg       0x06  
        #define   Status1Reg      0x07  
        #define   Status2Reg      0x08  
        #define   FIFODataReg      0x09
        #define   FIFOLevelReg     0x0A
        #define   WaterLevelReg     0x0B
        #define   ControlReg      0x0C
        #define   BitFramingReg     0x0D
        #define   CollReg        0x0E
        #define   RFU0F         0x0F
        // PAGE 1   
        #define   RFU10         0x10
        #define   ModeReg        0x11
        #define   TxModeReg       0x12
        #define   RxModeReg       0x13
        #define   TxControlReg     0x14
        #define   TxAutoReg       0x15
        #define   TxSelReg       0x16
        #define   RxSelReg       0x17
        #define   RxThresholdReg    0x18
        #define   DemodReg       0x19
        #define   RFU1A         0x1A
        #define   RFU1B         0x1B
        #define   MifareReg       0x1C
        #define   RFU1D         0x1D
        #define   RFU1E         0x1E
        #define   SerialSpeedReg    0x1F
        // PAGE 2  
        #define   RFU20         0x20 
        #define   CRCResultRegM     0x21
        #define   CRCResultRegL     0x22
        #define   RFU23         0x23
        #define   ModWidthReg      0x24
        #define   RFU25         0x25
        #define   RFCfgReg       0x26
        #define   GsNReg        0x27
        #define   CWGsCfgReg      0x28
        #define   ModGsCfgReg      0x29
        #define   TModeReg       0x2A
        #define   TPrescalerReg     0x2B
        #define   TReloadRegH      0x2C
        #define   TReloadRegL      0x2D
        #define   TCounterValueRegH   0x2E
        #define   TCounterValueRegL   0x2F
        // PAGE 3   
        #define   RFU30         0x30
        #define   TestSel1Reg      0x31
        #define   TestSel2Reg      0x32
        #define   TestPinEnReg     0x33
        #define   TestPinValueReg    0x34
        #define   TestBusReg      0x35
        #define   AutoTestReg      0x36
        #define   VersionReg      0x37
        #define   AnalogTestReg     0x38
        #define   TestDAC1Reg      0x39 
        #define   TestDAC2Reg      0x3A  
        #define   TestADCReg      0x3B  
        #define   RFU3C         0x3C  
        #define   RFU3D         0x3D  
        #define   RFU3E         0x3E  
        #define   RFU3F		 0x3F
        
        /////////////////////////////////////////////////////////////////////
        #define MI_OK             0
        #define MI_NOTAGERR          (-1)
        #define MI_ERR             (-2)
        
        /////////////////////////////////////////////////////////////////////
        char PcdReset(void);
        void PcdAntennaOn(void);
        void PcdAntennaOff(void);
        char PcdRequest(unsigned char req_code,unsigned char *pTagType);  
        char PcdAnticoll(unsigned char *pSnr);
        char PcdSelect(unsigned char *pSnr);     
        char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr);   
        char PcdRead(unsigned char addr,unsigned char *pData);   
        char PcdWrite(unsigned char addr,unsigned char *pData);  
        char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue);  
        char PcdBakValue(unsigned char sourceaddr, unsigned char goaladdr);                 
        char PcdHalt(void);
        char PcdComMF522(unsigned char Command, 
                 unsigned char *pInData, 
                 unsigned char InLenByte,
                 unsigned char *pOutData, 
                 unsigned int *pOutLenBit);
        void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOutData);
        ///////////////////////////////////////////////////////////////////
        void WriteRawRC(unsigned char reg,unsigned char value);
        unsigned char ReadRawRC(unsigned char reg); 
        void SetBitMask(unsigned char reg,unsigned char mask); 
        void ClearBitMask(unsigned char reg,unsigned char mask); 
        
        ///////////////////////////////////////////////////////////////
        
        char PcdReset(void)
        {
        	//unsigned char i;
         /*  MF522_RST=1;
        
        		_nop_();         
        
          MF522_RST=0;
        
        		_nop_();          
        
          MF522_RST=1;
        
        		_nop_();  */       
        	
          WriteRawRC(CommandReg,PCD_RESETPHASE);
        
        	//	_nop_();         
        	
          
          WriteRawRC(ModeReg,0x3D);      //ºÍMifare¿¨Í¨Ñ¶£¬CRC³õʼֵ0x6363
          WriteRawRC(TReloadRegL,30);      
          WriteRawRC(TReloadRegH,0);
          WriteRawRC(TModeReg,0x8D);
          WriteRawRC(TPrescalerReg,0x3E);
          WriteRawRC(TxAutoReg,0x40);
          
          return MI_OK;
        }
        
        void PcdAntennaOn()
        {
          unsigned char i;
          i = ReadRawRC(TxControlReg);
          if (!(i & 0x03))
          {
            SetBitMask(TxControlReg, 0x03);
          }
        }
        
        void PcdAntennaOff()
        {
          ClearBitMask(TxControlReg, 0x03);
        }
        
        char PcdRequest(unsigned char req_code,unsigned char *pTagType)
        {
        /* Function Name:MFRC522_Request
         * Description: Find cards, read the card type number
         * Input parameters: reqMode - find cards way
         *  TagType - Return Card Type
         *  0x4400 = Mifare_UltraLight
         *  0x0400 = Mifare_One(S50)
         *  0x0200 = Mifare_One(S70)
         *  0x0800 = Mifare_Pro(X)
         *  0x4403 = Mifare_DESFire
         * Return value: the successful return MI_OK */
         
          char status; 
          unsigned int unLen;
          unsigned char ucComMF522Buf[MAXRLEN]; 
        
          ClearBitMask(Status2Reg,0x08);
          WriteRawRC(BitFramingReg,0x07);
          SetBitMask(TxControlReg,0x03);
         
          ucComMF522Buf[0] = req_code;
        
          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);
          
          if ((status == MI_OK) && (unLen == 0x10))
          {  
            *pTagType   = ucComMF522Buf[0];
            *(pTagType+1) = ucComMF522Buf[1];
          }
          else
          {  
            status = MI_ERR; 
          }
          
          return status;
        }
        
        char PcdAnticoll(unsigned char *pSnr)
        {
         /* Function Name: MFRC522_Anticoll
         * Description: Anti-collision detection, reading selected card serial number card
         * Input parameters: serNum - returns 4 bytes card serial number, the first 5 bytes for the checksum byte
         * Return value: the successful return MI_OK */
          
          char status;
          unsigned char i,snr_check=0;
          unsigned int unLen;
          unsigned char ucComMF522Buf[MAXRLEN]; 
          
        
          ClearBitMask(Status2Reg,0x08);
          WriteRawRC(BitFramingReg,0x00);
          ClearBitMask(CollReg,0x80);
         
          ucComMF522Buf[0] = PICC_ANTICOLL1;
          ucComMF522Buf[1] = 0x20;
        
          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);
        
          if (status == MI_OK)
          {
          	 for (i=0; i<4; i++)
             {  
               *(pSnr+i) = ucComMF522Buf[i];
               snr_check ^= ucComMF522Buf[i];
        
             }
             if (snr_check != ucComMF522Buf[i])
             {  status = MI_ERR;  }
          }
          
          SetBitMask(CollReg,0x80);
          
          return status;
        }
        
        char PcdSelect(unsigned char *pSnr)
        {
        /*
         * Function Name: MFRC522_SelectTag
         * Description: election card, read the card memory capacity
         * Input parameters: serNum - Incoming card serial number
         * Return value: the successful return of card capacity
         */
          char status;
          unsigned char i;
          unsigned int unLen;
          unsigned char ucComMF522Buf[MAXRLEN]; 
          
          ucComMF522Buf[0] = PICC_ANTICOLL1;
          ucComMF522Buf[1] = 0x70;
          ucComMF522Buf[6] = 0;
          for (i=0; i<4; i++)
          {
          	ucComMF522Buf[i+2] = *(pSnr+i);
          	ucComMF522Buf[6] ^= *(pSnr+i);
          }
          CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);
         
          ClearBitMask(Status2Reg,0x08);
        
          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);
          
          if ((status == MI_OK) && (unLen == 0x18))
          {  status = MI_OK; }
          else
          {  status = MI_ERR;  }
        
          return status;
        }
        
        char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)
        {
          char status;
          unsigned int unLen;
          unsigned char i,ucComMF522Buf[MAXRLEN]; 
        
          ucComMF522Buf[0] = auth_mode;
          ucComMF522Buf[1] = addr;
          for (i=0; i<6; i++)
          {  ucComMF522Buf[i+2] = *(pKey+i);  }
          for (i=0; i<6; i++)
          {  ucComMF522Buf[i+8] = *(pSnr+i);  }
         //  memcpy(&ucComMF522Buf[2], pKey, 6); 
         //  memcpy(&ucComMF522Buf[8], pSnr, 4); 
          
          status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen);
          if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08)))
          {  status = MI_ERR;  }
          
          return status;
        }
        
        char PcdRead(unsigned char addr,unsigned char *pData)
        {
          char status;
          unsigned int unLen;
          unsigned char i,ucComMF522Buf[MAXRLEN]; 
        
          ucComMF522Buf[0] = PICC_READ;
          ucComMF522Buf[1] = addr;
          CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
          
          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
          if ((status == MI_OK) && (unLen == 0x90))
         //  {  memcpy(pData, ucComMF522Buf, 16);  }
          {
            for (i=0; i<16; i++)
            {  *(pData+i) = ucComMF522Buf[i];  }
          }
          else
          {  status = MI_ERR;  }
          
          return status;
        }
        
        char PcdWrite(unsigned char addr,unsigned char *pData)
        {
          char status;
          unsigned int unLen;
          unsigned char i,ucComMF522Buf[MAXRLEN]; 
          
          ucComMF522Buf[0] = PICC_WRITE;
          ucComMF522Buf[1] = addr;
          CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
         
          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
        
          if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
          {  status = MI_ERR;  }
            
          if (status == MI_OK)
          {
            //memcpy(ucComMF522Buf, pData, 16);
            for (i=0; i<16; i++)
            {  ucComMF522Buf[i] = *(pData+i);  }
            CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]);
        
            status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen);
            if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
            {  status = MI_ERR;  }
          }
          
          return status;
        }
        
        char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue)
        {
          char status;
          unsigned int unLen;
          unsigned char i,ucComMF522Buf[MAXRLEN]; 
          
          ucComMF522Buf[0] = dd_mode;
          ucComMF522Buf[1] = addr;
          CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
         
          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
        
          if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
          {  status = MI_ERR;  }
            
          if (status == MI_OK)
          {
            // memcpy(ucComMF522Buf, pValue, 4);
            for (i=0; i<16; i++)
            {  ucComMF522Buf[i] = *(pValue+i);  }
            CalulateCRC(ucComMF522Buf,4,&ucComMF522Buf[4]);
            unLen = 0;
            status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,6,ucComMF522Buf,&unLen);
            if (status != MI_ERR)
            {  status = MI_OK;  }
          }
          
          if (status == MI_OK)
          {
            ucComMF522Buf[0] = PICC_TRANSFER;
            ucComMF522Buf[1] = addr;
            CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]); 
          
            status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
        
            if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
            {  status = MI_ERR;  }
          }
          return status;
        }
        
        char PcdBakValue(unsigned char sourceaddr, unsigned char goaladdr)
        {
          char status;
          unsigned int unLen;
          unsigned char ucComMF522Buf[MAXRLEN]; 
        
          ucComMF522Buf[0] = PICC_RESTORE;
          ucComMF522Buf[1] = sourceaddr;
          CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
         
          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
        
          if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
          {  status = MI_ERR;  }
          
          if (status == MI_OK)
          {
            ucComMF522Buf[0] = 0;
            ucComMF522Buf[1] = 0;
            ucComMF522Buf[2] = 0;
            ucComMF522Buf[3] = 0;
            CalulateCRC(ucComMF522Buf,4,&ucComMF522Buf[4]);
         
            status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,6,ucComMF522Buf,&unLen);
            if (status != MI_ERR)
            {  status = MI_OK;  }
          }
          
          if (status != MI_OK)
          {  return MI_ERR;  }
          
          ucComMF522Buf[0] = PICC_TRANSFER;
          ucComMF522Buf[1] = goaladdr;
        
          CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
         
          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
        
          if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
          {  status = MI_ERR;  }
        
          return status;
        }
        
        char PcdHalt(void)
        {
          char status;
          unsigned int unLen;
          unsigned char ucComMF522Buf[MAXRLEN]; 
        
          ucComMF522Buf[0] = PICC_HALT;
          ucComMF522Buf[1] = 0;
          CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
         
          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
        
          return MI_OK;
        }
        
        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;
          switch (Command)
          {
            case PCD_AUTHENT:
             irqEn  = 0x12;
             waitFor = 0x10;
             break;
            case PCD_TRANSCEIVE:
             irqEn  = 0x77;
             waitFor = 0x30;
             break;
            default:
             break;
          }
          
          WriteRawRC(ComIEnReg,irqEn|0x80);
          ClearBitMask(ComIrqReg,0x80);
          WriteRawRC(CommandReg,PCD_IDLE);
          SetBitMask(FIFOLevelReg,0x80);
          
          for (i=0; i<InLenByte; i++)
          {  WriteRawRC(FIFODataReg, pInData[i]);  }
          WriteRawRC(CommandReg, Command);
          
          
          if (Command == PCD_TRANSCEIVE)
          {  SetBitMask(BitFramingReg,0x80); }
          
          i = 600;   //¸ù¾ÝʱÖÓƵÂʵ÷Õû£¬²Ù×÷M1¿¨×î´óµÈ´ýʱ¼ä25ms
          do 
          {
             n = ReadRawRC(ComIrqReg);
             i--;
          }
          while ((i!=0) && !(n&0x01) && !(n&waitFor));
          ClearBitMask(BitFramingReg,0x80);
        	   
          if (i!=0)
          {  
             if(!(ReadRawRC(ErrorReg)&0x1B))
             {
               status = MI_OK;
               if (n & irqEn & 0x01)
               {  status = MI_NOTAGERR;  }
               if (Command == PCD_TRANSCEIVE)
               {
                	n = ReadRawRC(FIFOLevelReg);
               	lastBits = ReadRawRC(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[i] = ReadRawRC(FIFODataReg);  }
              }
             }
             else
             {  status = MI_ERR;  }  
          }
          
        
          SetBitMask(ControlReg,0x80);      // stop timer now
          WriteRawRC(CommandReg,PCD_IDLE); 
          
          return status;
        }
        
        void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOutData)
        {
          unsigned char i,n;
          ClearBitMask(DivIrqReg,0x04);
          WriteRawRC(CommandReg,PCD_IDLE);
          SetBitMask(FIFOLevelReg,0x80);
          for (i=0; i<len; i++)
          {  WriteRawRC(FIFODataReg, *(pIndata+i));  }
          WriteRawRC(CommandReg, PCD_CALCCRC);
          i = 0xFF;
          do 
          {
            n = ReadRawRC(DivIrqReg);
            i--;
          }
          while ((i!=0) && !(n&0x04));
          pOutData[0] = ReadRawRC(CRCResultRegL);
          pOutData[1] = ReadRawRC(CRCResultRegM);
        }
        
        /////////////////////////////////////////////////////////
        void WriteRawRC(unsigned char reg,unsigned char value)
        {
          cs_clr;
          spi(reg<<1);
          spi(value);
          cs_set;
        }
        
        unsigned char ReadRawRC(unsigned char reg)
        {
          cs_clr;
          spi(0x80 | (reg<<1));
          reg = spi(0);
          cs_set;
          return reg;
        } 
        
        void SetBitMask(unsigned char reg,unsigned char mask)
        {
          unsigned char tmp;
          tmp = ReadRawRC(reg);
          tmp |= mask;
          WriteRawRC(reg,tmp);
        }
        
        void ClearBitMask(unsigned char reg,unsigned char mask)
        {
          unsigned char tmp;
          tmp = ReadRawRC(reg);
          tmp &= (~mask);
          WriteRawRC(reg,tmp);
        }
        توی برنامه هم این کد رو دارم :
        کد:
        while(1)
          {
            // Find cards
            status = MFRC522_Request(PICC_REQIDL, str);
            if (status == MI_OK)
            {
              printf("=============================\n");
              printf("Card detected!\n");
        	    printf("Card Type :");
              printf("%u",str[0]);
              printf("\n");
        
              LED_RED = 1;
              delay_ms(100);
              LED_RED = 0;
              delay_ms(100);
              LED_RED = 1;
              delay_ms(100);
              LED_RED = 0;
            }
          }
        البته بخش مقدار دهی پورتها و init کردن هم هست که واسه اینکه شلوغ نشه نزاشتم و شماتیک هم که اول لایبرری نوشته چطوریه.
        با این تابع request که توی while گزاشتم کارتهای همراه ماژول و کارتهای دسفایر رو میشناسه ولی مایفر رو نمیشناسه.
        مثلا کارت اتوبوس رو که نزدیک میکنم هیچ عکس العملی نداره
        انسان شکست نمی خورد بلکه ناامید می شود

        دیدگاه


          #5
          پاسخ : RC522 RFID Reader&Writer

          سلام, آقا مشکل از ماژول بود, من دوتا ماژول از دفتر تهران eca گرفتم که هر دوش مشکل داشت.
          رفتم یه ماژول از جهان کیت گرفتم به راحتی با همین کد کاد کرد.
          انسان شکست نمی خورد بلکه ناامید می شود

          دیدگاه


            #6
            پاسخ : RC522 RFID Reader&Writer

            تفاوت کارت دسفایر و مایفر در چی هست؟
            چه شکلی میشه این دو نوع رو از هم تشخیص داد؟
            تا حالا از پایه IRQ ماژول رو استفاده کردید یا باید به روش poling رجیسترهای ماژول رو چک کنیم و ببینیم چه زمانی کارت به ماژول نزدیک شده؟
            یک نمونه کارت 1K در سایت هست. این الان مایفر هست یا دسفایر؟

            دیدگاه


              #7
              پاسخ : RC522 RFID Reader&Writer

              نوشته اصلی توسط Homayon
              تفاوت کارت دسفایر و مایفر در چی هست؟
              چه شکلی میشه این دو نوع رو از هم تشخیص داد؟
              کارت دزفایر نوع جدید تری از کارت مایفر هست که اطلاعات توش ساختار سکتوری کارت مایفر رو ندارند بلکه حالت application هستند . به علت استفاده از الگوریتم تری دز ، اطلاعات این کارت روز نگاری شده و بر خلاف کارت مایفر معمولی قابل هک نیست
              نحوه شناساییش توی مرحله ریکوست (یا آنتیکلیژن ) هست . دو بایت اطلاعات که در جواب این مرحله میاد ، نوع کارت رو مشخص میکنه که مایفر 1 کیلو یا 4 کیلو یا دزفایر هست .
              Don't hesitate to ask any question ..

              دیدگاه


                #8
                پاسخ : RC522 RFID Reader&Writer

                کتابخانه هائی که اشاره کردید از کجا گرفتید میشه لینک بدید؟
                کد کامل میشه قرار دهید؟

                دیدگاه


                  #9
                  پاسخ : RC522 RFID Reader&Writer

                  از زحمتی که کشیدید و اطلاعاتی که در اختیار بقیه قرار دادید متشکرم
                  Don't hesitate to ask any question ..

                  دیدگاه

                  لطفا صبر کنید...
                  X