Forum: Mikrocontroller und Digitale Elektronik MFRC531 als Slave über USI an ATTiny2313


von georg (Gast)


Lesenswert?

Hallo zusammen.


Ich arbeite an einem kleinen RFID Reader. Ich verwende als Controller 
einen ATTiny2313 und als Reader einen NXP Mifare MFRC531.

Diese Beiden ICs sind über SPI(USI) verbunden. (siehe Schaltplan)

Beitrag "Senden/Empfangen Problem mit ATtiny 2313 und FTDI FT232R"

Mein Problem: Ich bekomme vom MFRC531 keine Antwort auf DI(vom 
ATTiny2313)->Leitung ist immer auf LOW.

Ich verwende den ATTiny2313 als Master und habe SPI(USI) dort wie folgt 
initialisiert:
1
void init_master()
2
{
3
  DDRB=~(1<<PB5); //MOSI
4
5
}
6
7
unsigned char master_trans(unsigned char byte)
8
{
9
 
10
  USIDR=byte;
11
  USISR=(1<<USIOIF);
12
  do
13
    {
14
    USICR=  (1<<USIWM0)|
15
        (1<<USICS1)|
16
        (1<<USICLK)|
17
        (1<<USITC);
18
    }
19
  while (!(USISR&(1<<USIOIF)));
20
  return USIDR;
21
}

mit der Funktion "master_trans" kann ich ein byte über DO schicken - 
Funktioniert.


Bei der Initialisierung des MFRC531 habe ich nur NNS aus LOW geschaltet.
1
init_mfrc()
2
{
3
  DDRB |=  (1<<PB3); // NSS  -> Ausgang
4
  PORTB |=(1<<PB3); // NSS  -> LOW
5
}

Ich habe mir aus dem Datenblatt des MFRC531 die SPI -Spezifikation(Seite 
17 - 22). angesehen.

http://www.nxp.com/#/pip/pip=[pfp=41960]|pp=[t=pfp,i=41960]

Habe daraus folgenden gemacht:
1
//Write DATA
2
    master_trans(4); //Byte 0  : 0|ADDRESS|0  0|000010|0
3
    _delay_ms(1000);
4
5
    master_trans(170);//Byte 1  : 10101010
6
    _delay_ms(1000);
7
8
//Read DATA
9
    master_trans(132);//Byte 0   : 1|ADDRESS|0   1|000010|0
10
    _delay_ms(1000);
11
12
    master_trans(132);//Byte 1  : 1|ADDRESS|0   1|000010|0
13
    _delay_ms(1000);
14
15
    master_trans(0);//last Byte  : 0|000000|0
Ich will mit dem oben gepostetem code, den FIFO ansprechen. Im 
Datenblatt(Seite 25) steht dass der FIFOData Register die Adresse 
0x02(also 10 binär) hat, diese hab ich dann oben als Addresse verwendet. 
Wahrscheinlich völliger Schwachsinn.


Ich befürchte, dass bei der Initialisierung vom MFRC531 noch so einiges 
fehlt. Kann mir da jemand helfen?


lg georg

von georg (Gast)


Lesenswert?

hallo zusmmen!


Ich habe auf der Homepage des Herstellers NXP ein paar Tausend Zeilen 
Code gefunden. Diese sind für einen MFRC500 und einem C166 
Microcontroller.

Ich schaft aber nicht das essenzielle da raus zu filtern.

Ich will ja fürs erste nur mal 1 Byte über SPI hin und her schicken. 
dafür werd ich wohl nicht 3000 Zeilen Code brauchen, oder?

von georg (Gast)


Angehängte Dateien:

Lesenswert?

hier der source code von der NXP Homepage.

habe mal versucht, die gesamgte BasicFunctionLibrary in mein Projekt zu 
einzubinden.
Bekomme beim builden folgende Fehlermeldungen:
1
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/bin/ld.exe: region text is full (tuerschl.elf section .text)
2
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/bin/ld.exe: region text is full (tuerschl.elf section .text)
3
MfRc500uC.o: In function `PcdBasicRegisterConfiguration':
4
D:\tuerschl\tuerschl\default/../MfRc500uC.c:2658: undefined reference to `SleepUs'
5
MfRc500uC.o: In function `PcdRfReset':
6
D:\tuerschl\tuerschl\default/../MfRc500uC.c:2231: undefined reference to `SleepMs'
7
MfRc500uC.o: In function `PcdReset':

PS:
ich verwende AVR Studio und ARV GCC

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.