]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
FIX: @marshmellow42 's ST detection fix.
authoriceman1001 <iceman@iuse.se>
Tue, 28 Feb 2017 18:20:12 +0000 (19:20 +0100)
committericeman1001 <iceman@iuse.se>
Tue, 28 Feb 2017 18:20:12 +0000 (19:20 +0100)
FIX: lfops.c and em4x05 command timings.

armsrc/lfops.c
common/lfdemod.c

index 20e4efd3c7d7a5b2acb9bde3e4df325afe84eb1f..c0c247874cadeb9694926178b0d83ae0c6d57d84 100644 (file)
@@ -1179,6 +1179,10 @@ void TurnReadLFOn(uint32_t delay) {
        // Give it a bit of time for the resonant antenna to settle.
        WaitUS(delay);
 }
+void TurnReadLF_off(uint32_t delay) {
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       WaitUS(delay);
+}
 
 // Write one bit to card
 void T55xxWriteBit(int bit) {
@@ -1649,15 +1653,8 @@ void SendForward(uint8_t fwd_bit_count) {
 // 55FC * 8us == 440us / 21.3 === 20.65 steps.  could be too short. Go for 56FC instead
 // 32FC * 8us == 256us / 21.3 ==  12.018 steps. ok
 // 16FC * 8us == 128us / 21.3 ==  6.009 steps. ok 
-
 #ifndef EM_START_GAP
-#define EM_START_GAP 60*8
-#endif
-#ifndef EM_ONE_GAP
-#define EM_ONE_GAP 32*8
-#endif
-#ifndef EM_ZERO_GAP
-# define EM_ZERO_GAP 16*8
+#define EM_START_GAP 55*8
 #endif
 
        fwd_write_ptr = forwardLink_data;
@@ -1670,19 +1667,16 @@ void SendForward(uint8_t fwd_bit_count) {
        fwd_bit_sz--; //prepare next bit modulation
        fwd_write_ptr++;
        
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-       WaitUS(EM_START_GAP);
-       TurnReadLFOn(16);
+       TurnReadLF_off(EM_START_GAP);
+       TurnReadLFOn(18*8);
 
        // now start writting with bitbanging the antenna.
        while(fwd_bit_sz-- > 0) { //prepare next bit modulation
-               if(((*fwd_write_ptr++) & 1) == 1)
-                       WaitUS(EM_ONE_GAP);
-               else {
-                       //These timings work for 4469/4269/4305
-                       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-                       WaitUS(20);                     
-                       TurnReadLFOn(12);
+               if(((*fwd_write_ptr++) & 1) == 1) {
+                       WaitUS(32);
+               } else {
+                       TurnReadLF_off(23*8);
+                       TurnReadLFOn(18*8);
                }
        }
 }
@@ -1693,7 +1687,7 @@ void EM4xLogin(uint32_t pwd) {
        len = Prepare_Cmd( FWD_CMD_LOGIN );
        len += Prepare_Data( pwd & 0xFFFF, pwd >> 16 );
        SendForward(len);
-       WaitMS(20); // no wait for login command.
+       //WaitUS(20); // no wait for login command.
        // should receive
        // 0000 1010 ok.
        // 0000 0001 fail
@@ -1722,7 +1716,7 @@ void EM4xReadWord(uint8_t addr, uint32_t pwd, uint8_t usepwd) {
        SendForward(len);
 
        WaitUS(400);
-       // Now do the acquisition
+
        DoPartialAcquisition(20, true, 6000);
 
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
@@ -1757,7 +1751,7 @@ void EM4xWriteWord(uint32_t flag, uint32_t data, uint32_t pwd) {
        SendForward(len);
 
        //Wait 20ms for write to complete?
-       WaitMS(6);
+       WaitMS(7);
 
        //Capture response if one exists
        DoPartialAcquisition(20, true, 6000);
index 7f8333ac1185420dc039ebfb334e6b404ac5e36d..c177468f0c312b7e59ed4d4ca05b5fca75a9ad5e 100644 (file)
@@ -1845,6 +1845,10 @@ bool DetectST(uint8_t buffer[], size_t *size, int *foundclock) {
                        for(i=0; i < clk/2-tol; ++i) {
                                buffer[dataloc+i] = high+5;
                        }
+               } //test for single sample outlier (high between two lows) in the case of very strong waves
+               if (buffer[dataloc] >= high && buffer[dataloc+2] <= low) {
+                       buffer[dataloc] = buffer[dataloc+2];
+                       buffer[dataloc+1] = buffer[dataloc+2];
                }
                for (i=0; i<datalen; ++i) {
                        if (i+newloc < bufsize) {
Impressum, Datenschutz