Finished Programmer
This commit is contained in:
@@ -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);
|
||||
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user