mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
FIX: 'hf 15 *' commands - the demod should work better now and as a bonus I've added some tracelogging. The timer is not quite correct yet but its a start.
sample: hf 15 reader hf list raw
This commit is contained in:
parent
c0948b5d7b
commit
ec07e2e006
7 changed files with 427 additions and 451 deletions
|
@ -697,7 +697,7 @@ void UsbPacketReceived(uint8_t *packet, int len) {
|
|||
RecordRawAdcSamplesIso15693();
|
||||
break;
|
||||
case CMD_ISO_15693_COMMAND:
|
||||
DirectTag15693Command(c->arg[0],c->arg[1],c->arg[2],c->d.asBytes);
|
||||
DirectTag15693Command(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
|
||||
break;
|
||||
case CMD_ISO_15693_FIND_AFI:
|
||||
BruteforceIso15693Afi(c->arg[0]);
|
||||
|
|
|
@ -195,7 +195,7 @@ void AcquireRawAdcSamplesIso15693(void);
|
|||
void ReaderIso15693(uint32_t parameter); // Simulate an ISO15693 reader - greg
|
||||
void SimTagIso15693(uint32_t parameter, uint8_t *uid); // simulate an ISO15693 tag - greg
|
||||
void BruteforceIso15693Afi(uint32_t speed); // find an AFI of a tag - atrox
|
||||
void DirectTag15693Command(uint32_t datalen,uint32_t speed, uint32_t recv, uint8_t data[]); // send arbitrary commands from CLI - atrox
|
||||
void DirectTag15693Command(uint32_t datalen,uint32_t speed, uint32_t recv, uint8_t *data); // send arbitrary commands from CLI - atrox
|
||||
void SetDebugIso15693(uint32_t flag);
|
||||
void Iso15693InitReader(void);
|
||||
|
||||
|
|
|
@ -1020,12 +1020,12 @@ static void TransmitFor14443b_AsReader(void) {
|
|||
// AT91C_BASE_SSC->SSC_THR = 0XFF;
|
||||
// }
|
||||
|
||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX | FPGA_HF_READER_TX_SHALLOW_MOD);
|
||||
SpinDelay(40);
|
||||
|
||||
int c;
|
||||
volatile uint32_t b;
|
||||
|
||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX | FPGA_HF_READER_TX_SHALLOW_MOD);
|
||||
SpinDelay(40);
|
||||
|
||||
// What does this loop do? Is it TR1?
|
||||
// 0xFF = 8 bits of 1. 1 bit == 1Etu,..
|
||||
// loop 10 * 8 = 80 ETU of delay, with a non modulated signal. why?
|
||||
|
@ -1036,8 +1036,7 @@ static void TransmitFor14443b_AsReader(void) {
|
|||
++c;
|
||||
}
|
||||
if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
|
||||
b = AT91C_BASE_SSC->SSC_RHR;
|
||||
(void)b;
|
||||
b = AT91C_BASE_SSC->SSC_RHR; (void)b;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1047,8 +1046,7 @@ static void TransmitFor14443b_AsReader(void) {
|
|||
AT91C_BASE_SSC->SSC_THR = ToSend[c++];
|
||||
}
|
||||
if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
|
||||
b = AT91C_BASE_SSC->SSC_RHR;
|
||||
(void)b;
|
||||
b = AT91C_BASE_SSC->SSC_RHR; (void)b;
|
||||
}
|
||||
}
|
||||
//WaitForFpgaDelayQueueIsEmpty(delay);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -201,29 +201,27 @@ const productName uidmapping[] = {
|
|||
// *buf should be large enough to fit the 64bit uid
|
||||
// returns 1 if suceeded
|
||||
int getUID(uint8_t *buf) {
|
||||
UsbCommand resp;
|
||||
uint8_t *recv;
|
||||
UsbCommand c = {CMD_ISO_15693_COMMAND, {0, 1, 1}}; // len,speed,recv?
|
||||
uint8_t *req = c.d.asBytes;
|
||||
req[0] = ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_INVENTORY | ISO15_REQINV_SLOT1;
|
||||
req[1] = ISO15_CMD_INVENTORY;
|
||||
|
||||
int reqlen = 0;
|
||||
UsbCommand resp;
|
||||
UsbCommand c = {CMD_ISO_15693_COMMAND, {0, 1, 1}}; // len,speed,recv?
|
||||
|
||||
c.d.asBytes[0] = ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_INVENTORY | ISO15_REQINV_SLOT1;
|
||||
c.d.asBytes[1] = ISO15_CMD_INVENTORY;
|
||||
c.d.asBytes[2] = 0; // mask length
|
||||
|
||||
c.arg[0] = AddCrc(c.d.asBytes, 3);
|
||||
|
||||
// don't give up the at the first try
|
||||
for (int retry = 0; retry <3; retry++) {
|
||||
|
||||
req[2] = 0; // mask length
|
||||
reqlen = AddCrc(req, 3);
|
||||
c.arg[0] = reqlen;
|
||||
for (uint8_t retry = 0; retry < 3; retry++) {
|
||||
|
||||
clearCommandBuffer();
|
||||
SendCommand(&c);
|
||||
|
||||
if (WaitForResponseTimeout(CMD_ACK, &resp, 1000)) {
|
||||
recv = resp.d.asBytes;
|
||||
if (resp.arg[0] >= 12 && ISO15_CRC_CHECK == Crc(recv, 12)) {
|
||||
memcpy(buf, recv + 2, 8);
|
||||
if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) {
|
||||
|
||||
uint8_t resplen = resp.arg[0];
|
||||
if (resplen >= 12 && ISO15_CRC_CHECK == Crc(resp.d.asBytes, 12)) {
|
||||
memcpy(buf, resp.d.asBytes + 2, 8);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -408,8 +406,7 @@ int CmdHF15Record(const char *Cmd) {
|
|||
}
|
||||
|
||||
// used with 'hf search'
|
||||
int HF15Reader(const char *Cmd, bool verbose)
|
||||
{
|
||||
int HF15Reader(const char *Cmd, bool verbose) {
|
||||
uint8_t uid[8] = {0,0,0,0,0,0,0,0};
|
||||
if (!getUID(uid)) {
|
||||
if (verbose) PrintAndLog("No Tag found.");
|
||||
|
@ -426,9 +423,7 @@ int CmdHF15Reader(const char *Cmd) {
|
|||
char cmdp = param_getchar(Cmd, 0);
|
||||
if (cmdp == 'h' || cmdp == 'H') return usage_15_reader();
|
||||
|
||||
UsbCommand c = {CMD_READER_ISO_15693, {strtol(Cmd, NULL, 0), 0, 0}};
|
||||
clearCommandBuffer();
|
||||
SendCommand(&c);
|
||||
HF15Reader(Cmd, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,6 @@ int Iso15693AddCrc(uint8_t *req, int n) {
|
|||
return n+2;
|
||||
}
|
||||
|
||||
|
||||
int sprintf(char *str, const char *format, ...);
|
||||
|
||||
// returns a string representation of the UID
|
||||
|
@ -53,9 +52,12 @@ int sprintf(char *str, const char *format, ...);
|
|||
// return: ptr to string
|
||||
char* Iso15693sprintUID(char *target, uint8_t *uid) {
|
||||
static char tempbuf[2*8+1] = {0};
|
||||
if (target==NULL) target=tempbuf;
|
||||
if (target == NULL)
|
||||
target = tempbuf;
|
||||
sprintf(target,"%02X%02X%02X%02X%02X%02X%02X%02X",
|
||||
uid[7],uid[6],uid[5],uid[4],uid[3],uid[2],uid[1],uid[0]);
|
||||
uid[7], uid[6], uid[5], uid[4],
|
||||
uid[3], uid[2], uid[1], uid[0]
|
||||
);
|
||||
return target;
|
||||
}
|
||||
|
||||
|
|
|
@ -119,7 +119,6 @@ unsigned short iclass_crc16(char *data_p, unsigned short length);
|
|||
// 1) logic '0' (8 pulses of 423.75khz followed by unmodulated for 18.88us)
|
||||
// 2) 24 pulses of 423.75khz
|
||||
// 3) Unmodulated time of 56.64us
|
||||
|
||||
static const int Iso15693FrameEOF[] = {
|
||||
1, 1, 1, 1,
|
||||
1, 1, 1, 1,
|
||||
|
@ -131,5 +130,4 @@ unsigned short iclass_crc16(char *data_p, unsigned short length);
|
|||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
|
||||
};
|
||||
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue