]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
Merged sweeplf into tune command
authord18c7db <d18c7db@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Mon, 13 Jul 2009 11:20:29 +0000 (11:20 +0000)
committerd18c7db <d18c7db@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Mon, 13 Jul 2009 11:20:29 +0000 (11:20 +0000)
armsrc/appmain.c
cockpit/4flashos.bat
winsrc/command.cpp

index 09f11f03670f2a6308b784580f79d56dc0cfd884..fccaba54d042194082217dbce05858d96b46f5db 100644 (file)
@@ -240,92 +240,55 @@ static int AvgAdc(int ch)
        return (a + 15) >> 5;
 }
 
-/*
- * Sweeps the useful LF range of the proxmark from
- * 46.8kHz (divisor=255) to 600kHz (divisor=19) and
- * reads the voltage in the antenna: the result is a graph
- * which should clearly show the resonating frequency of your
- * LF antenna ( hopefully around 90 if it is tuned to 125kHz!)
- */
-void SweepLFrange()
+void MeasureAntennaTuning(void)
 {
        BYTE *dest = (BYTE *)BigBuf;
-       char dummy[12];
-       int i, peak= 0, ptr= 0;
-       double freq;
+       int i, ptr = 0, adcval = 0, peak = 0, peakv = 0, peakf = 0;;
+       int vLf125 = 0, vLf134 = 0, vHf = 0;    // in mV
+
+       UsbCommand c;
 
-       // clear buffer
+       DbpString("Measuring antenna characteristics, please wait.");
        memset(BigBuf,0,sizeof(BigBuf));
 
+/*
+ * Sweeps the useful LF range of the proxmark from
+ * 46.8kHz (divisor=255) to 600kHz (divisor=19) and
+ * read the voltage in the antenna, the result left
+ * in the buffer is a graph which should clearly show
+ * the resonating frequency of your LF antenna
+ * ( hopefully around 95 if it is tuned to 125kHz!)
+ */
        FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER);
        for (i=255; i>19; i--) {
                FpgaSendCommand(FPGA_CMD_SET_DIVISOR, i);
                SpinDelay(20);
-               dest[i] = (137500 * AvgAdc(ADC_CHAN_LF)) >> 18;
+               // Vref = 3.3V, and a 10000:240 voltage divider on the input
+               // can measure voltages up to 137500 mV
+               adcval = ((137500 * AvgAdc(ADC_CHAN_LF)) >> 10);
+               if (i==95)      vLf125 = adcval; // voltage at 125Khz
+               if (i==89)      vLf134 = adcval; // voltage at 134Khz
+
+               dest[i] = adcval>>8; // scale int to fit in byte for graphing purposes
                if(dest[i] > peak) {
-                       peak= dest[i];
-                       ptr= i;
-                       }
-       }
-       dummy[11]= '\0';
-       dummy[10]= 'z';
-       dummy[9]= 'H';
-       dummy[8]= 'k';
-       dummy[7]= ' ';
-       freq= 12000000/(ptr + 1);
-       for(i= 6; i > 3 ; --i) {
-               dummy[i]= '0' + ((int) freq) % 10;
-               freq /= 10;
-               }
-       dummy[3]= '.';
-       for(i= 2; i >= 0 ; --i) {
-               dummy[i]= '0' + ((int) freq) % 10;
-               freq /= 10;
+                       peakv = adcval;
+                       peak = dest[i];
+                       peakf = i;
+                       ptr = i;
                }
-       DbpString("Antenna resonates at:");
-       DbpString(dummy);
-}
-
-void MeasureAntennaTuning(void)
-{
-// Impedances are Zc = 1/(j*omega*C), in ohms
-#define LF_TUNING_CAP_Z        1273    //  1 nF @ 125   kHz
-#define HF_TUNING_CAP_Z        235             // 50 pF @ 13.56 MHz
-
-       int vLf125, vLf134, vHf;        // in mV
-
-       UsbCommand c;
-
-       // Let the FPGA drive the low-frequency antenna around 125 kHz.
-       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER | FPGA_LF_READER_USE_125_KHZ);
-       SpinDelay(20);
-       vLf125 = AvgAdc(ADC_CHAN_LF);
-       // Vref = 3.3V, and a 10000:240 voltage divider on the input
-       // can measure voltages up to 137500 mV
-       vLf125 = (137500 * vLf125) >> 10;
-
-       // Let the FPGA drive the low-frequency antenna around 134 kHz.
-       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8Khz
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER | FPGA_LF_READER_USE_134_KHZ);
-       SpinDelay(20);
-       vLf134 = AvgAdc(ADC_CHAN_LF);
-       // Vref = 3.3V, and a 10000:240 voltage divider on the input
-       // can measure voltages up to 137500 mV
-       vLf134 = (137500 * vLf134) >> 10;
+       }
 
        // Let the FPGA drive the high-frequency antenna around 13.56 MHz.
        FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR);
        SpinDelay(20);
-       vHf = AvgAdc(ADC_CHAN_HF);
        // Vref = 3300mV, and an 10:1 voltage divider on the input
        // can measure voltages up to 33000 mV
-       vHf = (33000 * vHf) >> 10;
+       vHf = (33000 * AvgAdc(ADC_CHAN_HF)) >> 10;
 
        c.cmd = CMD_MEASURED_ANTENNA_TUNING;
        c.ext1 = (vLf125 << 0) | (vLf134 << 16);
        c.ext2 = vHf;
-       c.ext3 = (LF_TUNING_CAP_Z << 0) | (HF_TUNING_CAP_Z << 16);
+       c.ext3 =  peakf | (peakv << 16);
        UsbSendPacket((BYTE *)&c, sizeof(c));
 }
 
@@ -836,10 +799,6 @@ void UsbPacketReceived(BYTE *packet, int len)
                case CMD_READ_MEM:
                        ReadMem(c->ext1);
                        break;
-               case CMD_SWEEP_LF:
-                       SweepLFrange();
-                       break;
-
                case CMD_SET_LF_DIVISOR:
                        FpgaSendCommand(FPGA_CMD_SET_DIVISOR, c->ext1);
                        break;
index 6f2261843d624960cda039a3ba2e63cfcdf2dfa5..d67cada7dcaffaf8f0e64cf2ce3cf64fe2d53380 100644 (file)
@@ -1,3 +1,11 @@
 @echo off\r
+echo ********************************************************************\r
+echo * REMEMBER: hold button down for the duration of the FLASH process *\r
+echo ********************************************************************\r
+\r
+REM next line is a dummy. It causes PM3 to reboot and enter the FLASH process\r
 ..\winsrc\prox.exe load ..\armsrc\obj\osimage.s19\r
+\r
+REM these actually do the real work\r
 ..\winsrc\prox.exe load ..\armsrc\obj\osimage.s19\r
+..\winsrc\prox.exe fpga ..\armsrc\obj\fpgaimage.s19\r
index 485eff5240dafb70205c1e90587fe6d22d4bca9c..14974528ddc179b8db160f3beffacf74c8b3d2a0 100644 (file)
@@ -2571,14 +2571,6 @@ static void CmdSetDivisor(char *str)
        }\r
 }\r
 \r
-static void CmdSweepLF(char *str)\r
-{\r
-       UsbCommand c;\r
-       c.cmd = CMD_SWEEP_LF;\r
-       SendCommand(&c, FALSE);\r
-}\r
-\r
-\r
 typedef void HandlerFunction(char *cmdline);\r
 \r
 /* in alphabetic order */\r
