]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - linux/flasher.c
merge-srec.pl create proper S19 file with checksums.
[proxmark3-svn] / linux / flasher.c
index 7cc8966ff323c5cee97063926a8d6887363cfae5..beea754eefe348ca52be9764585f70c4981a700c 100644 (file)
@@ -117,43 +117,61 @@ static void LoadFlashFromSRecords(char *file, int addr)
 
 int main(int argc, char **argv) {
        unsigned int addr = 0;
 
 int main(int argc, char **argv) {
        unsigned int addr = 0;
+       BOOL fastflash = 0, flashboth = 0;
        UsbCommand c;
 
        UsbCommand c;
 
-       if (argc != 3) {
-               fprintf(stderr,"Usage: %s {bootrom|os|fpga} image.s19\n", argv[0]);
+       if (argc != 3 && ! ((argc == 4 && *argv[3] == 'f') || (argc == 5 && *argv[4] == 'f'))) {
+               fprintf(stderr,"Usage: %s {bootrom|os|fpga} image.s19 [f]ast\n", argv[0]);
+               fprintf(stderr,"       %s {both} osimage.s19 fpgaimage.s19 [f]ast\n", argv[0]);
                exit(EXIT_FAILURE);
        }
 
        if (!strcmp(argv[1],"bootrom")) {
                addr = 0;
        } else if (!strcmp(argv[1],"os")) {
                exit(EXIT_FAILURE);
        }
 
        if (!strcmp(argv[1],"bootrom")) {
                addr = 0;
        } else if (!strcmp(argv[1],"os")) {
-               addr = 0x10000;
+               addr = FLASH_ADDR_OS;
        } else if (!strcmp(argv[1],"fpga")) {
        } else if (!strcmp(argv[1],"fpga")) {
-               addr = 0x2000;
+               addr = FLASH_ADDR_FPGA;
+       } else if (!strcmp(argv[1],"both")) {
+               flashboth = 1;
        } else {
                fprintf(stderr,"Unknown action '%s'!\n", argv[1]);
                exit(EXIT_FAILURE);
        }
 
        } else {
                fprintf(stderr,"Unknown action '%s'!\n", argv[1]);
                exit(EXIT_FAILURE);
        }
 
+       if((argc == 4 && *argv[3] == 'f') || (argc == 5 && *argv[4] == 'f')) {
+               fastflash= 1;
+               fprintf(stderr,"Fastflash - device already in FLASH mode...\n");
+       }
+
        usb_init();
 
        fprintf(stderr,"Waiting for Proxmark to appear on USB...\n");
        while(!(devh=OpenProxmark(0))) { sleep(1); }
        fprintf(stderr,"Found...\n");
 
        usb_init();
 
        fprintf(stderr,"Waiting for Proxmark to appear on USB...\n");
        while(!(devh=OpenProxmark(0))) { sleep(1); }
        fprintf(stderr,"Found...\n");
 
-       fprintf(stderr,"Entering flash-mode...\n");
-       bzero(&c, sizeof(c));
-       c.cmd = CMD_START_FLASH;
-       SendCommand(&c, FALSE);
-       CloseProxmark();
-       sleep(1);
-
-       fprintf(stderr,"Waiting for Proxmark to reappear on USB...\n");
-       fprintf(stderr,"(Press and hold down button NOW if your bootloader requires it)\n");
-       while(!(devh=OpenProxmark(0))) { sleep(1); }
-       fprintf(stderr,"Found...\n");
+       if(!fastflash){
+               fprintf(stderr,"Entering flash-mode...\n");
+               bzero(&c, sizeof(c));
+               c.cmd = CMD_START_FLASH;
+               SendCommand(&c, FALSE);
+               CloseProxmark();
+               sleep(1);
+
+               fprintf(stderr,"Waiting for Proxmark to reappear on USB...\n");
+               fprintf(stderr,"(Press and hold down button NOW if your bootloader requires it)\n");
+               while(!(devh=OpenProxmark(0))) { sleep(1); }
+               fprintf(stderr,"Found...\n");
+       }
 
 
-       LoadFlashFromSRecords(argv[2], addr);
+       if(!flashboth)
+               LoadFlashFromSRecords(argv[2], addr);
+       else {
+               fprintf(stderr,"Flashing os...\n");
+               LoadFlashFromSRecords(argv[2],FLASH_ADDR_OS);
+               fprintf(stderr,"Flashing fpga...\n");
+               LoadFlashFromSRecords(argv[3],FLASH_ADDR_FPGA);
+       }
 
        bzero(&c, sizeof(c));
        c.cmd = CMD_HARDWARE_RESET;
 
        bzero(&c, sizeof(c));
        c.cmd = CMD_HARDWARE_RESET;
Impressum, Datenschutz