Пример #1
0
void MFRC522_Init(void)
{
	MFRC522_DDR |= _BV(MFRC522_CS);
	MFRC522_CS_High();
	
	
	
	//digitalWrite(NRSTPD,HIGH);

	MFRC522_Reset();

	//Timer: TPrescaler*TreloadVal/6.78MHz = 24ms
    Write_MFRC522(TModeReg, 0x8D);		//Tauto=1; f(Timer) = 6.78MHz/TPreScaler
    Write_MFRC522(TPrescalerReg, 0x3E);	//TModeReg[3..0] + TPrescalerReg
    Write_MFRC522(TReloadRegL, 30);
    Write_MFRC522(TReloadRegH, 0);

	Write_MFRC522(TxAutoReg, 0x40);		//100%ASK
	Write_MFRC522(ModeReg, 0x3D);		//CRC0x6363

	//ClearBitMask(Status2Reg, 0x08);		//MFCrypto1On=0
	//Write_MFRC522(RxSelReg, 0x86);		//RxWait = RxSelReg[5..0]
	//Write_MFRC522(RFCfgReg, 0x7F);   		//RxGain = 48dB

	AntennaOn();
}
Пример #2
0
/*
      Function: void MFRC522_Init(void)
   Description: Initialize all Hardware & Software configuration in RFID Reader.

 */
