📄 cardmifare.c
字号:
/* +-------------------------------------------------------------------+ */
/* | Project : 1920.010 SCR-ALBM1 (13.56MHz MIFARE Programmer) | */
/* | Module : CardMifare.c | */
/* | Author : Lucio Faustinelli / Paolo Muchetti | */
/* | Company : AVE S.p.A. / INFOTECNICA S.r.l. | */
/* | Released: September, 27 2008 | */
/* | Revision: YZ078.00 (FW - First Official Release) | */
/* | Revision: YZ079.00 (EEPROM - First Official Release) | */
/* | Revised : September 27, 2008 | */
/* | Revisor : AVE S.p.A. (Lucio FAUSTINELLI) | */
/* | Notes : -------------- | */
/* +-------------------------------------------------------------------+ */
/* | Purpose : This module contains functions to find, read and write | */
/* | the RFID transponder Card | */
/* +-------------------------------------------------------------------+ */
/* | Resources: INT2_vect: Data comunication with Chip Mifare | */
/* +-------------------------------------------------------------------+ */
/* | Functions: int main( void ) | */
/* | void initBoardMifare( void ) | */
/* | void init_Rfid (uint8_t segnAcustico) | */
/* | uint8_t getRfid (void) | */
/* | void init_Clock (void) | */
/* | void init_Port (void) | */
/* | void init_INT2 (void) | */
/* | uint8_t readBlockRfid (uint8_t block) | */
/* | uint8_t gesWriteChipRfid(uint8_t rileggi, uint8_t block, uint8_t *bufData) | */
/* | uint8_t verificaDati(uint8_t *buff1, uint8_t *buff2, uint8_t len) | */
/* +---------------------------------------------------------------------------------------+ */
// G L O B A L
#include <stdio.h>
// L O C A L S
#include "LetExtDef.h"
#include "Spi.h"
#include "MfErrNo.h"
#include "MfRc500.h"
#include "PICCCmdConst.h"
#include "CardMifare.h"
#include <util/delay.h>
#include <string.h>
/* +-------------------------------------------------------------------+ */
/* | V A R I A B L E S | */
/* +-------------------------------------------------------------------+ */
uint8_t atq[2];
uint8_t snr[4];
uint8_t sak[1];
/*const*/ uint8_t keyA[6] = {0x08, 0x07, 0x3D, 0xC6, 0x9B, 0x4E}; // 08073DC69B4E
/*const*/ uint8_t keyB[6] = {0x24, 0x53, 0xCA, 0xF7, 0xD2, 0x39}; // 2453CAF7D239
/*const*/ uint8_t keyFF[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
uint8_t accCondition[4] = {0x78, 0x77, 0x88, 0xFF};
uint8_t bufMifare[NUM_BYTE_BLOCK];
uint8_t bufTemp[NUM_BYTE_BLOCK];
uint8_t coded_keyA[12];
uint8_t coded_keyB[12];
int8_t retunVal;
uint8_t statoChip;
uint8_t sectorAutenticato = NOT_SECTOR_AUTEN;
uint8_t offsetSectTra;
uint8_t bufAddress[4];
int8_t enableRetry;
int8_t nRetry;
//--------------------------------------------------------------------------
// init_Rfid
//
// -Descrizione : Init Micro per la comunicazione con Mifare
//
// -Parametri : segnAcustico --> attiva il buzzer
//
// -Return : -
//--------------------------------------------------------------------------
void init_Rfid (uint8_t segnAcustico)
{
if ( Mf500PcdConfig()== MI_OK )
;
/*
{
if (segnAcustico)
{
_LED_(LED_GN, 0);
buzzer_on(20);
_delay_ms(10);
_LED_(0, LED_GN);
}
else
{
_LED_(LED_GN, 0);
_delay_ms(200);
_LED_(0, LED_GN);
_delay_ms(200);
}
}
*/
else if ( Mf500PcdConfig()== MI_RESETERR )
;
/*
{
if (segnAcustico)
{
_LED_(LED_RD, 0);
buzzer_on(50);
_delay_ms(100);
buzzer_on(50);
_delay_ms(100);
buzzer_on(50);
_delay_ms(100);
_LED_(0, LED_RD);
}
else
{
_LED_(LED_RD, 0);
_delay_ms(200);
_LED_(0, LED_RD);
_delay_ms(200);
}
}
*/
Mf500HostCodeKey(keyA, coded_keyA);
Mf500HostCodeKey(keyB, coded_keyB);
}
//--------------------------------------------------------------------------
// init_INT2
//
// -Descrizione : Inizializzazione dell'interrupt 2
//
// -Parametri : -
//
// -Return : -
//--------------------------------------------------------------------------
void init_INT2 (void)
{
// Abilitazione interrupt esterno INT 2
EIMSK |= (1 << INT2);
// The falling edge of INT2 generates asynchronously an interrupt request.
EICRA |= (1 << ISC21);
EICRA &= ~(1 << ISC20);
}
//--------------------------------------------------------------------------
// ISR INT2
//
// -Descrizione : Funzione di asservimento dell'interrupt esterno INT2
// necessaria per la gestione del MIFARE
//
// -Parametri : -
//
// -Return : -
//--------------------------------------------------------------------------
ISR(INT2_vect)
{
SingleResponseIsr();
}
/* +-------------------------------------------------------------------+ */
/* | i n i t C A R D ( ) 15 Aprile 2008 | */
/* | Funzione per l'inizializzazione delle risorse e delle variabili | */
/* | usate per la lettura di una carta transponder | */
/* | Parametri passati : Nessuno | */
/* | Parametri ritornati : Nessuno | */
/* +-------------------------------------------------------------------+ */
void initBoardMifare( void )
{
// TCCR1B = /*_BV( ICES1 ) |*/ _BV( CS11 ) /*| _BV( ICNC1 )*/;
// TCCR1B &= ~( _BV( CS12 ) | _BV( CS10 ) );
// TCCR1B = /*_BV( ICES1 ) |*/ _BV( CS11 );
// TIMSK1 &= ~( _BV( TOIE1 ) | _BV( OCIE1A ) | _BV( OCIE1B ) ); // clear not used interrupt
// //TIFR1 |= _BV( ICF1 ); // clear first interrupt
// TCCR1A = 0x00;
// ICR1 = 0;
init_INT2 (); // inizializzazione INT2 usato per MIFARE
init_SPI (); // inizializzazione SPI hardware
// Reset HW al chip MIFARE
PORTB |= (1 << RSTPD);
_delay_ms(1);
PORTB &= ~(1 << RSTPD);
_delay_ms(1);
}
//--------------------------------------------------------------------------
// getSecBlkByte
//
// -Descrizione : Ricavo Settore, ID Blocco, ID Byte rispetto alla mappa AVE
//
// -Parametri : Indirizzo espresso in byte della posizione nella mappa AVE
//
// -Return : ADD_ERR 0 = errore indirizzo non valido
// ADD_OK 1 = indirizzo Ok
// ADD_CTRL_WORD 2 = Control Word
// ADD_PROT_WORD 3 = Protection Word
//
//--------------------------------------------------------------------------
uint8_t getSecBlkByte(uint8_t addByte)
{
uint8_t numW;
uint8_t resto;
numW = (addByte / N_BYTE_WORD);
// Verifico sia nel offset corretto
switch(numW)
{
case ID_WORD_AVEPINCODE:
// Errore non si pu
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -