From 79afc031fcd8db4e9930dae8ea4a7324e8d1a629 Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 8 Sep 2018 14:11:51 +0200 Subject: [PATCH] FIX: LF antenna discharge after interfer timings. As suggested by @ts And thanks to @drandreas who patiently explains fpga verilog code to me. This introduces a new majoe mode, FPGA_MAJOR_MODE_OFF_LF, which should ONLY be used in sending loops for LF. Basically the PWR_LO is set HIGH in order to discharge voltage faster. Once sending is over, the normal FPGA_MAJOR_MODE_OFF SHALL be used. --- armsrc/fpgaloader.h | 12 +++++++----- armsrc/lfops.c | 9 ++++----- fpga/fpga_lf.bit | Bin 42175 -> 42175 bytes fpga/fpga_lf.v | 14 +++++++++----- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/armsrc/fpgaloader.h b/armsrc/fpgaloader.h index 21731b571..a1e0d1ee0 100644 --- a/armsrc/fpgaloader.h +++ b/armsrc/fpgaloader.h @@ -62,7 +62,9 @@ extern void switch_off(void); #define FPGA_MAJOR_MODE_HF_SNOOP (4<<5) #define FPGA_MAJOR_MODE_HF_FELICA (5<<5) // BOTH +#define FPGA_MAJOR_MODE_OFF_LF (6<<5) #define FPGA_MAJOR_MODE_OFF (7<<5) + // Options for LF_ADC #define FPGA_LF_ADC_READER_FIELD (1<<0) // Options for LF_EDGE_DETECT @@ -76,11 +78,11 @@ extern void switch_off(void); #define FPGA_HF_READER_RX_XCORR_SNOOP (1<<1) #define FPGA_HF_READER_RX_XCORR_QUARTER (1<<2) // Options for the HF simulated tag, how to modulate -#define FPGA_HF_SIMULATOR_NO_MODULATION (0<<0) // 0000 -#define FPGA_HF_SIMULATOR_MODULATE_BPSK (1<<0) // 0001 -#define FPGA_HF_SIMULATOR_MODULATE_212K (2<<0) // 0010 -#define FPGA_HF_SIMULATOR_MODULATE_424K (4<<0) // 0100 -#define FPGA_HF_SIMULATOR_MODULATE_424K_8BIT 0x5 // 0101 +#define FPGA_HF_SIMULATOR_NO_MODULATION 0x0 // 0000 +#define FPGA_HF_SIMULATOR_MODULATE_BPSK 0x1 // 0001 +#define FPGA_HF_SIMULATOR_MODULATE_212K 0x2 // 0010 +#define FPGA_HF_SIMULATOR_MODULATE_424K 0x4 // 0100 +#define FPGA_HF_SIMULATOR_MODULATE_424K_8BIT 0x5 // 0101 // no 848K // Options for ISO14443A diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 9d6cfbf0e..a957e4dfb 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -26,10 +26,9 @@ # define OPEN_COIL() HIGH(GPIO_SSC_DOUT) #endif - -#define START_GAP 52*8 // was 250 // SPEC: 1*8 to 50*8 - typ 15*8 (15fc) -#define WRITE_GAP 18*8 // was 160 // SPEC: 1*8 to 20*8 - typ 10*8 (10fc) -#define WRITE_0 24*8 // was 144 // SPEC: 16*8 to 32*8 - typ 24*8 (24fc) +#define START_GAP 31*8 // was 250 // SPEC: 1*8 to 50*8 - typ 15*8 (15fc) +#define WRITE_GAP 20*8 // was 160 // SPEC: 1*8 to 20*8 - typ 10*8 (10fc) +#define WRITE_0 18*8 // was 144 // SPEC: 16*8 to 32*8 - typ 24*8 (24fc) #define WRITE_1 54*8 // was 400 // SPEC: 48*8 to 64*8 - typ 56*8 (56fc) 432 for T55x7; 448 for E5550 #define READ_GAP 15*8 @@ -1260,7 +1259,7 @@ void TurnReadLFOn(uint32_t delay) { WaitUS(delay); } void TurnReadLF_off(uint32_t delay) { - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF_LF); WaitUS(delay); } diff --git a/fpga/fpga_lf.bit b/fpga/fpga_lf.bit index 44ef60365e23b68c25c2a068972265ff4f8ea495..7d9a840a33150630332b2219d4c4f14ee3ada715 100644 GIT binary patch literal 42175 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 literal 42175 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 g@Q+iDC?77`V0fo`dDIl>dtV4?kTI^8f$< diff --git a/fpga/fpga_lf.v b/fpga/fpga_lf.v index 1b7a11276..3082b037b 100644 --- a/fpga/fpga_lf.v +++ b/fpga/fpga_lf.v @@ -104,15 +104,19 @@ lo_edge_detect le( // 000 -- LF reader (generic) // 001 -- LF edge detect (generic) // 010 -- LF passthrough - -mux8 mux_ssp_clk (major_mode, ssp_clk, lr_ssp_clk, le_ssp_clk, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); -mux8 mux_ssp_din (major_mode, ssp_din, lr_ssp_din, 1'b0, lp_ssp_din, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); -mux8 mux_ssp_frame (major_mode, ssp_frame, lr_ssp_frame, le_ssp_frame, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); +/* +FPGA_MAJOR_MODE_OFF_LF (6<<5) +FPGA_MAJOR_MODE_OFF (7<<5) +*/ +// 000 001 010 011 100 101 110 111 +mux8 mux_ssp_clk (major_mode, ssp_clk, lr_ssp_clk, le_ssp_clk, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); +mux8 mux_ssp_din (major_mode, ssp_din, lr_ssp_din, 1'b0, lp_ssp_din, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); +mux8 mux_ssp_frame (major_mode, ssp_frame, lr_ssp_frame, le_ssp_frame, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); mux8 mux_pwr_oe1 (major_mode, pwr_oe1, lr_pwr_oe1, le_pwr_oe1, lp_pwr_oe1, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); mux8 mux_pwr_oe2 (major_mode, pwr_oe2, lr_pwr_oe2, le_pwr_oe2, lp_pwr_oe2, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); mux8 mux_pwr_oe3 (major_mode, pwr_oe3, lr_pwr_oe3, le_pwr_oe3, lp_pwr_oe3, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); mux8 mux_pwr_oe4 (major_mode, pwr_oe4, lr_pwr_oe4, le_pwr_oe4, lp_pwr_oe4, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); -mux8 mux_pwr_lo (major_mode, pwr_lo, lr_pwr_lo, le_pwr_lo, lp_pwr_lo, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); +mux8 mux_pr_lo (major_mode, pwr_lo, lr_pwr_lo, le_pwr_lo, lp_pwr_lo, 1'b0, 1'b0, 1'b0, 1'b1, 1'b0); mux8 mux_pwr_hi (major_mode, pwr_hi, lr_pwr_hi, le_pwr_hi, lp_pwr_hi, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); mux8 mux_adc_clk (major_mode, adc_clk, lr_adc_clk, le_adc_clk, lp_adc_clk, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0); mux8 mux_dbg (major_mode, dbg, lr_dbg, le_dbg, lp_dbg, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0);