]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
fixing iso14443b (issue #103):
authorpwpiwi <pwpiwi@users.noreply.github.com>
Thu, 18 Jun 2015 13:30:56 +0000 (15:30 +0200)
committerpwpiwi <pwpiwi@users.noreply.github.com>
Thu, 18 Jun 2015 13:41:30 +0000 (15:41 +0200)
- revert removal of FPGA_HF_READER_RX_XCORR_848_KHZ. Need to be able to switch to 424kHz for ISO15693.

armsrc/iso14443b.c
fpga/fpga_hf.bit
fpga/fpga_hf.v
fpga/hi_read_rx_xcorr.v

index 80f93678fb7840fae0927cefe943f8363e066cd7..8d1a5cca433c499a226ec56c854fa4794cb79827 100644 (file)
@@ -732,7 +732,7 @@ static void GetSamplesFor14443bDemod(int n, bool quiet)
        // Signal field is ON with the appropriate LED:
        LED_D_ON();
        // And put the FPGA in the appropriate mode
        // Signal field is ON with the appropriate LED:
        LED_D_ON();
        // And put the FPGA in the appropriate mode
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ);
 
        for(;;) {
                int behindBy = lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR;
 
        for(;;) {
                int behindBy = lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR;
@@ -929,7 +929,7 @@ void ReadSTMemoryIso14443b(uint32_t dwLast)
        // Signal field is on with the appropriate LED
        LED_D_ON();
        FpgaWriteConfWord(
        // Signal field is on with the appropriate LED
        LED_D_ON();
        FpgaWriteConfWord(
-               FPGA_MAJOR_MODE_HF_READER_RX_XCORR);
+               FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ);
        SpinDelay(200);
 
        // First command: wake up the tag using the INITIATE command
        SpinDelay(200);
 
        // First command: wake up the tag using the INITIATE command
@@ -1091,7 +1091,7 @@ void RAMFUNC SnoopIso14443b(void)
        LEDsoff();
 
        // And put the FPGA in the appropriate mode
        LEDsoff();
 
        // And put the FPGA in the appropriate mode
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_SNOOP);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ | FPGA_HF_READER_RX_XCORR_SNOOP);
        SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
 
        // Setup for the DMA.
        SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
 
        // Setup for the DMA.
@@ -1228,7 +1228,7 @@ void SendRawCommand14443B(uint32_t datalen, uint32_t recv, uint8_t powerfield, u
  */
 
        // if(!GETBIT(GPIO_LED_D))      {       // if field is off
  */
 
        // if(!GETBIT(GPIO_LED_D))      {       // if field is off
-               // FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR);
+               // FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ);
                // // Signal field is on with the appropriate LED
                // LED_D_ON();
                // SpinDelay(200);
                // // Signal field is on with the appropriate LED
                // LED_D_ON();
                // SpinDelay(200);
index 717dad13eb67e5ef2cfeb39da3c4a0f6e9e04fd3..49bec2242cb7720524289f3eba1397bbc2a22867 100644 (file)
Binary files a/fpga/fpga_hf.bit and b/fpga/fpga_hf.bit differ
index e84081b38fefb8b741eb063ab9379d92b074b77e..8a465e75c5304452b598d5d28d5f2f4ae16f8c6f 100644 (file)
@@ -67,8 +67,10 @@ assign major_mode = conf_word[7:5];
 // some fraction of the buffers)
 wire hi_read_tx_shallow_modulation = conf_word[0];
 
 // some fraction of the buffers)
 wire hi_read_tx_shallow_modulation = conf_word[0];
 
-// For the high-frequency receive correlator:
-// whether to drive the coil (reader) or just short it (snooper)
+// For the high-frequency receive correlator: frequency against which to
+// correlate.
+wire hi_read_rx_xcorr_848 = conf_word[0];
+// and whether to drive the coil (reader) or just short it (snooper)
 wire hi_read_rx_xcorr_snoop = conf_word[1];
 
 // For the high-frequency simulated tag: what kind of modulation to use.
 wire hi_read_rx_xcorr_snoop = conf_word[1];
 
 // For the high-frequency simulated tag: what kind of modulation to use.
@@ -97,7 +99,7 @@ hi_read_rx_xcorr hrxc(
        hrxc_ssp_frame, hrxc_ssp_din, ssp_dout, hrxc_ssp_clk,
        cross_hi, cross_lo,
        hrxc_dbg,
        hrxc_ssp_frame, hrxc_ssp_din, ssp_dout, hrxc_ssp_clk,
        cross_hi, cross_lo,
        hrxc_dbg,
-       hi_read_rx_xcorr_snoop
+       hi_read_rx_xcorr_848, hi_read_rx_xcorr_snoop
 );
 
 hi_simulate hs(
 );
 
 hi_simulate hs(
index a6a99cd574b97e2a7a2b253df5becddf1b4fbeb6..4a5de5536c64cffc2233db2d77ab9bc433672d10 100644 (file)
@@ -10,7 +10,7 @@ module hi_read_rx_xcorr(
     ssp_frame, ssp_din, ssp_dout, ssp_clk,
     cross_hi, cross_lo,
     dbg,
     ssp_frame, ssp_din, ssp_dout, ssp_clk,
     cross_hi, cross_lo,
     dbg,
-    snoop
+    xcorr_is_848, snoop
 );
     input pck0, ck_1356meg, ck_1356megb;
     output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4;
 );
     input pck0, ck_1356meg, ck_1356megb;
     output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4;
@@ -20,7 +20,7 @@ module hi_read_rx_xcorr(
     output ssp_frame, ssp_din, ssp_clk;
     input cross_hi, cross_lo;
     output dbg;
     output ssp_frame, ssp_din, ssp_clk;
     input cross_hi, cross_lo;
     output dbg;
-    input snoop;
+    input xcorr_is_848, snoop;
 
 // Carrier is steady on through this, unless we're snooping.
 assign pwr_hi = ck_1356megb & (~snoop);
 
 // Carrier is steady on through this, unless we're snooping.
 assign pwr_hi = ck_1356megb & (~snoop);
@@ -28,8 +28,22 @@ assign pwr_oe1 = 1'b0;
 assign pwr_oe3 = 1'b0;
 assign pwr_oe4 = 1'b0;
 
 assign pwr_oe3 = 1'b0;
 assign pwr_oe4 = 1'b0;
 
-wire adc_clk = ck_1356megb;
-
+(* clock_signal = "yes" *) reg fc_div_2;
+always @(negedge ck_1356megb)
+    fc_div_2 <= fc_div_2 + 1;
+
+(* clock_signal = "yes" *) reg adc_clk;
+always @(xcorr_is_848, ck_1356megb, fc_div_2)
+if (xcorr_is_848)
+       // The subcarrier frequency is fc/16; we will sample at fc, so that 
+       // means the subcarrier is 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 ...
+       adc_clk <= ck_1356megb;
+else
+    // The subcarrier frequency is fc/32; we will sample at fc/2, and
+    // the subcarrier will look identical.
+    adc_clk <= fc_div_2;
+
+       
 // 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,
 // using AM. Do this the same way that we do it for the simulated tag.
 // 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,
 // using AM. Do this the same way that we do it for the simulated tag.
Impressum, Datenschutz