From 467340996e7af6563070df2c96c374e6a97b1456 Mon Sep 17 00:00:00 2001 From: pwpiwi Date: Sun, 21 Jun 2015 18:00:42 +0200 Subject: [PATCH] fixing iso14443b (issue #103): - fix hf 14b snoop - fix hf 14b sim --- armsrc/iso14443b.c | 161 ++++++++++++++++++++-------------------- fpga/fpga_hf.bit | Bin 42175 -> 42175 bytes fpga/hi_read_rx_xcorr.v | 26 +++---- 3 files changed, 90 insertions(+), 97 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 8d1a5cca..1ae1692b 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -122,8 +122,7 @@ static struct { STATE_UNSYNCD, STATE_GOT_FALLING_EDGE_OF_SOF, STATE_AWAITING_START_BIT, - STATE_RECEIVING_DATA, - STATE_ERROR_WAIT + STATE_RECEIVING_DATA } state; uint16_t shiftReg; int bitCnt; @@ -145,7 +144,7 @@ static struct { * Returns: true if we received a EOF * false if we are still waiting for some more */ -static int Handle14443bUartBit(int bit) +static RAMFUNC int Handle14443bUartBit(uint8_t bit) { switch(Uart.state) { case STATE_UNSYNCD: @@ -172,7 +171,7 @@ static int Handle14443bUartBit(int bit) } else { // didn't stay down long enough // before going high, error - Uart.state = STATE_ERROR_WAIT; + Uart.state = STATE_UNSYNCD; } } else { // do nothing, keep waiting @@ -183,7 +182,8 @@ static int Handle14443bUartBit(int bit) if(Uart.bitCnt > 12) { // Give up if we see too many zeros without // a one, too. - Uart.state = STATE_ERROR_WAIT; + LED_A_OFF(); + Uart.state = STATE_UNSYNCD; } break; @@ -193,7 +193,7 @@ static int Handle14443bUartBit(int bit) if(Uart.posCnt > 50/2) { // max 57us between characters = 49 1/fs, max 3 etus after low phase of SOF = 24 1/fs // stayed high for too long between // characters, error - Uart.state = STATE_ERROR_WAIT; + Uart.state = STATE_UNSYNCD; } } else { // falling edge, this starts the data byte @@ -227,41 +227,30 @@ static int Handle14443bUartBit(int bit) if(Uart.byteCnt >= Uart.byteCntMax) { // Buffer overflowed, give up - Uart.posCnt = 0; - Uart.state = STATE_ERROR_WAIT; + LED_A_OFF(); + Uart.state = STATE_UNSYNCD; } else { // so get the next byte now Uart.posCnt = 0; Uart.state = STATE_AWAITING_START_BIT; } - } else if(Uart.shiftReg == 0x000) { + } else if (Uart.shiftReg == 0x000) { // this is an EOF byte LED_A_OFF(); // Finished receiving + Uart.state = STATE_UNSYNCD; if (Uart.byteCnt != 0) { return TRUE; } - Uart.posCnt = 0; - Uart.state = STATE_ERROR_WAIT; } else { // this is an error - Uart.posCnt = 0; - Uart.state = STATE_ERROR_WAIT; + LED_A_OFF(); + Uart.state = STATE_UNSYNCD; } } break; - case STATE_ERROR_WAIT: - // We're all screwed up, so wait a little while - // for whatever went wrong to finish, and then - // start over. - Uart.posCnt++; - if(Uart.posCnt > 10) { - Uart.state = STATE_UNSYNCD; - LED_A_OFF(); - } - break; - default: + LED_A_OFF(); Uart.state = STATE_UNSYNCD; break; } @@ -269,6 +258,23 @@ static int Handle14443bUartBit(int bit) return FALSE; } + +static void UartReset() +{ + Uart.byteCntMax = MAX_FRAME_SIZE; + Uart.state = STATE_UNSYNCD; + Uart.byteCnt = 0; + Uart.bitCnt = 0; +} + + +static void UartInit(uint8_t *data) +{ + Uart.output = data; + UartReset(); +} + + //----------------------------------------------------------------------------- // Receive a command (from the reader to us, where we are the simulated tag), // and store it in the given buffer, up to the given maximum length. Keeps @@ -278,44 +284,34 @@ static int Handle14443bUartBit(int bit) // Assume that we're called with the SSC (to the FPGA) and ADC path set // correctly. //----------------------------------------------------------------------------- -static int GetIso14443bCommandFromReader(uint8_t *received, int *len, int maxLen) +static int GetIso14443bCommandFromReader(uint8_t *received, uint16_t *len) { - uint8_t mask; - int i, bit; - // Set FPGA mode to "simulated ISO 14443B tag", no modulation (listen // only, since we are receiving, not transmitting). // Signal field is off with the appropriate LED LED_D_OFF(); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION); - // Now run a `software UART' on the stream of incoming samples. - Uart.output = received; - Uart.byteCntMax = maxLen; - Uart.state = STATE_UNSYNCD; + UartInit(received); for(;;) { WDT_HIT(); if(BUTTON_PRESS()) return FALSE; - if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - AT91C_BASE_SSC->SSC_THR = 0x00; - } if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) { uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; - - mask = 0x80; - for(i = 0; i < 8; i++, mask >>= 1) { - bit = (b & mask); - if(Handle14443bUartBit(bit)) { + for(uint8_t mask = 0x80; mask != 0x00; mask >>= 1) { + if(Handle14443bUartBit(b & mask)) { *len = Uart.byteCnt; return TRUE; } } } } + + return FALSE; } //----------------------------------------------------------------------------- @@ -324,9 +320,12 @@ static int GetIso14443bCommandFromReader(uint8_t *received, int *len, int maxLen //----------------------------------------------------------------------------- void SimulateIso14443bTag(void) { - // the only command we understand is REQB, AFI=0, Select All, N=0: + // the only commands we understand is REQB, AFI=0, Select All, N=0: static const uint8_t cmd1[] = { 0x05, 0x00, 0x08, 0x39, 0x73 }; - // ... and we respond with ATQB, PUPI = 820de174, Application Data = 0x20381922, + // ... and REQB, AFI=0, Normal Request, N=0: + static const uint8_t cmd2[] = { 0x05, 0x00, 0x00, 0x71, 0xFF }; + + // ... and we always respond with ATQB, PUPI = 820de174, Application Data = 0x20381922, // supports only 106kBit/s in both directions, max frame size = 32Bytes, // supports ISO14443-4, FWI=8 (77ms), NAD supported, CID not supported: static const uint8_t response1[] = { @@ -334,25 +333,27 @@ void SimulateIso14443bTag(void) 0x00, 0x21, 0x85, 0x5e, 0xd7 }; - uint8_t *resp; - int respLen; + clear_trace(); + set_tracing(TRUE); + + const uint8_t *resp; + uint8_t *respCode; + uint16_t respLen, respCodeLen; // allocate command receive buffer BigBuf_free(); uint8_t *receivedCmd = BigBuf_malloc(MAX_FRAME_SIZE); - int len; - - int i; - int cmdsRecvd = 0; + uint16_t len; + uint16_t cmdsRecvd = 0; FpgaDownloadAndGo(FPGA_BITSTREAM_HF); // prepare the (only one) tag answer: CodeIso14443bAsTag(response1, sizeof(response1)); - uint8_t *resp1 = BigBuf_malloc(ToSendMax); - memcpy(resp1, ToSend, ToSendMax); - uint16_t resp1Len = ToSendMax; + uint8_t *resp1Code = BigBuf_malloc(ToSendMax); + memcpy(resp1Code, ToSend, ToSendMax); + uint16_t resp1CodeLen = ToSendMax; // We need to listen to the high-frequency, peak-detected path. SetAdcMuxFor(GPIO_MUXSEL_HIPKD); @@ -361,20 +362,28 @@ void SimulateIso14443bTag(void) cmdsRecvd = 0; for(;;) { - uint8_t b1, b2; - if(!GetIso14443bCommandFromReader(receivedCmd, &len, 100)) { + if(!GetIso14443bCommandFromReader(receivedCmd, &len)) { Dbprintf("button pressed, received %d commands", cmdsRecvd); break; - } + } - // Good, look at the command now. + if (tracing) { + uint8_t parity[MAX_PARITY_SIZE]; + LogTrace(receivedCmd, len, 0, 0, parity, TRUE); + } - if(len == sizeof(cmd1) && memcmp(receivedCmd, cmd1, len) == 0) { - resp = resp1; respLen = resp1Len; + // Good, look at the command now. + if ( (len == sizeof(cmd1) && memcmp(receivedCmd, cmd1, len) == 0) + || (len == sizeof(cmd2) && memcmp(receivedCmd, cmd2, len) == 0) ) { + resp = response1; + respLen = sizeof(response1); + respCode = resp1Code; + respCodeLen = resp1CodeLen; } else { Dbprintf("new cmd from reader: len=%d, cmdsRecvd=%d", len, cmdsRecvd); // And print whether the CRC fails, just for good measure + uint8_t b1, b2; ComputeCrc14443(CRC_14443_B, receivedCmd, len-2, &b1, &b2); if(b1 != receivedCmd[len-2] || b2 != receivedCmd[len-1]) { // Not so good, try again. @@ -392,7 +401,7 @@ void SimulateIso14443bTag(void) break; } - if(respLen <= 0) continue; + if(respCodeLen <= 0) continue; // Modulate BPSK // Signal field is off with the appropriate LED @@ -402,15 +411,15 @@ void SimulateIso14443bTag(void) FpgaSetupSsc(); // Transmit the response. - i = 0; + uint16_t i = 0; for(;;) { if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { - uint8_t b = resp[i]; + uint8_t b = respCode[i]; AT91C_BASE_SSC->SSC_THR = b; i++; - if(i > respLen) { + if(i > respCodeLen) { break; } } @@ -419,6 +428,13 @@ void SimulateIso14443bTag(void) (void)b; } } + + // trace the response: + if (tracing) { + uint8_t parity[MAX_PARITY_SIZE]; + LogTrace(resp, respLen, 0, 0, parity, FALSE); + } + } } @@ -436,8 +452,7 @@ static struct { DEMOD_AWAITING_FALLING_EDGE_OF_SOF, DEMOD_GOT_FALLING_EDGE_OF_SOF, DEMOD_AWAITING_START_BIT, - DEMOD_RECEIVING_DATA, - DEMOD_ERROR_WAIT + DEMOD_RECEIVING_DATA } state; int bitCount; int posCount; @@ -684,22 +699,6 @@ static void DemodInit(uint8_t *data) } -static void UartReset() -{ - Uart.byteCntMax = MAX_FRAME_SIZE; - Uart.state = STATE_UNSYNCD; - Uart.byteCnt = 0; - Uart.bitCnt = 0; -} - - -static void UartInit(uint8_t *data) -{ - Uart.output = data; - UartReset(); -} - - /* * Demodulate the samples we received from the tag, also log to tracebuffer * quiet: set to 'TRUE' to disable debug output @@ -1163,11 +1162,11 @@ void RAMFUNC SnoopIso14443b(void) /* false-triggered by the commands from the reader. */ DemodReset(); } - ReaderIsActive = (Uart.state != STATE_UNSYNCD); + ReaderIsActive = (Uart.state > STATE_GOT_FALLING_EDGE_OF_SOF); } if(!ReaderIsActive) { // no need to try decoding tag data if the reader is sending - and we cannot afford the time - if(Handle14443bSamplesDemod(ci & 0xFE, cq & 0xFE)) { + if(Handle14443bSamplesDemod(ci | 0x01, cq | 0x01)) { //Use samples as a time measurement if(tracing) diff --git a/fpga/fpga_hf.bit b/fpga/fpga_hf.bit index 49bec2242cb7720524289f3eba1397bbc2a22867..a4d72e373bb59cfa56cc3869b1ccb3c18908250a 100644 GIT binary patch literal 42175 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 z