@@ -2647,7 +2639,6 @@ static struct {
        {"scale",                       CmdScale,1,             "<int> -- Set cursor display scale"},\r
        {"setlfdivisor",                CmdSetDivisor,0,        "<19 - 255> -- Drive LF antenna at 12Mhz/(divisor+1)"},\r
        {"sri512read",          CmdSri512read,0,        "<int> -- Read contents of a SRI512 tag"},\r
-       {"sweeplf",                     CmdSweepLF,0,           "    Sweep through LF freq range, store results in buffer and show resonant frequency of antenna"},\r
        {"tibits",                      CmdTibits,0,            "    Get raw bits for TI-type LF tag"},\r
        {"tidemod",                     CmdTidemod,0,           "    Demodulate raw bits for TI-type LF tag"},\r
        {"tiread",                      CmdTiread,0,            "    Read a TI-type 134 kHz tag"},\r
@@ -2663,7 +2654,7 @@ static struct {
        char *description;\r
        }       CommandExtendedHelp[]= {\r
                {"detectreader","'l'|'h'","'l' specifies LF antenna scan only, 'h' specifies HF antenna scan only.","Monitor antenna for changes in voltage. Output is in three fields: CHANGED, CURRENT, PERIOD,\nwhere CHANGED is the value just changed from, CURRENT is the current value and PERIOD is the\nnumber of program loops since the last change.\n\nThe RED LED indicates LF field detected, and the GREEN LED indicates HF field detected."},\r
-               {"sweeplf","","","Drive LF antenna at all divisor range values (19 - 255) and store the results in the output\nbuffer. Issuing 'losamples' and then 'plot' commands will display the resulting peak. 12MHz\ndivided by the peak's position plus one gives the antenna's resonant frequency. For convenience,\nthis value is also printed out by the command."},\r
+               {"tune","","","Drive LF antenna at all divisor range values (19 - 255) and store the results in the output\nbuffer. Issuing 'losamples' and then 'plot' commands will display the resulting peak. 12MHz\ndivided by the peak's position plus one gives the antenna's resonant frequency. For convenience,\nthis value is also printed out by the command."},\r
                };\r
 \r
 //-----------------------------------------------------------------------------\r
@@ -2751,19 +2742,25 @@ void UsbCommandReceived(UsbCommand *c)
                        break;\r
 \r
                case CMD_MEASURED_ANTENNA_TUNING: {\r
-                       int zLf, zHf;\r
+                       int peakv, peakf;\r
                        int vLf125, vLf134, vHf;\r
                        vLf125 = c->ext1 & 0xffff;\r
                        vLf134 = c->ext1 >> 16;\r
-                       vHf = c->ext2;\r
-                       zLf = c->ext3 & 0xffff;\r
-                       zHf = c->ext3 >> 16;\r
-                       PrintToScrollback("# LF antenna @ %3d mA / %5d mV [%d ohms] 125Khz",\r
-                               vLf125/zLf, vLf125, zLf);\r
-                       PrintToScrollback("# LF antenna @ %3d mA / %5d mV [%d ohms] 134Khz",\r
-                               vLf134/((zLf*125)/134), vLf134, (zLf*125)/134);\r
-                       PrintToScrollback("# HF antenna @ %3d mA / %5d mV [%d ohms] 13.56Mhz",\r
-                               vHf/zHf, vHf, zHf);\r
+                       vHf = c->ext2 & 0xffff;;\r
+                       peakf = c->ext3 & 0xffff;\r
+                       peakv = c->ext3 >> 16;\r
+                       PrintToScrollback("# LF antenna: %.2f V @ 125.00Khz", vLf125/1000.0);\r
+                       PrintToScrollback("# LF antenna: %.2f V @ 134.00Khz", vLf134/1000.0);\r
+                       PrintToScrollback("# LF optimal: %.2f V @ %.2fKHz", peakv/1000.0, 12000.0/(peakf+1));\r
+                       PrintToScrollback("# HF antenna: %.2f V @  13.56Mhz", vHf/1000.0);\r
+                       if (peakv<2000)\r
+                               PrintToScrollback("# Your LF antenna is unusable."); \r
+                       else if (peakv<10000)\r
+                               PrintToScrollback("# Your LF antenna is marginal.");\r
+                       if (vHf<2000)\r
+                               PrintToScrollback("# Your HF antenna is unusable."); \r
+                       else if (vHf<5000)\r
+                               PrintToScrollback("# Your HF antenna is marginal.");\r
                        break;\r
                }\r
                default:\r
Impressum, Datenschutz