# HG changeset patch # User John Tsiombikas # Date 1489355021 -7200 # Node ID ff8af8351282a4010fbc96a579f6f49d1cc1db0c # Parent abb348704dece74421bcc3c58d7afbb37b3f487f works diff -r abb348704dec -r ff8af8351282 Makefile --- a/Makefile Sun Mar 12 04:27:43 2017 +0200 +++ b/Makefile Sun Mar 12 23:43:41 2017 +0200 @@ -27,7 +27,7 @@ .PHONY: fuses fuses: - avrdude -c usbtiny -p $(mcu_dude) -U lfuse:w:0xf7:m -U hfuse:w:0x99:m -U efuse:w:0xff:m + avrdude -c usbtiny -p $(mcu_dude) -U lfuse:w:0xf7:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m .PHONY: program program: $(hex) diff -r abb348704dec -r ff8af8351282 main.c --- a/main.c Sun Mar 12 04:27:43 2017 +0200 +++ b/main.c Sun Mar 12 23:43:41 2017 +0200 @@ -64,7 +64,7 @@ int main(void) { - init_serial(38400); + init_serial(115200); run_mode(); sei(); @@ -101,12 +101,12 @@ case 'p': prog_mode(); - printf("OK programming mode\n"); + puts("OK programming mode"); break; case 'b': run_mode(); - printf("OK boot mode\n"); + puts("OK run mode"); break; case 'a': @@ -116,26 +116,26 @@ case 'w': if(running) { - printf("ERR running\n"); + puts("ERR running"); break; } if(addr >= MEM_SIZE) { - printf("ERR overflow\n"); + puts("ERR overflow"); break; } data = strtol(input + 1, &endp, 0); sram_write(addr++, data); - printf("OK %d\n", (int)data); + puts("OK"); break; case 'r': if(running) { - printf("ERR running\n"); + puts("ERR running"); break; } if(addr >= MEM_SIZE) { - printf("ERR overflow\n"); + puts("ERR overflow"); break; } @@ -144,7 +144,7 @@ break; default: - printf("ERR unknown command\n"); + puts("ERR unknown command"); break; } } @@ -152,14 +152,15 @@ void run_mode(void) { /* tri-state everything and release the reset line */ + /* do not tri-state WE and keep it high */ DDRA = 0; PORTA = 0; DDRB = 0; PORTB = 0; DDRC = 0; PORTC = 0; - DDRD = RST_BIT; - PORTD = RST_BIT; + DDRD = RST_BIT | WE_BIT; + PORTD = RST_BIT | WE_BIT; running = 1; } @@ -167,7 +168,7 @@ void prog_mode(void) { /* hold the reset line and take control of the bus */ - PORTD = 0; + PORTD = WE_BIT; /* keep WE high to avoid writing random bytes */ DDRD = 0xff; DDRA = 0xff; DDRB = 0xff; @@ -192,7 +193,6 @@ /* pulse WE */ PORTD &= ~WE_BIT; - _delay_us(0.1); /* WE should be low for at least 9ns, which is way faster than we can toggle it anyway */ PORTD |= WE_BIT; }