diff --git a/README.md b/README.md index 2c1c16b..5d01009 100644 --- a/README.md +++ b/README.md @@ -5,23 +5,6 @@ Programming tool for parallel EEPROM chips, based on a ATmega16. Only supports AT28C256 EEPROM chips as of now. -## Usage - -### Using the python tool - -(TODO) - - -### Using the serial terminal - -The device uses a baud-rate of 38.4 kbps. -Output lines end with a line feed (LF), input lines may end with LF or CR+LF. - -Example for using `picocom` to access the device: - - picocom -b 38400 --imap lfcrlf --echo /dev/ttyUSB0 - - ## Development ### VS Code configuration diff --git a/firmware/Makefile b/firmware/Makefile index 1020d16..b04be63 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -4,7 +4,7 @@ # Compiler and tools CC = avr-gcc OBJCOPY = avr-objcopy -AVRDUDE ?= avrdude +AVRDUDE = avrdude # Compiler and linker flags CFLAGS = -Wall -std=c11 -Os diff --git a/firmware/src/commands.c b/firmware/src/commands.c index 46c01e9..5132acb 100644 --- a/firmware/src/commands.c +++ b/firmware/src/commands.c @@ -10,22 +10,12 @@ #include #include -// Internal function prototypes -void _uartPutAsciiBlock(DataBuffer buffer); - -// Mode: ASCII (false) or binary (true) -bool binary_mode = false; - // Execute a single parsed command void executeCommand(CommandLine cmdLine) { // Parse command if (strcmp(cmdLine.command, "INIT") == 0) { // INIT command: Initializes connection. - commandInit(cmdLine.arg); - } - else if (strcmp(cmdLine.command, "HELP") == 0) { - // HELP command: Print a list of supported commands. - commandHelp(cmdLine.arg); + commandInit(); } else if (strcmp(cmdLine.command, "READ") == 0) { // READ command: Takes a hex address range (or single address) as argument, @@ -50,40 +40,8 @@ void executeCommand(CommandLine cmdLine) { } } -void commandInit(char* arg) { - // (Re-)initialize EEPROM functions - eepromInit(); - - // Default mode: ASCII - binary_mode = false; - - if (arg != NULL) { - if (strcmp(arg, "BINARY") == 0) { - binary_mode = true; - } else if (strcmp(arg, "ASCII") == 0 || strcmp(arg, "TEXT") == 0) { - binary_mode = false; - } - } - - if (binary_mode) { - uartPutLine("OK (binary mode)"); - } else { - uartPutLine("OK (ASCII mode)"); - } -} - -void commandHelp() { - uartPutLine("HELP - Supported commands:"); - uartPutLine("HELP - HELP"); - uartPutLine("HELP - INIT [BINARY|ASCII]"); - uartPutLine("HELP - READ 0000:0FFF"); - uartPutLine("HELP - WRITE 0000"); - uartPutLine("HELP - ERASE 0000:0FFF"); - - // TODO remove those - uartPutLine("HELP - TESTREAD (only for testing)"); - uartPutLine("HELP - TESTWRITE (only for testing)"); - +void commandInit() { + // TODO init... or something? uartPutLine("OK"); } @@ -113,35 +71,22 @@ void commandRead(char* arg) { // Read a single block with up to DATA_BLOCK_SIZE bytes range.from = eepromReadBlock(range, &buffer); - if (binary_mode) { - // Send block as binary "package": - // First the size of the package (1 byte) followed by the data bytes - uartPutChar(buffer.bytes); + // TODO binary output - for (int i = 0; i < buffer.bytes; i++) { - uartPutChar(buffer.data[i]); - } - } else { - // Fancy ASCII output - _uartPutAsciiBlock(buffer); + // ASCII output + char outBuffer[20]; + sprintf(outBuffer, "<%d>", buffer.bytes); + uartPutString(outBuffer); + + for (int i = 0; i < buffer.bytes; i++) { + sprintf(outBuffer, " %02X", buffer.data[i]); + uartPutString(outBuffer); } + uartPutLine(NULL); } while (buffer.bytes > 0); } -void _uartPutAsciiBlock(DataBuffer buffer) { - char outBuffer[20]; - sprintf(outBuffer, "<%d>", buffer.bytes); - uartPutString(outBuffer); - - for (int i = 0; i < buffer.bytes; i++) { - sprintf(outBuffer, " %02X", buffer.data[i]); - uartPutString(outBuffer); - } - - uartPutLine(NULL); -} - void commandWrite(char* arg) { if (arg == NULL) { uartPutLine("ERR WRITE needs a start address"); @@ -155,12 +100,6 @@ void commandWrite(char* arg) { return; } - // Only binary mode - if (!binary_mode) { - uartPutLine("ERR WRITE in ASCII mode is not implemented"); - return; - } - // TODO read data from input and write to EEPROM uartPutLine("ERR not implemented"); } diff --git a/firmware/src/config.h b/firmware/src/config.h index ee071d7..088d4d6 100644 --- a/firmware/src/config.h +++ b/firmware/src/config.h @@ -7,6 +7,6 @@ #endif // Set UART Baud rate -#define BAUD 38400UL +#define BAUD 9600UL #endif /* CONFIG_H_ */ diff --git a/firmware/src/main.c b/firmware/src/main.c index cfd0404..056964f 100644 --- a/firmware/src/main.c +++ b/firmware/src/main.c @@ -15,7 +15,7 @@ int main(void) { _delay_ms(100); // Write initial message via UART - uartPutLine("INFO - EEPROM programmer by binaryDiv"); + uartPutLine("INFO -- EEPROM programmer by binaryDiv"); while(1) { // Run main loop endlessly