From a9544f4852d2db1cca13e9359366542865c26357 Mon Sep 17 00:00:00 2001 From: travisutk Date: Sat, 17 Oct 2009 09:42:04 +0000 Subject: [PATCH] Just about finished with flash writing support. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@206 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- client/goodfet.cc | 5 ++++ firmware/apps/chipcon/chipcon.c | 42 +++++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/client/goodfet.cc b/client/goodfet.cc index b76ce8f..1cea4e0 100755 --- a/client/goodfet.cc +++ b/client/goodfet.cc @@ -103,7 +103,12 @@ if(sys.argv[1]=="erase"): if(sys.argv[1]=="flashpage"): print "Writing a page of flash from 0xF000 in XDATA" + print "Status: %s" %client.CCstatusstr(); client.CCflashpage(0x0000); + while 1: + print "0x%06x: %s" %( + client.CCgetPC(),client.CCstatusstr()); + if(sys.argv[1]=="writedata"): f=sys.argv[2]; start=0; diff --git a/firmware/apps/chipcon/chipcon.c b/firmware/apps/chipcon/chipcon.c index 1790526..418561a 100644 --- a/firmware/apps/chipcon/chipcon.c +++ b/firmware/apps/chipcon/chipcon.c @@ -20,11 +20,11 @@ #include -/* Concerning clock rates, - the maximimum clock rates are defined on page 4 of the spec. - They vary, but are roughly 30MHz. Raising this clock rate might - allow for clock glitching, but the GoodFET isn't sufficient fast for that. - Perhaps a 200MHz ARM or an FPGA in the BadassFET? +/* Concerning clock rates, the maximimum clock rates are defined on + page 4 of the spec. They vary, but are roughly 30MHz. Raising + this clock rate might allow for clock glitching, but the GoodFET + isn't sufficient fast for that. Perhaps a 200MHz ARM or an FPGA in + the BadassFET? */ //Pins and I/O @@ -126,7 +126,8 @@ void cchandle(unsigned char app, unsigned char verb, unsigned long len){ //Always init. Might help with buggy lines. - ccdebuginit(); + //Might hurt too. + //ccdebuginit(); switch(verb){ //CC_PEEK and CC_POKE will come later. @@ -237,9 +238,10 @@ void cchandle(unsigned char app, //! Set the Chipcon's Program Counter void cc_set_pc(u32 adr){ - cmddata[0]=0x02; //GetPC - cmddata[1]=(adr>>8)&0xff; //HIBYTE - cmddata[2]=adr&0xff; //LOBYTE + cmddata[0]=0x02; //SetPC + cmddata[1]=((adr>>8)&0xff); //HIBYTE + cmddata[2]=adr&0xff; //LOBYTE + cc_debug_instr(3); return; } @@ -305,7 +307,7 @@ void cc_write_xdata(u16 adr, u8 *data, u16 len){ #define LOBYTE_WORDS_PER_FLASH_PAGE 0x00 #define FLASHPAGE_SIZE 0x800 -//2 bytes/word +//32 bit words #define FLASH_WORD_SIZE 0x4 const u8 flash_routine[] = { @@ -344,6 +346,7 @@ const u8 flash_routine[] = { //! Copies flash buffer to flash. void cc_write_flash_page(u32 adr){ //Assumes that page has already been written to XDATA 0xF000 + debugstr("Flashing 2kb at 0xF000 to given adr."); //Routine comes next //WRITE_XDATA_MEMORY(IN: 0xF000 + FLASH_PAGE_SIZE, sizeof(routine), routine); @@ -353,13 +356,26 @@ void cc_write_flash_page(u32 adr){ //((address >> 8) / FLASH_WORD_SIZE) & 0x7E cc_pokedatabyte(0xF000+FLASHPAGE_SIZE+2, ((adr>>8)/FLASH_WORD_SIZE)&0x7E); - cc_debug(3, //MOV MEMCTR, (bank * 16) + 1; - 0x75, 0xc7, 0x51); + debugstr("Wrote flash routine."); + + + //MOV MEMCTR, (bank * 16) + 1; + cmddata[0]=0x75; + cmddata[1]=0xc7; + cmddata[2]=0x51; + cc_debug_instr(3); + debugstr("Loaded bank info."); + cc_set_pc(0xf000+FLASHPAGE_SIZE);//execute code fragment cc_resume(); + debugstr("Executing."); + + /* while(!(cc_read_status()&CC_STATUS_CPUHALTED)){ P1OUT^=1;//blink LED - } + }*/ + + debugstr("Done flashing."); P1OUT&=~1;//clear LED } -- 2.20.1