void MFRC522_Init(void)
{
	MFRC522_Reset();
	Write_MFRC522(TModeReg, 0x8D);		//Tauto=1; f(Timer) = 6.78MHz/TPreScaler
	Write_MFRC522(TPrescalerReg, 0x3E);	//TModeReg[3..0] + TPrescalerReg
	Write_MFRC522(TReloadRegL, 30);
	Write_MFRC522(TReloadRegH, 0);

	Write_MFRC522(TxAutoReg, 0x40);		//100%ASK
	Write_MFRC522(ModeReg, 0x3D);		//CRC初始值0x6363	???

	AntennaOn();		//打开天线
}
Пример #3
0
void RFID::MFRC522_Init(void) {
	
	
	
	digitalWrite(NRSTPD,HIGH);

	MFRC522_Reset();
	 
    Write_MFRC522(TModeReg, 0x8D);		//Tauto=1; f(Timer) = 6.78MHz/TPreScaler
    Write_MFRC522(TPrescalerReg, 0x3E);	//TModeReg[3..0] + TPrescalerReg
    Write_MFRC522(TReloadRegL, 30);           
    Write_MFRC522(TReloadRegH, 0);
	
	Write_MFRC522(TxAutoReg, 0x40);		//100%ASK
	Write_MFRC522(ModeReg, 0x3D);		//CRC???0x6363	???

	AntennaOn();		//????
}
Пример #4
0
MFRC522::MFRC522()
{
    /* Set Reset pin */
    MFRC522_PORT.OUTCLR = 1<<MFRC522_RESET_PIN;     /* Reset on */
    MFRC522_PORT.DIRSET = 1<<MFRC522_RESET_PIN;     /* Set as output */
    MFRC522_PORT.OUTSET = 1<<MFRC522_RESET_PIN;     /* Reset off */
    
    /* Setup SPI driver */
    spi_set_master_port_dir(MFRC522_PORT);
    spi_cs_disable(MFRC522_PORT);
    spi_set_mode(MFRC522_SPI,SPI_MODE_0_gc);
    spi_set_dord(MFRC522_SPI,SPI_DORD_MSB_FIRST);
    spi_enable_master(MFRC522_SPI); 
        
    /* Set SPI Baudrate */
    #if (MFRC522_BAUD <= F_CPU/128)
        MFRC522_SPI.CTRL |= SPI_PRESCALER_DIV128_gc;
    #elif (MFRC522_BAUD <= F_CPU/64)
        MFRC522_SPI.CTRL |= SPI_PRESCALER_DIV64_gc;
    #elif (MFRC522_BAUD <= F_CPU/32)
        MFRC522_SPI.CTRL |= 1<<SPI_CLK2X_bp|SPI_PRESCALER_DIV64_gc;
    #elif (MFRC522_BAUD <= F_CPU/16)
        MFRC522_SPI.CTRL |= SPI_PRESCALER_DIV16_gc;
    #elif (MFRC522_BAUD <= F_CPU/8)
        MFRC522_SPI.CTRL |= 1<<SPI_CLK2X_bp|SPI_PRESCALER_DIV16_gc;
    #elif (MFRC522_BAUD <= F_CPU/4)
        MFRC522_SPI.CTRL |= SPI_PRESCALER_DIV4_gc;
    #elif (MFRC522_BAUD <= F_CPU/2)
        MFRC522_SPI.CTRL |= 1<<SPI_CLK2X_bp|SPI_PRESCALER_DIV4_gc;
    #else
        MFRC522_SPI.CTRL |= 1<<SPI_CLK2X_bp|SPI_PRESCALER_DIV4_gc;
    #endif  
    
    /* Set interrupt on pin MFRC522_IRQ_PIN */
    MFRC522_PORT.INT0MASK = 1<<MFRC522_IRQ_PIN;
    MFRC522_PORT.INTCTRL = PORT_INT0LVL_HI_gc;
    #if MFRC522_IRQ_PIN == 0
        MFRC522_PORT.PIN0CTRL = PORT_ISC_FALLING_gc|PORT_OPC_PULLUP_gc;
    #elif MFRC522_IRQ_PIN == 1
        MFRC522_PORT.PIN1CTRL = PORT_ISC_FALLING_gc|PORT_OPC_PULLUP_gc;
    #elif MFRC522_IRQ_PIN == 2
        MFRC522_PORT.PIN2CTRL = PORT_ISC_FALLING_gc|PORT_OPC_PULLUP_gc;
    #elif MFRC522_IRQ_PIN == 3
        MFRC522_PORT.PIN3CTRL = PORT_ISC_FALLING_gc|PORT_OPC_PULLUP_gc;
    #elif MFRC522_IRQ_PIN == 4
        MFRC522_PORT.PIN4CTRL = PORT_ISC_FALLING_gc|PORT_OPC_PULLUP_gc;
    #elif MFRC522_IRQ_PIN == 5
        MFRC522_PORT.PIN5CTRL = PORT_ISC_FALLING_gc|PORT_OPC_PULLUP_gc;
    #elif MFRC522_IRQ_PIN == 6
        MFRC522_PORT.PIN6CTRL = PORT_ISC_FALLING_gc|PORT_OPC_PULLUP_gc;
    #elif MFRC522_IRQ_PIN == 7
        MFRC522_PORT.PIN7CTRL = PORT_ISC_FALLING_gc|PORT_OPC_PULLUP_gc;
    #endif
    
    for (uint16_t i=0; i<0x7FFF; i++);              /* Wait routine until oscillator is ready. t >= 37.74us */
    
    WriteReg(REG_CommandReg,COMM_SoftReset);        /* Soft Reset */
    
    WriteReg(REG_TModeReg, 0x80);                   /* TAuto=1; timer starts automatically at the end of the transmission in all communication modes at all speeds   */
    WriteReg(REG_TPrescalerReg, 0xA9);              /* TPreScaler = TModeReg[3..0]:TPrescalerReg, ie 0x0A9 = 169 => f_timer=40kHz, ie a timer period of 25us.        */
    WriteReg(REG_TReloadRegH, 0x03);                /* Reload timer with 0x3E8 = 1000, ie 25ms before timeout.                                                       */
    WriteReg(REG_TReloadRegL, 0xe8);                
    
    WriteReg(REG_TxASKReg, 0x40);                   /* Default 0x00. Force a 100 % ASK modulation independent of the ModGsPReg register setting                      */
    WriteReg(REG_ModeReg, 0x3D);                    /* Default 0x3F. Set the preset value for the CRC coprocessor for the CalcCRC command to 0x6363 (ISO 14443-3 part 6.2.4) */
    
    AntennaOn();
}