X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fstlink-common.h;h=e47ac84f5e2c852c26dee191cdbc21b4424ddc79;hb=d31396111db210a9282da993656a1bb46465cfcd;hp=32ea444523648a254ca65d2ee8f1d1d7be805556;hpb=93ea941dff98b31ff6498a9b222c5bb1d40fe8a1;p=fw%2Fstlink diff --git a/src/stlink-common.h b/src/stlink-common.h index 32ea444..e47ac84 100644 --- a/src/stlink-common.h +++ b/src/stlink-common.h @@ -76,6 +76,11 @@ extern "C" { typedef uint32_t stm32_addr_t; + typedef struct flash_loader { + stm32_addr_t loader_addr; /* loader sram adddr */ + stm32_addr_t buf_addr; /* buffer sram address */ + } flash_loader_t; + enum transport_type { TRANSPORT_TYPE_ZERO = 0, TRANSPORT_TYPE_LIBSG, @@ -84,20 +89,26 @@ extern "C" { }; typedef struct _stlink stlink_t; - + typedef struct _stlink_backend { - void (*close) (stlink_t* sl); - void (*exit_debug_mode) (stlink_t *sl); - void (*enter_swd_mode) (stlink_t *sl); - void (*enter_jtag_mode) (stlink_t *stl); - void (*exit_dfu_mode) (stlink_t *stl); - void (*core_id) (stlink_t *stl); - void (*reset) (stlink_t *stl); - void (*run) (stlink_t *stl); - void (*status) (stlink_t *stl); - void (*version) (stlink_t *stl); + void (*close) (stlink_t * sl); + void (*exit_debug_mode) (stlink_t * sl); + void (*enter_swd_mode) (stlink_t * sl); + void (*enter_jtag_mode) (stlink_t * stl); + void (*exit_dfu_mode) (stlink_t * stl); + void (*core_id) (stlink_t * stl); + void (*reset) (stlink_t * stl); + void (*run) (stlink_t * stl); + void (*status) (stlink_t * stl); + void (*version) (stlink_t * stl); + void (*read_mem32) (stlink_t *sl, uint32_t addr, uint16_t len); void (*write_mem32) (stlink_t *sl, uint32_t addr, uint16_t len); void (*write_mem8) (stlink_t *sl, uint32_t addr, uint16_t len); + void (*read_all_reg) (stlink_t * stl); + void (*read_reg) (stlink_t *sl, int r_idx, reg* regp); + void (*write_reg) (stlink_t *sl, uint32_t reg, int idx); + void (*step) (stlink_t * stl); + int (*current_mode) (stlink_t * stl); } stlink_backend_t; struct _stlink { @@ -113,8 +124,8 @@ extern "C" { uint32_t core_id; int core_stat; - - + + /* medium density stm32 flash settings */ #define STM32_FLASH_BASE 0x08000000 #define STM32_FLASH_SIZE (128 * 1024) @@ -142,7 +153,7 @@ extern "C" { void DD(stlink_t *sl, char *format, ...); //stlink_t* stlink_quirk_open(const char *dev_name, const int verbose); - + // delegated functions... void stlink_enter_swd_mode(stlink_t *sl); void stlink_enter_jtag_mode(stlink_t *sl); @@ -154,28 +165,38 @@ extern "C" { void stlink_run(stlink_t *sl); void stlink_status(stlink_t *sl); void stlink_version(stlink_t *sl); + void stlink_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len); void stlink_write_mem32(stlink_t *sl, uint32_t addr, uint16_t len); void stlink_write_mem8(stlink_t *sl, uint32_t addr, uint16_t len); - + void stlink_read_all_regs(stlink_t *sl); + void stlink_read_reg(stlink_t *sl, int r_idx, reg *regp); + void stlink_write_reg(stlink_t *sl, uint32_t reg, int idx); + void stlink_step(stlink_t *sl); + int stlink_current_mode(stlink_t *sl); + // unprocessed - int stlink_current_mode(stlink_t *sl); void stlink_force_debug(stlink_t *sl); - void stlink_step(stlink_t *sl); - void stlink_read_all_regs(stlink_t *sl); - void stlink_read_reg(stlink_t *sl, int r_idx); - void stlink_write_reg(stlink_t *sl, uint32_t reg, int idx); - void stlink_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len); - int stlink_erase_flash_page(stlink_t* sl, stm32_addr_t page); int stlink_erase_flash_mass(stlink_t* sl); int stlink_write_flash(stlink_t* sl, stm32_addr_t address, uint8_t* data, unsigned length); - // privates.... + // privates, publics, the rest.... + // TODO sort what is private, and what is not + int stlink_erase_flash_page(stlink_t* sl, stm32_addr_t page); uint16_t read_uint16(const unsigned char *c, const int pt); void stlink_core_stat(stlink_t *sl); void stlink_print_data(stlink_t *sl); unsigned int is_bigendian(void); + uint32_t read_uint32(const unsigned char *c, const int pt); + void write_uint32(unsigned char* buf, uint32_t ui); + void write_uint16(unsigned char* buf, uint16_t ui); + unsigned int is_core_halted(stlink_t *sl); + int write_buffer_to_sram(stlink_t *sl, flash_loader_t* fl, const uint8_t* buf, size_t size); + int write_loader_to_sram(stlink_t *sl, stm32_addr_t* addr, size_t* size); + int stlink_fread(stlink_t* sl, const char* path, stm32_addr_t addr, size_t size); + int run_flash_loader(stlink_t *sl, flash_loader_t* fl, stm32_addr_t target, const uint8_t* buf, size_t size); + #include "stlink-sg.h"