Added UID reading to SRI512, and reordered the output to reflect the
authoredouard@lafargue.name <edouard@lafargue.name@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Thu, 16 Apr 2009 09:30:11 +0000 (09:30 +0000)
committeredouard@lafargue.name <edouard@lafargue.name@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Thu, 16 Apr 2009 09:30:11 +0000 (09:30 +0000)
MSB-LSB alignment of the data. Routine should now be OK (including CRC...)

armsrc/iso14443.c

index 3a4a9ac1f63af0029188f3785771a629c54c6d28..7271b9d07b02a6a565e0eafef6d77b5c3da98bc0 100644 (file)
@@ -886,7 +886,30 @@ void ReadSRI512Iso14443(DWORD parameter)
        return;
     }
     // Tag is now selected,
-    // loop to read all 16 blocks, address from 0 to 15
+    // First get the tag's UID:
+    cmd1[0] = 0x0B;
+    ComputeCrc14443(CRC_14443_B, cmd1, 1 , &cmd1[1], &cmd1[2]);
+    CodeIso14443bAsReader(cmd1, 3); // Only first three bytes for this one\r
+    TransmitFor14443();\r
+    LED_A_ON();\r
+    GetSamplesFor14443Demod(TRUE, 2000,TRUE);\r
+    LED_A_OFF();\r
+    if (Demod.len != 10) {
+       DbpString("Expected 10 bytes from tag, got:");
+       DbpIntegers(Demod.len,0x0,0x0);
+       return;
+    }
+    // The check the CRC of the answer (use cmd1 as temporary variable):
+    ComputeCrc14443(CRC_14443_B, Demod.output, 8, &cmd1[2], &cmd1[3]);\r
+           if(cmd1[2] != Demod.output[8] || cmd1[3] != Demod.output[9]) {\r
+       DbpString("CRC Error reading block! - Below: expected, got");
+       DbpIntegers( (cmd1[2]<<8)+cmd1[3], (Demod.output[8]<<8)+Demod.output[9],0);
+       // Do not return;, let's go on... (we should retry, maybe ?)
+    }
+    DbpString("Tag UID (64 bits):");
+    DbpIntegers((Demod.output[7]<<24) + (Demod.output[6]<<16) + (Demod.output[5]<<8) + Demod.output[4], (Demod.output[3]<<24) + (Demod.output[2]<<16) + (Demod.output[1]<<8) + Demod.output[0], 0);
+
+    // Now loop to read all 16 blocks, address from 0 to 15
     DbpString("Tag memory dump, block 0 to 15");
     cmd1[0] = 0x08;
     i = 0x00;
@@ -909,13 +932,13 @@ void ReadSRI512Iso14443(DWORD parameter)
            // The check the CRC of the answer (use cmd1 as temporary variable):
            ComputeCrc14443(CRC_14443_B, Demod.output, 4, &cmd1[2], &cmd1[3]);\r
             if(cmd1[2] != Demod.output[4] || cmd1[3] != Demod.output[5]) {\r
-               DbpString("CRC Error reading block! - Below: expected, got, 0x0: ");
+               DbpString("CRC Error reading block! - Below: expected, got");
                DbpIntegers( (cmd1[2]<<8)+cmd1[3], (Demod.output[4]<<8)+Demod.output[5],0);
                // Do not return;, let's go on... (we should retry, maybe ?)
            }
            // Now print out the memory location:
            DbpString("Address , Contents, CRC");
-           DbpIntegers(i, (Demod.output[0]<<24) + (Demod.output[1]<<16) + (Demod.output[2]<<8) + Demod.output[3], (Demod.output[4]<<8)+Demod.output[5]);
+           DbpIntegers(i, (Demod.output[3]<<24) + (Demod.output[2]<<16) + (Demod.output[1]<<8) + Demod.output[0], (Demod.output[4]<<8)+Demod.output[5]);
            if (i == 0xff) {
                break;
            }
Impressum, Datenschutz