rusefi/firmware/bootloader/src/dfu.h

53 lines
1.8 KiB
C

#pragma once
#include "tunerstudio_io.h"
// This is where the bootloader starts
#define BOOTLOADER_ADDR 0x08000000
// Bootloader code max. size, in bytes
#define BOOTLOADER_SIZE 0x8000
// Number of sectors for the bootloader
#define BOOTLOADER_NUM_SECTORS (BOOTLOADER_SIZE/0x4000)
// This is where the application starts
#define APPLICATION_ADDR 0x08008000
#define DFU_BUFFER_SIZE 258 // Max. 256 bytes at a time plus 2 bytes (numBytes+checksum)
// DFU/USART Protocol is described in AN3155 document "Application note. USART protocol used in the STM32 bootloader"
// http://www.st.com/resource/en/application_note/cd00264342.pdf
#define DFU_UART_CHECK 0x7F // "UART handshake" escape byte
#define DFU_GET_LIST_CMD 0x00 // "Get supported commands list" command
#define DFU_DEVICE_ID_CMD 0x02 // "Get device ID" command
#define DFU_READ_CMD 0x11 // "Read memory" command
#define DFU_GO_CMD 0x21 // "Go" command
#define DFU_WRITE_CMD 0x31 // "Write memory" command
#define DFU_ERASE_CMD 0x44 // "Erase memory" command
#define DFU_VERSION_NUMBER 0x31 // The DFU protocol version number
#define DFU_ACK_BYTE 0x79 // Acknowledge byte ID
#define DFU_NACK_BYTE 0x1F // Not-Acknowledge byte ID
#define DFU_SR5_TIMEOUT_FIRST TIME_MS2I(200)
#define DFU_SR5_TIMEOUT_NORMAL TIME_MS2I(1000)
#define MCU_REVISION_MASK 0xfff // MCU Revision ID is needed by DFU protocol
// The address in MCU system memory where the bootloader version number is stored (2 bytes)
#define DFU_BOOTLOADER_VERSION_ADDRESS 0x1FFF76DE
/**
* @brief This function waits for the command to apply (write, read etc...)
*/
bool dfuStartLoop(void);
/**
* @brief Jump to the application
*/
void dfuJumpToApp(uint32_t addr);
ts_channel_s *getTsChannel();