From b535053a778a8581b9f35f5895a57c57871d8815 Mon Sep 17 00:00:00 2001 From: pwpiwi Date: Fri, 26 May 2017 07:10:30 +0200 Subject: [PATCH 1/1] fix hf 15 commands (#293) --- armsrc/fpgaloader.h | 1 - armsrc/iso15693.c | 12 ++++++------ fpga/fpga_hf.bit | Bin 42175 -> 42175 bytes fpga/hi_read_rx_xcorr.v | 18 ++++++++++++------ 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/armsrc/fpgaloader.h b/armsrc/fpgaloader.h index 7dfc5c12..59c07ed8 100644 --- a/armsrc/fpgaloader.h +++ b/armsrc/fpgaloader.h @@ -58,7 +58,6 @@ void SetAdcMuxFor(uint32_t whichGpio); // Options for the HF reader, correlating against rx from tag #define FPGA_HF_READER_RX_XCORR_848_KHZ (1<<0) #define FPGA_HF_READER_RX_XCORR_SNOOP (1<<1) -#define FPGA_HF_READER_RX_XCORR_QUARTER_FREQ (1<<2) // Options for the HF simulated tag, how to modulate #define FPGA_HF_SIMULATOR_NO_MODULATION (0<<0) #define FPGA_HF_SIMULATOR_MODULATE_BPSK (1<<0) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 9a6ef9f0..e11e5a9c 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -319,7 +319,7 @@ static int GetIso15693AnswerFromTag(uint8_t *receivedResponse, int maxLen, int * // every other is Q. We just want power, so abs(I) + abs(Q) is // close to what we want. if(getNext) { - int8_t r = ABS(b) + ABS(prev); + uint8_t r = ABS(b) + ABS(prev); dest[c++] = (uint8_t)r; @@ -356,7 +356,7 @@ static int GetIso15693AnswerFromTag(uint8_t *receivedResponse, int maxLen, int * maxPos = i; } } - // DbpString("SOF at %d, correlation %d", maxPos,max/(arraylen(FrameSOF)/skip)); + // Dbprintf("SOF at %d, correlation %d", maxPos,max/(arraylen(FrameSOF)/skip)); int k = 0; // this will be our return value @@ -385,7 +385,7 @@ static int GetIso15693AnswerFromTag(uint8_t *receivedResponse, int maxLen, int * corr1 *= 4; if(corrEOF > corr1 && corrEOF > corr0) { - // DbpString("EOF at %d", i); + // Dbprintf("EOF at %d", i); break; } else if(corr1 > corr0) { i += arraylen(Logic1)/skip; @@ -457,7 +457,7 @@ static int GetIso15693AnswerFromSniff(uint8_t *receivedResponse, int maxLen, int // every other is Q. We just want power, so abs(I) + abs(Q) is // close to what we want. if(getNext) { - int8_t r = ABS(b) + ABS(prev); + uint8_t r = ABS(b) + ABS(prev); dest[c++] = (uint8_t)r; @@ -626,7 +626,7 @@ void AcquireRawAdcSamplesIso15693(void) // every other is Q. We just want power, so abs(I) + abs(Q) is // close to what we want. if(getNext) { - int8_t r = ABS(b) + ABS(prev); + uint8_t r = ABS(b) + ABS(prev); dest[c++] = (uint8_t)r; @@ -680,7 +680,7 @@ void RecordRawAdcSamplesIso15693(void) // every other is Q. We just want power, so abs(I) + abs(Q) is // close to what we want. if(getNext) { - int8_t r = ABS(b) + ABS(prev); + uint8_t r = ABS(b) + ABS(prev); dest[c++] = (uint8_t)r; diff --git a/fpga/fpga_hf.bit b/fpga/fpga_hf.bit index 6e6b9794b7ee55312bd98688d4f406b7e3f92020..864b52394dcb821b24bb42ac9b8d6d01a34832f8 100644 GIT binary patch literal 42175 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 literal 42175 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 diff --git a/fpga/hi_read_rx_xcorr.v b/fpga/hi_read_rx_xcorr.v index afaf7cb6..80e36327 100644 --- a/fpga/hi_read_rx_xcorr.v +++ b/fpga/hi_read_rx_xcorr.v @@ -28,11 +28,18 @@ assign pwr_oe1 = 1'b0; assign pwr_oe3 = 1'b0; assign pwr_oe4 = 1'b0; -wire adc_clk = ck_1356megb; - -reg fc_div_2; +// Clock divider +reg [0:0] fc_divider; always @(negedge ck_1356megb) - fc_div_2 <= fc_div_2 + 1; + fc_divider <= fc_divider + 1; +wire fc_div2 = fc_divider[0]; + +reg adc_clk; +always @(ck_1356megb) + if (xcorr_is_848) + adc_clk <= ck_1356megb; + else + adc_clk <= fc_div2; // When we're a reader, we just need to do the BPSK demod; but when we're an // eavesdropper, we also need to pick out the commands sent by the reader, @@ -77,7 +84,6 @@ reg ssp_frame; always @(negedge adc_clk) begin - if (xcorr_is_848 | fc_div_2) corr_i_cnt <= corr_i_cnt + 1; end @@ -137,7 +143,7 @@ begin begin ssp_clk <= 1'b1; // Don't shift if we just loaded new data, obviously. - if(corr_i_cnt != 7'd0) + if(corr_i_cnt != 6'd0) begin corr_i_out[7:0] <= {corr_i_out[6:0], corr_q_out[7]}; corr_q_out[7:1] <= corr_q_out[6:0]; -- 2.39.5