Forum: Mikrocontroller und Digitale Elektronik Wie kann ich mich beim RFID Tag einloggen?


von Ram R. (ramles)


Lesenswert?

Ich habe aktuell 2 unterschiedliche Codes, die im Prinzip das gleiche 
Ziel haben aber anders funktionieren.
Der erste Code ist eine Vorlage vom Texas Instruments vom RFID 
Mikrocontroller MSP430.
Den zweiten Code habe ich selber erstellt.
Es geht um das Default Login, alle Variablen in beiden Codes haben den 
gleichen Datentypen, allerdings kann ich in meinem Code nicht beim 
Glasstag anmelden. obwohl da die gleichen Werte sind wie im Vorlage 
Code.
So schaut die Login-Funktion aus vom Vorlage Code (Code Composer Studio 
Software vom Texas Instrumets):
1
//Abschnitt der Main Funktion:
2
uint8_t Login_Password_Byte[4] = {0x00, 0x00, 0x00, 0x00}; /*defined as a global variable
3
void AskForPassword(void)
4
{    UART_sendCString("Default password (j/n)?: ");
5
6
    while(UART_Not_Recieved)
7
{
8
9
}
10
    UART_putNewLine();
11
    UART_Not_Recieved = true;
12
    if(RX == 0x6A)
13
    {
14
        Login_Password_Byte[0] = 0x00;
15
        Login_Password_Byte[1] = 0x00;
16
        Login_Password_Byte[2] = 0x00;
17
        Login_Password_Byte[3] = 0x00;
18
19
    }else{
20
    UART_sendCString("Please enter a valid 4 character password: ");
21
22
    while(UART_Not_Recieved)
23
    {
24
25
    }
26
    Login_Password_Byte[0] = RX;
27
    UART_Not_Recieved = true;
28
    while(UART_Not_Recieved)
29
        {
30
31
        }
32
    Login_Password_Byte[1] = RX;
33
    UART_Not_Recieved = true;
34
    while(UART_Not_Recieved)
35
        {
36
37
        }
38
    Login_Password_Byte[2] = RX;
39
    UART_Not_Recieved = true;
40
    while(UART_Not_Recieved)
41
        {
42
43
        }
44
    Login_Password_Byte[3] = RX;
45
    UART_Not_Recieved = true;
46
    UART_putNewLine();
47
    }
48
}
49
//Abschnitt der LOGIN Funktion
50
oid Login(uint8_t Byte1, uint8_t Byte2, uint8_t Byte3, uint8_t Byte4)
51
{
52
    uint8_t ui8Offset = 0;
53
        g_pui8TrfBuffer[ui8Offset++] = 0x8F;        // Reset FIFO
54
        g_pui8TrfBuffer[ui8Offset++] = 0x91;        // Send with CRC
55
        g_pui8TrfBuffer[ui8Offset++] = 0x3D;        // Write Continuous
56
        g_pui8TrfBuffer[ui8Offset++] = 0x00;        //length
57
        g_pui8TrfBuffer[ui8Offset++] = 0xF0;      // length
58
        g_pui8TrfBuffer[ui8Offset++] = 0x22;  // ISO15693 flags
59
        g_pui8TrfBuffer[ui8Offset++] = 0xE4;            // Login command code
60
        g_pui8TrfBuffer[ui8Offset++] = 0x16;        //IC Mfg Code
61
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[0];    // Tag UID
62
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[1];    // Tag UID
63
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[2];    // Tag UID
64
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[3];    // Tag UID
65
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[4];    // Tag UID
66
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[5];    // Tag UID
67
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[6];    // Tag UID
68
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[7];    // Tag UID
69
70
            g_pui8TrfBuffer[ui8Offset++] = Byte1;         // Password
71
            UART_putByte(Byte1);
72
            g_pui8TrfBuffer[ui8Offset++] = Byte2;
73
            UART_putByte(Byte2);
74
75
            g_pui8TrfBuffer[ui8Offset++] = Byte3;
76
            UART_putByte(Byte3);
77
78
            g_pui8TrfBuffer[ui8Offset++] = Byte4;
79
            UART_putByte(Byte4);
80
        TRF79xxA_writeRaw(&g_pui8TrfBuffer[0], ui8Offset);      // Issue the write Password command
81
        g_sTrfStatus = TRF79xxA_waitRxData(5,15);       // 5 millisecond TX timeout, 15 millisecond RX timeout
82
83
if (g_sTrfStatus == RX_COMPLETE)        // If data has been received
84
{
85
if (g_pui8TrfBuffer[0] == 0x00)     // Confirm "no error" in response flags byte
86
 {
87
UART_sendCString(" Login successful ");
88
UART_putNewLine();
89
 } 
90
else
91
{
92
 UART_sendCString(" Login failed (wrong password)");
93
Write_Data = false;
94
New_Password = false;
95
Change_Protect_Status = false;
96
UART_putNewLine();
97
}
98
}
99
}
Das Passwort ist 32 Bit und besteht in ASCII aus 4 Charaktern, jeder 
Charakter hat 1 Byte/8bits.
Mein Code schaut so aus: (CVI Labview Software)
1
//  Default LOGIN for new tags
2
            UINT8 LOGIN_Password_Byte[4] = {0x00, 0x00, 0x00, 0x00};
3
            LOGIN_Password_Byte[0]= 0x00;
4
            LOGIN_Password_Byte[1]= 0x00;
5
            LOGIN_Password_Byte[2]= 0x00;
6
            LOGIN_Password_Byte[3]= 0x00;
7
            
8
            //
9
            Fmt(cCommand,"%s<%s%c%c%c%c%s",LOGIN,LOGIN_Password_Byte[0],LOGIN_Password_Byte[1],LOGIN_Password_Byte[2],LOGIN_Password_Byte[3],ENDE);
10
            //Fmt(cCommand,"%s<%s%s",LOGIN,"abcd:ENDE");
11
            iResult = Befehl_Senden(cCommand,cAnswer);
12
            if(iResult == -1)
13
            {
14
                SetCtrlAttribute(sPanels.P_Hauptmenue, P_MAIN_LED_GLASS_IDEN, ATTR_CTRL_VAL, 0);
15
                Breakpoint();
16
            }
17
            if(iResult == TRUE)
18
            {
19
            SetCtrlAttribute(sPanels.P_Hauptmenue, P_MAIN_LED_LOGIN, ATTR_CTRL_VAL, iResult);
20
}
Vlt. gibt es da bestimmt irgendwas in meinem Code, was fehlen müsste 
oder ich nicht beachtet haben könnte.
Für jeden Tipp oder Hilfe wäre ich dankbar!
Im Voraus vielen Dank!
Gruß

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Du solltest Dich mal mit Schleifen beschäftigen, statt Unmengen an C&P.
Wenn ich 4-mal das gleiche machen muß, dann setze ich dafür eine 
Schleife 0..3 auf.

Und fürs Array kopieren gibt es fertige Funktionen in der <string.h>. 
Das macht man nicht zu Fuß selber und erst recht nicht als C&P.

Ich würde auch nicht blockierend schreiben, sondern die Bytes nur 
sammeln und zur Mainloop zurück kehren. Und erst, wenn 4 Byte empfangen 
wurden, würde ich die Aktion machen. Dann kann die Mainloop in der 
Zwischenzeit noch andere Sachen machen.

von Ram R. (ramles)


Lesenswert?

https://github.com/ddkity/NFC-for-TI-Proj/find/master
Was du im ersten Code siehst, falls du den gemeint hast und dafür die 
Schleifen umgesetzt werden müssen, sind von Texas Instruments bzw. 
kannst du auch hier in github als NFC Project finden. Da wollte ich auch 
nichts ändern weil sobald da was geändert wird geht was schief -> Der 
Fall in meinem Code.

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.