Finished Programmer

This commit is contained in:
2025-09-05 17:32:53 +02:00
parent 98886d300e
commit abdf2d58f0
12 changed files with 3325 additions and 2444 deletions

View File

@@ -45,6 +45,10 @@ void Write_Command_Pins(int CE, int OE, int WE);
void Write_Command(int addr, int data);
int Flash_ReadByte(int addr);
void Enter_Device_ID(int *manufacturer, int *device);
void Dump_Flash_UART(int visual_format);
void Chip_Erase(void);
void Chip_Program_Byte(int addr, int data);
void Flash_From_UART(void);
void debug_print(const char *msg);

View File

@@ -62,16 +62,41 @@ int main(void)
sprintf(manufacturer, "0x%02X \r\n", man_id);
sprintf(device, "0x%02X \r\n", dev_id);
debug_print("==========================================\r\n");
debug_print("Manufacturer ID = \r\n");
debug_print(manufacturer);
debug_print("Device ID = \r\n");
debug_print(device);
debug_print("==========================================\r\n");
/* Infinite loop */
while (1)
{
//debug_print("Hello from STM32!\r\n");
debug_print("Hello welcome to the EEPROM programmer! What would you like to do?\r\n");
debug_print("[1] Dump Rom as char\r\n");
debug_print("[2] Erase chip\r\n");
debug_print("[3] Program chip via UART\r\n");
uint8_t resp;
HAL_UART_Receive(&huart2, &resp, 1, HAL_MAX_DELAY);
switch (resp)
{
case 0x31:
debug_print("Dumping ROM...\r\n");
Dump_Flash_UART(1);
break;
case 0x32:
debug_print("Erasing Chip...\r\n");
Chip_Erase();
break;
case 0x33:
debug_print("Launching programming sequence...\r\n");
Flash_From_UART();
break;
default:
debug_print("Invalid input!\r\n");
break;
}
}
}
@@ -168,6 +193,57 @@ void Enter_Device_ID(int *manufacturer, int *device){
Write_Command(0x5555, 0xF0);
}
void Dump_Flash_UART(int visual_format){
uint8_t byte;
char buf[8];
for (int addr = 0; addr < 0x80000; addr++) { // 512 KB
byte = Flash_ReadByte(addr);
if(visual_format==0){
// Send as raw byte:
HAL_UART_Transmit(&huart2, &byte, 1, HAL_MAX_DELAY);
}else{
// Send as str
sprintf(buf, "%02X ", byte);
HAL_UART_Transmit(&huart2, (uint8_t*)buf, strlen(buf), HAL_MAX_DELAY);
if ((addr & 0x0F) == 0x0F) {
char newline[] = "\r\n";
HAL_UART_Transmit(&huart2, (uint8_t*)newline, 2, HAL_MAX_DELAY);
}
}
}
}
void Chip_Erase(void){
// Erase sequence
Write_Command(0x5555, 0xAA);
Write_Command(0x2AAA, 0x55);
Write_Command(0x5555, 0x80);
Write_Command(0x5555, 0xAA);
Write_Command(0x2AAA, 0x55);
Write_Command(0x5555, 0x10);
HAL_Delay(150); // it's 100ms max but by precaution
}
void Chip_Program_Byte(int addr, int data){
Write_Command(0x5555, 0xAA);
Write_Command(0x2AAA, 0x55);
Write_Command(0x5555, 0xA0);
Write_Command(addr, data);
}
void Flash_From_UART(void){
debug_print("Waiting for file to flash...\r\n");
uint8_t byte;
for(int i=0; i<8; i++){
HAL_UART_Receive(&huart2, &byte, 1, HAL_MAX_DELAY);
Chip_Program_Byte(i, (int)byte);
}
debug_print("finished\r\n");
}
/**
* @brief System Clock Configuration
* @retval None