// Receive and write to flash while (received < firmware_size) uint32_t chunk_len = (firmware_size - received) > CHUNK_SIZE ? CHUNK_SIZE : (firmware_size - received); receive_bytes(uart_rx_buffer, chunk_len); write_to_flash(FLASH_START_ADDR + received, uart_rx_buffer, chunk_len); received += chunk_len; send_byte(0x06); // ACK