Removed UART bootloader code as that was just for testing

This commit is contained in:
Dreaded_X 2021-06-02 23:04:12 +02:00
parent 994a7fd526
commit c967520030
2 changed files with 4 additions and 94 deletions

View File

@ -47,7 +47,7 @@ typedef enum {
#define STDERR_FILENO 2
#define BOOTLOADER_RCC_CSR_ENTRY_MASK (RCC_CSR_WWDGRSTF | RCC_CSR_IWDGRSTF | RCC_CSR_SFTRSTF | RCC_CSR_PINRSTF)
#define BOOTLOADER_SIZE (20 * 1024)
#define BOOTLOADER_SIZE 0x4C00
#define USER_PROGRAM (FLASH_BASE + BOOTLOADER_SIZE)
/* USER CODE END PD */
@ -127,95 +127,6 @@ void start_user_program() {
uint8_t ack[] = {0x01};
uint8_t nack[] = {0xFE};
void receive() {
UpdateTarget target;
HAL_UART_Receive(&huart1, &target, 1, 1000);
HAL_UART_Transmit(&huart1, ack, sizeof(ack), HAL_MAX_DELAY);
uint8_t length_buffer[2];
HAL_UART_Receive(&huart1, length_buffer, sizeof(length_buffer), HAL_MAX_DELAY);
HAL_UART_Transmit(&huart1, length_buffer, sizeof(length_buffer), HAL_MAX_DELAY);
uint16_t length = length_buffer[0] + (length_buffer[1] << 8);
uint8_t* data = malloc(length);
HAL_UART_Receive(&huart1, data, length, 1000);
// Calculate the CRC of the data and send it back
// @todo Figure how we can actually use the hardware crc
/* uint32_t crc = HAL_CRC_Calculate(&hcrc, (uint32_t*)data, length); */
uint32_t crc = crc32(data, length);
uint8_t c[] = {crc, crc >> 8, crc >> 16, crc >> 24};
HAL_UART_Transmit(&huart1, c, sizeof(c), HAL_MAX_DELAY);
switch (target) {
case TARGET_I2C: {
// Unlock flash
HAL_FLASH_Unlock();
HAL_UART_Transmit(&huart1, ack, sizeof(ack), HAL_MAX_DELAY);
// Erase flash
uint32_t error = 0;
FLASH_EraseInitTypeDef erase = {
.TypeErase = FLASH_TYPEERASE_PAGES,
.PageAddress = (uint32_t)0x8005000,
.NbPages = ceil(length/1024.0f),
};
HAL_FLASHEx_Erase(&erase, &error);
// Write to flash
for (int i = 0; i < length/2; ++i) {
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, 0x8005000 + i*2, ((uint16_t*)data)[i])) {
return;
}
uint8_t progress[] = {(i*2) & 0xFF, (i*2) >> 8};
HAL_UART_Transmit(&huart1, progress, sizeof(progress), HAL_MAX_DELAY);
}
uint8_t progress[] = {(length) & 0xFF, (length) >> 8};
HAL_UART_Transmit(&huart1, progress, sizeof(progress), HAL_MAX_DELAY);
// Done
HAL_FLASH_Lock();
HAL_UART_Transmit(&huart1, ack, sizeof(ack), HAL_MAX_DELAY);
should_start_user_program = 1;
break;
}
default:
printf("Target not implemented!\n\r");
break;
}
}
uint8_t byte;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart->Instance == USART1) {
static uint8_t command_mode = 0;
if (command_mode) {
switch (byte) {
// Upload firmware
case 'u':
HAL_UART_Transmit(&huart1, ack, sizeof(ack), HAL_MAX_DELAY);
receive();
break;
default:
HAL_UART_Transmit(&huart1, nack, sizeof(nack), HAL_MAX_DELAY);
break;
}
command_mode = 0;
} else if (byte == 0xFF) {
command_mode = 1;
HAL_UART_Transmit(&huart1, ack, sizeof(ack), HAL_MAX_DELAY);
}
HAL_UART_Receive_IT(&huart1, &byte, 1);
}
}
uint8_t i2c_data;
void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) {
@ -266,14 +177,14 @@ void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) {
uint32_t error = 0;
FLASH_EraseInitTypeDef erase = {
.TypeErase = FLASH_TYPEERASE_PAGES,
.PageAddress = (uint32_t)0x8005000,
.PageAddress = (uint32_t)USER_PROGRAM,
.NbPages = ceil(length/1024.0f),
};
HAL_FLASHEx_Erase(&erase, &error);
// Write to flash
for (int i = 0; i < length/2; ++i) {
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, 0x8005000 + i*2, ((uint16_t*)data)[i])) {
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, USER_PROGRAM + i*2, ((uint16_t*)data)[i])) {
break;
}
}
@ -452,7 +363,6 @@ int main(void)
}
printf("\tAwaiting command\n\r");
HAL_UART_Receive_IT(&huart1, &byte, 1);
HAL_I2C_Slave_Receive_IT(&hi2c1, &i2c_data, 1);
// Run the bootloader

View File

@ -20,7 +20,7 @@ TARGET = bootloader
# building variables
######################################
# debug build?
DEBUG = 1
DEBUG = 0
# optimization
OPT = -Os