From 645c960f6111f4820c78c76f209479c3f369a8ac Mon Sep 17 00:00:00 2001 From: Martin Holst Swende <martin@swende.se> Date: Thu, 15 Jan 2015 15:16:34 +0100 Subject: [PATCH 1/1] Implemented new FPGA mode for iclass tag simulation. Reduces arm-side size of transfer/memory by a factor of 8. Makes for easier arm-side encoding of messages, for when we start needing to do that on the fly instead of using precalculated messages --- armsrc/apps.h | 2 + armsrc/iclass.c | 136 +++++++++++++++++++++++++++------------------ fpga/fpga_hf.bit | Bin 42175 -> 42175 bytes fpga/hi_simulate.v | 39 +++++++++++-- 4 files changed, 118 insertions(+), 59 deletions(-) diff --git a/armsrc/apps.h b/armsrc/apps.h index ea70144e..6a3fa186 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -134,6 +134,8 @@ void SetAdcMuxFor(uint32_t whichGpio); #define FPGA_HF_SIMULATOR_MODULATE_BPSK (1<<0) #define FPGA_HF_SIMULATOR_MODULATE_212K (2<<0) #define FPGA_HF_SIMULATOR_MODULATE_424K (4<<0) +#define FPGA_HF_SIMULATOR_MODULATE_424K_8BIT 0x5//101 + // Options for ISO14443A #define FPGA_HF_ISO14443A_SNIFFER (0<<0) #define FPGA_HF_ISO14443A_TAGSIM_LISTEN (1<<0) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 64abc84a..329e1765 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -857,57 +857,93 @@ static int GetIClassCommandFromReader(uint8_t *received, int *len, int maxLen) } } +static uint8_t encode4Bits(const uint8_t b) +{ + uint8_t c = b & 0xF; + // OTA, the least significant bits first + // The columns are + // 1 - Bit value to send + // 2 - Reversed (big-endian) + // 3 - Encoded + // 4 - Hex values + + switch(c){ + // 1 2 3 4 + case 15: return 0x55; // 1111 -> 1111 -> 01010101 -> 0x55 + case 14: return 0x95; // 1110 -> 0111 -> 10010101 -> 0x95 + case 13: return 0x65; // 1101 -> 1011 -> 01100101 -> 0x65 + case 12: return 0xa5; // 1100 -> 0011 -> 10100101 -> 0xa5 + case 11: return 0x59; // 1011 -> 1101 -> 01011001 -> 0x59 + case 10: return 0x99; // 1010 -> 0101 -> 10011001 -> 0x99 + case 9: return 0x69; // 1001 -> 1001 -> 01101001 -> 0x69 + case 8: return 0xa9; // 1000 -> 0001 -> 10101001 -> 0xa9 + case 7: return 0x56; // 0111 -> 1110 -> 01010110 -> 0x56 + case 6: return 0x96; // 0110 -> 0110 -> 10010110 -> 0x96 + case 5: return 0x66; // 0101 -> 1010 -> 01100110 -> 0x66 + case 4: return 0xa6; // 0100 -> 0010 -> 10100110 -> 0xa6 + case 3: return 0x5a; // 0011 -> 1100 -> 01011010 -> 0x5a + case 2: return 0x9a; // 0010 -> 0100 -> 10011010 -> 0x9a + case 1: return 0x6a; // 0001 -> 1000 -> 01101010 -> 0x6a + default: return 0xaa; // 0000 -> 0000 -> 10101010 -> 0xaa + + } +} //----------------------------------------------------------------------------- // Prepare tag messages //----------------------------------------------------------------------------- static void CodeIClassTagAnswer(const uint8_t *cmd, int len) { - //So far a dummy implementation, not used - //int lastProxToAirDuration =0; + + /* + * SOF comprises 3 parts; + * * An unmodulated time of 56.64 us + * * 24 pulses of 423.75 KHz (fc/32) + * * A logic 1, which starts with an unmodulated time of 18.88us + * followed by 8 pulses of 423.75kHz (fc/32) + * + * + * EOF comprises 3 parts: + * - A logic 0 (which starts with 8 pulses of fc/32 followed by an unmodulated + * time of 18.88us. + * - 24 pulses of fc/32 + * - An unmodulated time of 56.64 us + * + * + * A logic 0 starts with 8 pulses of fc/32 + * followed by an unmodulated time of 256/fc (~18,88us). + * + * A logic 0 starts with unmodulated time of 256/fc (~18,88us) followed by + * 8 pulses of fc/32 (also 18.88us) + * + * The mode FPGA_HF_SIMULATOR_MODULATE_424K_8BIT which we use to simulate tag, + * works like this. + * - A 1-bit input to the FPGA becomes 8 pulses on 423.5kHz (fc/32) (18.88us). + * - A 0-bit inptu to the FPGA becomes an unmodulated time of 18.88us + * + * In thist mode the SOF can be written as 00011101 = 0x1D + * The EOF can be written as 10111000 = 0xb8 + * A logic 1 is 01 + * A logic 0 is 10 + * + * */ + int i; ToSendReset(); // Send SOF - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0xff;//Proxtoair duration starts here - ToSend[++ToSendMax] = 0xff; - ToSend[++ToSendMax] = 0xff; - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0xff; + ToSend[++ToSendMax] = 0x1D; for(i = 0; i < len; i++) { - int j; uint8_t b = cmd[i]; - - // Data bits - for(j = 0; j < 8; j++) { - if(b & 1) { - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0xff; - } else { - ToSend[++ToSendMax] = 0xff; - ToSend[++ToSendMax] = 0x00; - } - b >>= 1; - } + ToSend[++ToSendMax] = encode4Bits(b & 0xF); //Least significant half + ToSend[++ToSendMax] = encode4Bits((b >>4) & 0xF);//Most significant half } // Send EOF - ToSend[++ToSendMax] = 0xff; - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0xff; - ToSend[++ToSendMax] = 0xff; - ToSend[++ToSendMax] = 0xff; - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0x00; - + ToSend[++ToSendMax] = 0xB8; //lastProxToAirDuration = 8*ToSendMax - 3*8 - 3*8;//Not counting zeroes in the beginning or end - // Convert from last byte pos to length ToSendMax++; } @@ -920,18 +956,9 @@ static void CodeIClassTagSOF() ToSendReset(); // Send SOF - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0xff; - ToSend[++ToSendMax] = 0xff; - ToSend[++ToSendMax] = 0xff; - ToSend[++ToSendMax] = 0x00; - ToSend[++ToSendMax] = 0xff; - + ToSend[++ToSendMax] = 0x1D; // lastProxToAirDuration = 8*ToSendMax - 3*8;//Not counting zeroes in the beginning - // Convert from last byte pos to length ToSendMax++; } @@ -984,6 +1011,7 @@ void SimulateIClass(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain memcpy(csn_crc, datain+(i*8), 8); if(doIClassSimulation(csn_crc,1,mac_responses+i*8)) { + cmd_send(CMD_ACK,CMD_SIMULATE_TAG_ICLASS,i,0,mac_responses,i*8); return; // Button pressed } } @@ -1036,23 +1064,23 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived, uint8_t *reader int trace_data_size = 0; //uint8_t sof = 0x0f; - // Respond SOF -- takes 8 bytes + // Respond SOF -- takes 1 bytes uint8_t *resp1 = (((uint8_t *)BigBuf) + FREE_BUFFER_OFFSET); int resp1Len; // Anticollision CSN (rotated CSN) - // 176: Takes 16 bytes for SOF/EOF and 10 * 16 = 160 bytes (2 bytes/bit) - uint8_t *resp2 = (((uint8_t *)BigBuf) + FREE_BUFFER_OFFSET + 10); + // 22: Takes 2 bytes for SOF/EOF and 10 * 2 = 20 bytes (2 bytes/byte) + uint8_t *resp2 = (((uint8_t *)BigBuf) + FREE_BUFFER_OFFSET + 2); int resp2Len; // CSN - // 176: Takes 16 bytes for SOF/EOF and 10 * 16 = 160 bytes (2 bytes/bit) - uint8_t *resp3 = (((uint8_t *)BigBuf) + FREE_BUFFER_OFFSET + 190); + // 22: Takes 2 bytes for SOF/EOF and 10 * 2 = 20 bytes (2 bytes/byte) + uint8_t *resp3 = (((uint8_t *)BigBuf) + FREE_BUFFER_OFFSET + 30); int resp3Len; // e-Purse - // 144: Takes 16 bytes for SOF/EOF and 8 * 16 = 128 bytes (2 bytes/bit) - uint8_t *resp4 = (((uint8_t *)BigBuf) + FREE_BUFFER_OFFSET + 370); + // 18: Takes 2 bytes for SOF/EOF and 8 * 2 = 16 bytes (2 bytes/byte) + uint8_t *resp4 = (((uint8_t *)BigBuf) + FREE_BUFFER_OFFSET + 60); int resp4Len; // + 1720.. @@ -1195,7 +1223,7 @@ int doIClassSimulation(uint8_t csn[], int breakAfterMacReceived, uint8_t *reader A legit tag has about 380us. **/ if(modulated_response_size > 0) { - SendIClassAnswer(modulated_response, modulated_response_size, timeout); + SendIClassAnswer(modulated_response, modulated_response_size, 1); t2r_time = GetCountSspClk(); } @@ -1232,7 +1260,8 @@ static int SendIClassAnswer(uint8_t *resp, int respLen, int delay) int i = 0, d=0;//, u = 0, d = 0; uint8_t b = 0; - FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR|FPGA_HF_SIMULATOR_MODULATE_424K); + //FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR|FPGA_HF_SIMULATOR_MODULATE_424K); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR|FPGA_HF_SIMULATOR_MODULATE_424K_8BIT); AT91C_BASE_SSC->SSC_THR = 0x00; FpgaSetupSsc(); @@ -1256,7 +1285,8 @@ static int SendIClassAnswer(uint8_t *resp, int respLen, int delay) AT91C_BASE_SSC->SSC_THR = b; } - if (i > respLen +4) break; +// if (i > respLen +4) break; + if (i > respLen +1) break; } return 0; diff --git a/fpga/fpga_hf.bit b/fpga/fpga_hf.bit index 5389428c5539eb60eee9f27b6956ca950aa79b15..8b0c7a3788ef438c94eaed81346a08f24927f954 100644 GIT binary patch literal 42175 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 literal 42175 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 diff --git a/fpga/hi_simulate.v b/fpga/hi_simulate.v index c04ade80..0768c29d 100644 --- a/fpga/hi_simulate.v +++ b/fpga/hi_simulate.v @@ -50,12 +50,38 @@ begin else if(~(| adc_d[7:5])) after_hysteresis = 1'b0; end + // Divide 13.56 MHz by 32 to produce the SSP_CLK // The register is bigger to allow higher division factors of up to /128 -reg [6:0] ssp_clk_divider; +reg [10:0] ssp_clk_divider; + always @(posedge adc_clk) ssp_clk_divider <= (ssp_clk_divider + 1); -assign ssp_clk = ssp_clk_divider[4]; + +reg ssp_clk; +reg ssp_frame; +always @(negedge adc_clk) +begin + //If we're in 101, we only need a new bit every 8th carrier bit (53Hz). Otherwise, get next bit at 424Khz + if(mod_type == 3'b101) + begin + if(ssp_clk_divider[7:0] == 8'b00000000) + ssp_clk <= 1'b0; + if(ssp_clk_divider[7:0] == 8'b10000000) + ssp_clk <= 1'b1; + + end + else + begin + if(ssp_clk_divider[4:0] == 5'd0)//[4:0] == 5'b00000) + ssp_clk <= 1'b1; + if(ssp_clk_divider[4:0] == 5'd16) //[4:0] == 5'b10000) + ssp_clk <= 1'b0; + end +end + + +//assign ssp_clk = ssp_clk_divider[4]; // Divide SSP_CLK by 8 to produce the byte framing signal; the phase of // this is arbitrary, because it's just a bitstream. @@ -69,12 +95,13 @@ reg [2:0] ssp_frame_divider_from_arm; always @(negedge ssp_clk) ssp_frame_divider_from_arm <= (ssp_frame_divider_from_arm + 1); -reg ssp_frame; + + always @(ssp_frame_divider_to_arm or ssp_frame_divider_from_arm or mod_type) if(mod_type == 3'b000) // not modulating, so listening, to ARM ssp_frame = (ssp_frame_divider_to_arm == 3'b000); else - ssp_frame = (ssp_frame_divider_from_arm == 3'b000); + ssp_frame = (ssp_frame_divider_from_arm == 3'b000); // Synchronize up the after-hysteresis signal, to produce DIN. reg ssp_din; @@ -90,7 +117,7 @@ always @(mod_type or ssp_clk or ssp_dout) modulating_carrier <= ssp_dout ^ ssp_clk_divider[3]; // XOR means BPSK else if(mod_type == 3'b010) modulating_carrier <= ssp_dout & ssp_clk_divider[5]; // switch 212kHz subcarrier on/off - else if(mod_type == 3'b100) + else if(mod_type == 3'b100 || mod_type == 3'b101) modulating_carrier <= ssp_dout & ssp_clk_divider[4]; // switch 424kHz modulation on/off else modulating_carrier <= 1'b0; // yet unused @@ -106,7 +133,7 @@ assign pwr_oe4 = modulating_carrier; // This one is always on, so that we can watch the carrier. assign pwr_oe3 = 1'b0; -assign dbg = after_hysteresis; +assign dbg = modulating_carrier; //reg dbg; //always @(ssp_dout) // dbg <= ssp_dout; -- 2.39.5