fast flash mode (button already held down) and both (os & fpga) flashing mode

This commit is contained in:
adam@algroup.co.uk 2009-07-24 02:30:08 +00:00
parent ddbe6ff42e
commit 431ae7e0eb
2 changed files with 36 additions and 15 deletions

View file

@ -117,43 +117,61 @@ static void LoadFlashFromSRecords(char *file, int addr)
int main(int argc, char **argv) { int main(int argc, char **argv) {
unsigned int addr = 0; unsigned int addr = 0;
BOOL fastflash = 0, flashboth = 0;
UsbCommand c; UsbCommand c;
if (argc != 3) { if (argc != 3 && ! ((argc == 4 && *argv[3] == 'f') || (argc == 5 && *argv[4] == 'f'))) {
fprintf(stderr,"Usage: %s {bootrom|os|fpga} image.s19\n", argv[0]); 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); exit(EXIT_FAILURE);
} }
if (!strcmp(argv[1],"bootrom")) { if (!strcmp(argv[1],"bootrom")) {
addr = 0; addr = 0;
} else if (!strcmp(argv[1],"os")) { } 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 { } else {
fprintf(stderr,"Unknown action '%s'!\n", argv[1]); fprintf(stderr,"Unknown action '%s'!\n", argv[1]);
exit(EXIT_FAILURE); 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(); usb_init();
fprintf(stderr,"Waiting for Proxmark to appear on USB...\n"); fprintf(stderr,"Waiting for Proxmark to appear on USB...\n");
while(!(devh=OpenProxmark(0))) { sleep(1); } while(!(devh=OpenProxmark(0))) { sleep(1); }
fprintf(stderr,"Found...\n"); fprintf(stderr,"Found...\n");
fprintf(stderr,"Entering flash-mode...\n"); if(!fastflash){
bzero(&c, sizeof(c)); fprintf(stderr,"Entering flash-mode...\n");
c.cmd = CMD_START_FLASH; bzero(&c, sizeof(c));
SendCommand(&c, FALSE); c.cmd = CMD_START_FLASH;
CloseProxmark(); SendCommand(&c, FALSE);
sleep(1); CloseProxmark();
sleep(1);
fprintf(stderr,"Waiting for Proxmark to reappear on USB...\n"); fprintf(stderr,"Waiting for Proxmark to reappear on USB...\n");
fprintf(stderr,"(Press and hold down button NOW if your bootloader requires it)\n"); fprintf(stderr,"(Press and hold down button NOW if your bootloader requires it)\n");
while(!(devh=OpenProxmark(0))) { sleep(1); } while(!(devh=OpenProxmark(0))) { sleep(1); }
fprintf(stderr,"Found...\n"); 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)); bzero(&c, sizeof(c));
c.cmd = CMD_HARDWARE_RESET; c.cmd = CMD_HARDWARE_RESET;

View file

@ -1,5 +1,8 @@
#define PROXPROMPT "proxmark3> " #define PROXPROMPT "proxmark3> "
#define FLASH_ADDR_OS 0x10000
#define FLASH_ADDR_FPGA 0x2000
extern usb_dev_handle *devh; extern usb_dev_handle *devh;
extern unsigned char return_on_error; extern unsigned char return_on_error;
extern unsigned char error_occured; extern unsigned char error_occured;