Finished Programmer
This commit is contained in:
		@@ -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