From 01e16925020d183193af6e38285af4e1e66fee20 Mon Sep 17 00:00:00 2001 From: Piotr Wasilewski Date: Sun, 16 Jul 2023 18:32:40 +0200 Subject: [PATCH] feature: updated stlink library to develop --- CMakeLists.txt | 2 +- src/TargetMemoryHandler/StlinkHandler.cpp | 6 +- third_party/stlink/inc/backend.h | 64 +- third_party/stlink/inc/calculate.h | 15 + third_party/stlink/inc/chipid.h | 20 +- third_party/stlink/inc/commands.h | 12 +- third_party/stlink/inc/common_flash.h | 51 ++ third_party/stlink/inc/flash_loader.h | 32 +- third_party/stlink/inc/helper.h | 15 +- third_party/stlink/inc/lib_md5.h | 65 ++ third_party/stlink/inc/libusb_settings.h | 13 +- third_party/stlink/inc/logging.h | 23 +- third_party/stlink/inc/map_file.h | 33 ++ third_party/stlink/inc/md5.h | 66 +-- third_party/stlink/inc/option_bytes.h | 47 ++ third_party/stlink/inc/{reg.h => register.h} | 12 +- third_party/stlink/inc/sg.h | 70 ++- third_party/stlink/inc/spdlogWrapper.h | 2 +- third_party/stlink/inc/stlink copy.h | 331 ----------- third_party/stlink/inc/stlink.h | 540 ++++++++--------- third_party/stlink/inc/stm32.h | 39 +- third_party/stlink/inc/stm32flash.h | 557 ++++++++++-------- third_party/stlink/inc/usb.h | 88 ++- third_party/stlink/inc/version.h | 14 +- third_party/stlink/lib/linux/libstlink.a | Bin 204706 -> 204706 bytes third_party/stlink/lib/windows/libstlink.a | Bin 144382 -> 138324 bytes third_party/stlink/lib/windows/libstlink.dll | Bin 532298 -> 0 bytes .../stlink/lib/windows/libstlink.dll.a | Bin 217354 -> 0 bytes third_party/stlink/lib/windows/libusb-1.0.dll | Bin 466603 -> 0 bytes 29 files changed, 1069 insertions(+), 1048 deletions(-) create mode 100644 third_party/stlink/inc/calculate.h create mode 100644 third_party/stlink/inc/common_flash.h create mode 100644 third_party/stlink/inc/lib_md5.h create mode 100644 third_party/stlink/inc/map_file.h create mode 100644 third_party/stlink/inc/option_bytes.h rename third_party/stlink/inc/{reg.h => register.h} (98%) delete mode 100644 third_party/stlink/inc/stlink copy.h delete mode 100644 third_party/stlink/lib/windows/libstlink.dll delete mode 100644 third_party/stlink/lib/windows/libstlink.dll.a delete mode 100644 third_party/stlink/lib/windows/libusb-1.0.dll diff --git a/CMakeLists.txt b/CMakeLists.txt index 178f3455..2c7f7641 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,6 +142,7 @@ add_custom_command(TARGET ${EXECUTABLE} POST_BUILD install(TARGETS ${EXECUTABLE} RUNTIME DESTINATION ${INSTALL_PATH} COMPONENT applications) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/imgui.ini DESTINATION ${INSTALL_PATH}) +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/third_party/stlink/chips DESTINATION ${INSTALL_PATH}) if(WIN32) if(PRODUCTION) @@ -158,7 +159,6 @@ if(WIN32) endif() if(UNIX) - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/third_party/stlink/chips DESTINATION ${INSTALL_PATH}) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/launch/icon.png DESTINATION ${INSTALL_PATH}) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/launch/STMViewer.desktop PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE diff --git a/src/TargetMemoryHandler/StlinkHandler.cpp b/src/TargetMemoryHandler/StlinkHandler.cpp index 6f4e6439..3c14f4bf 100644 --- a/src/TargetMemoryHandler/StlinkHandler.cpp +++ b/src/TargetMemoryHandler/StlinkHandler.cpp @@ -2,11 +2,13 @@ #include +#include "logging.h" + StlinkHandler::StlinkHandler() { -#if defined(unix) || defined(__unix__) || defined(__unix) + // #if defined(unix) || defined(__unix__) || defined(__unix) init_chipids("./chips"); -#endif + // #endif } bool StlinkHandler::startAcqusition() diff --git a/third_party/stlink/inc/backend.h b/third_party/stlink/inc/backend.h index a45dccd8..6b9c9c0a 100644 --- a/third_party/stlink/inc/backend.h +++ b/third_party/stlink/inc/backend.h @@ -1,37 +1,39 @@ -#ifndef STLINK_BACKEND_H_ -#define STLINK_BACKEND_H_ +#ifndef BACKEND_H +#define BACKEND_H + +#include typedef struct _stlink_backend { void (*close) (stlink_t * sl); - int (*exit_debug_mode) (stlink_t * sl); - int (*enter_swd_mode) (stlink_t * sl); - int (*enter_jtag_mode) (stlink_t * stl); - int (*exit_dfu_mode) (stlink_t * stl); - int (*core_id) (stlink_t * stl); - int (*reset) (stlink_t * stl); - int (*jtag_reset) (stlink_t * stl, int value); - int (*run) (stlink_t * stl, enum run_type type); - int (*status) (stlink_t * stl); - int (*version) (stlink_t *sl); - int (*read_debug32) (stlink_t *sl, uint32_t addr, uint32_t *data); - int (*read_mem32) (stlink_t *sl, uint32_t addr, uint16_t len); - int (*write_debug32) (stlink_t *sl, uint32_t addr, uint32_t data); - int (*write_mem32) (stlink_t *sl, uint32_t addr, uint16_t len); - int (*write_mem8) (stlink_t *sl, uint32_t addr, uint16_t len); - int (*read_all_regs) (stlink_t *sl, struct stlink_reg * regp); - int (*read_reg) (stlink_t *sl, int r_idx, struct stlink_reg * regp); - int (*read_all_unsupported_regs) (stlink_t *sl, struct stlink_reg *regp); - int (*read_unsupported_reg) (stlink_t *sl, int r_idx, struct stlink_reg *regp); - int (*write_unsupported_reg) (stlink_t *sl, uint32_t value, int idx, struct stlink_reg *regp); - int (*write_reg) (stlink_t *sl, uint32_t reg, int idx); - int (*step) (stlink_t * stl); - int (*current_mode) (stlink_t * stl); - int (*force_debug) (stlink_t *sl); + int32_t (*exit_debug_mode) (stlink_t * sl); + int32_t (*enter_swd_mode) (stlink_t * sl); + int32_t (*enter_jtag_mode) (stlink_t * stl); + int32_t (*exit_dfu_mode) (stlink_t * stl); + int32_t (*core_id) (stlink_t * stl); + int32_t (*reset) (stlink_t * stl); + int32_t (*jtag_reset) (stlink_t * stl, int32_t value); + int32_t (*run) (stlink_t * stl, enum run_type type); + int32_t (*status) (stlink_t * stl); + int32_t (*version) (stlink_t *sl); + int32_t (*read_debug32) (stlink_t *sl, uint32_t addr, uint32_t *data); + int32_t (*read_mem32) (stlink_t *sl, uint32_t addr, uint16_t len); + int32_t (*write_debug32) (stlink_t *sl, uint32_t addr, uint32_t data); + int32_t (*write_mem32) (stlink_t *sl, uint32_t addr, uint16_t len); + int32_t (*write_mem8) (stlink_t *sl, uint32_t addr, uint16_t len); + int32_t (*read_all_regs) (stlink_t *sl, struct stlink_reg * regp); + int32_t (*read_reg) (stlink_t *sl, int32_t r_idx, struct stlink_reg * regp); + int32_t (*read_all_unsupported_regs) (stlink_t *sl, struct stlink_reg *regp); + int32_t (*read_unsupported_reg) (stlink_t *sl, int32_t r_idx, struct stlink_reg *regp); + int32_t (*write_unsupported_reg) (stlink_t *sl, uint32_t value, int32_t idx, struct stlink_reg *regp); + int32_t (*write_reg) (stlink_t *sl, uint32_t reg, int32_t idx); + int32_t (*step) (stlink_t * stl); + int32_t (*current_mode) (stlink_t * stl); + int32_t (*force_debug) (stlink_t *sl); int32_t (*target_voltage) (stlink_t *sl); - int (*set_swdclk) (stlink_t * stl, int freq_khz); - int (*trace_enable) (stlink_t * sl, uint32_t frequency); - int (*trace_disable) (stlink_t * sl); - int (*trace_read) (stlink_t * sl, uint8_t* buf, size_t size); + int32_t (*set_swdclk) (stlink_t * stl, int32_t freq_khz); + int32_t (*trace_enable) (stlink_t * sl, uint32_t frequency); + int32_t (*trace_disable) (stlink_t * sl); + int32_t (*trace_read) (stlink_t * sl, uint8_t* buf, uint32_t size); } stlink_backend_t; -#endif // STLINK_BACKEND_H_ +#endif // BACKEND_H diff --git a/third_party/stlink/inc/calculate.h b/third_party/stlink/inc/calculate.h new file mode 100644 index 00000000..ca0a39df --- /dev/null +++ b/third_party/stlink/inc/calculate.h @@ -0,0 +1,15 @@ +/* + * File: calculate.h + * + * Calculation of sector numbers and pages + */ + +#ifndef CALCULATE_H +#define CALCULATE_H + +uint32_t calculate_F4_sectornum(uint32_t); +uint32_t calculate_F7_sectornum(uint32_t); +uint32_t calculate_H7_sectornum(stlink_t *, uint32_t, uint32_t); +uint32_t calculate_L4_page(stlink_t *, uint32_t); + +#endif // CALCULATE_H diff --git a/third_party/stlink/inc/chipid.h b/third_party/stlink/inc/chipid.h index 1eae2cc3..6726a742 100644 --- a/third_party/stlink/inc/chipid.h +++ b/third_party/stlink/inc/chipid.h @@ -1,8 +1,11 @@ -#ifndef STLINK_CHIPID_H_ -#define STLINK_CHIPID_H_ +/* + * File: chipid.h + * + * Chip-ID parametres + */ -#include -#include +#ifndef CHIPID_H +#define CHIPID_H /* Chipid parametres */ struct stlink_chipid_params { @@ -18,10 +21,13 @@ struct stlink_chipid_params { uint32_t option_base; uint32_t option_size; uint32_t flags; - struct stlink_chipid_params * next; + struct stlink_chipid_params *next; }; struct stlink_chipid_params *stlink_chipid_get_params(uint32_t chipid); - void init_chipids(char *dir_to_scan); -#endif // STLINK_CHIPID_H_ +void dump_a_chip(struct stlink_chipid_params *dev); +void process_chipfile(char *fname); +void init_chipids(char *dir_to_scan); + +#endif // CHIPID_H diff --git a/third_party/stlink/inc/commands.h b/third_party/stlink/inc/commands.h index 136adf80..64cecce1 100644 --- a/third_party/stlink/inc/commands.h +++ b/third_party/stlink/inc/commands.h @@ -1,5 +1,11 @@ -#ifndef STLINK_COMMANDS_H_ -#define STLINK_COMMANDS_H_ +/* + * File: commands.h + * + * stlink commands + */ + +#ifndef COMMANDS_H +#define COMMANDS_H enum stlink_commands { STLINK_GET_VERSION = 0xF1, @@ -54,4 +60,4 @@ enum stlink_dfu_commands { STLINK_DFU_EXIT = 0x07 }; -#endif // STLINK_COMMANDS_H_ +#endif // COMMANDS_H diff --git a/third_party/stlink/inc/common_flash.h b/third_party/stlink/inc/common_flash.h new file mode 100644 index 00000000..9b2b8405 --- /dev/null +++ b/third_party/stlink/inc/common_flash.h @@ -0,0 +1,51 @@ +/* + * File: common_flash.h + * + * Flash operations + */ + +#ifndef COMMON_FLASH_H +#define COMMON_FLASH_H + +#define BANK_1 0 +#define BANK_2 1 + +uint32_t get_stm32l0_flash_base(stlink_t *); +uint32_t read_flash_cr(stlink_t *, uint32_t); +void lock_flash(stlink_t *); +// static inline int32_t write_flash_sr(stlink_t *sl, uint32_t bank, uint32_t val); +void clear_flash_error(stlink_t *); +uint32_t read_flash_sr(stlink_t *sl, uint32_t bank); +uint32_t is_flash_busy(stlink_t *sl); +void wait_flash_busy(stlink_t *); +int32_t check_flash_error(stlink_t *); +// static inline uint32_t is_flash_locked(stlink_t *sl); +// static void unlock_flash(stlink_t *sl); +int32_t unlock_flash_if(stlink_t *); +int32_t lock_flash_option(stlink_t *); +// static bool is_flash_option_locked(stlink_t *sl); +// static int32_t unlock_flash_option(stlink_t *sl); +int32_t unlock_flash_option_if(stlink_t *); +void write_flash_cr_psiz(stlink_t *, uint32_t, uint32_t); +void clear_flash_cr_pg(stlink_t *, uint32_t); +// static void wait_flash_busy_progress(stlink_t *sl); +// static inline void write_flash_ar(stlink_t *sl, uint32_t n, uint32_t bank); +// static inline void write_flash_cr_snb(stlink_t *sl, uint32_t n, uint32_t bank); +// static void set_flash_cr_per(stlink_t *sl, uint32_t bank); +// static void clear_flash_cr_per(stlink_t *sl, uint32_t bank); +// static inline void write_flash_cr_bker_pnb(stlink_t *sl, uint32_t n); +// static void set_flash_cr_strt(stlink_t *sl, uint32_t bank); +// static void set_flash_cr_mer(stlink_t *sl, bool v, uint32_t bank); +int32_t stlink_erase_flash_page(stlink_t *sl, stm32_addr_t flashaddr); +int32_t stlink_erase_flash_section(stlink_t *sl, stm32_addr_t base_addr, uint32_t size, bool align_size); +int32_t stlink_erase_flash_mass(stlink_t *sl); +int32_t stlink_mwrite_flash(stlink_t *sl, uint8_t *data, uint32_t length, stm32_addr_t addr); +int32_t stlink_fwrite_flash(stlink_t *sl, const char *path, stm32_addr_t addr); +int32_t stlink_fcheck_flash(stlink_t *sl, const char *path, stm32_addr_t addr); +int32_t stlink_verify_write_flash(stlink_t *sl, stm32_addr_t address, uint8_t *data, uint32_t length); +int32_t stlink_check_address_range_validity(stlink_t *sl, stm32_addr_t addr, uint32_t size); +int32_t stlink_check_address_alignment(stlink_t *sl, stm32_addr_t addr); +int32_t stlink_write_flash(stlink_t *sl, stm32_addr_t addr, uint8_t *base, uint32_t len, uint8_t eraseonly); +void stlink_fwrite_finalize(stlink_t *, stm32_addr_t); + +#endif // COMMON_FLASH_H diff --git a/third_party/stlink/inc/flash_loader.h b/third_party/stlink/inc/flash_loader.h index 85b92bef..33edc7ac 100644 --- a/third_party/stlink/inc/flash_loader.h +++ b/third_party/stlink/inc/flash_loader.h @@ -1,20 +1,28 @@ /* - * File: stlink.h + * File: flash_loader.h * - * This should contain all the common top level stlink interfaces, - * regardless of how the backend does the work.... + * Flash loaders */ -#ifndef STLINK_FLASH_LOADER_H_ -#define STLINK_FLASH_LOADER_H_ +#ifndef FLASH_LOADER_H +#define FLASH_LOADER_H -#include -#include +int32_t stlink_flash_loader_init(stlink_t *sl, flash_loader_t* fl); +// static int32_t loader_v_dependent_assignment(stlink_t *sl, +// const uint8_t **loader_code, uint32_t *loader_size, +// const uint8_t *high_v_loader, uint32_t high_v_loader_size, +// const uint8_t *low_v_loader, uint32_t low_v_loader_size); +int32_t stlink_flash_loader_write_to_sram(stlink_t *sl, stm32_addr_t* addr, uint32_t* size); +int32_t stlink_flash_loader_run(stlink_t *sl, flash_loader_t* fl, stm32_addr_t target, const uint8_t* buf, uint32_t size); -#include -int stlink_flash_loader_init(stlink_t *sl, flash_loader_t* fl); -int stlink_flash_loader_write_to_sram(stlink_t *sl, stm32_addr_t* addr, size_t* size); -int stlink_flash_loader_run(stlink_t *sl, flash_loader_t* fl, stm32_addr_t target, const uint8_t* buf, size_t size); +/* === Functions from old header file flashloader.h === */ -#endif // STLINK_FLASH_LOADER_H_ +int32_t stm32l1_write_half_pages(stlink_t *sl, stm32_addr_t addr, uint8_t *base, uint32_t len, uint32_t pagesize); +// static void set_flash_cr_pg(stlink_t *sl, uint32_t bank); +// static void set_dma_state(stlink_t *sl, flash_loader_t *fl, int32_t bckpRstr); +int32_t stlink_flashloader_start(stlink_t *sl, flash_loader_t *fl); +int32_t stlink_flashloader_write(stlink_t *sl, flash_loader_t *fl, stm32_addr_t addr, uint8_t *base, uint32_t len); +int32_t stlink_flashloader_stop(stlink_t *sl, flash_loader_t *fl); + +#endif // FLASH_LOADER_H diff --git a/third_party/stlink/inc/helper.h b/third_party/stlink/inc/helper.h index 96467377..ef374a5b 100644 --- a/third_party/stlink/inc/helper.h +++ b/third_party/stlink/inc/helper.h @@ -1,8 +1,13 @@ -#ifndef SYS_HELPER_H -#define SYS_HELPER_H +/* + * File: helper.h + * + * General helper functions + */ -unsigned time_ms(); +#ifndef HELPER_H +#define HELPER_H -int arg_parse_freq(const char *str); +uint32_t time_ms(); +int32_t arg_parse_freq(const char *str); -#endif /* SYS_HELPER_H */ +#endif // HELPER_H diff --git a/third_party/stlink/inc/lib_md5.h b/third_party/stlink/inc/lib_md5.h new file mode 100644 index 00000000..7275fd0b --- /dev/null +++ b/third_party/stlink/inc/lib_md5.h @@ -0,0 +1,65 @@ +/* + * WjCryptLib_Md5 (https://github.com/WaterJuice/WjCryptLib) + * Implementation of MD5 hash function. Originally written by Alexander Peslyak. + * Modified by WaterJuice retaining Public Domain license. + * This is free and unencumbered software released into the public domain - June 2013 - waterjuice.org + */ + +#ifndef LIB_MD5_H +#define LIB_MD5_H + +#pragma once + +/* TYPES */ + +/* Md5Context + * This must be initialised using Md5Initialised. + * Do not modify the contents of this structure directly. + */ +typedef struct { + uint32_t lo; + uint32_t hi; + uint32_t a; + uint32_t b; + uint32_t c; + uint32_t d; + uint8_t buffer[64]; + uint32_t block[16]; +} Md5Context; + +#define MD5_HASH_SIZE (128 / 8) + +typedef struct { + uint8_t bytes [MD5_HASH_SIZE]; +} MD5_HASH; + +/* PUBLIC FUNCTIONS */ + +/* Md5Initialise + * Initialises an MD5 Context. + * Use this to initialise/reset a context. + */ +void Md5Initialise(Md5Context* Context /* [out] */); + +/* Md5Update + * Adds data to the MD5 context. + * This will process the data and update the internal state of the context. + * Keep on calling this function until all the data has been added. + * Then call Md5Finalise to calculate the hash. + */ +void Md5Update(Md5Context* Context /* [in out] */, void const* Buffer /* [in] */, uint32_t BufferSize /* [in] */); + +/* Md5Finalise + * Performs the final calculation of the hash and returns the digest + * (16 byte buffer containing 128bit hash). + * After calling this, Md5Initialised must be used to reuse the context. + */ +void Md5Finalise(Md5Context* Context /* [in out] */, MD5_HASH* Digest /* [in] */); + +/* Md5Calculate + * Combines Md5Initialise, Md5Update, and Md5Finalise into one function. + * Calculates the MD5 hash of the buffer. + */ +void Md5Calculate(void const* Buffer /* [in] */, uint32_t BufferSize /* [in] */, MD5_HASH* Digest /* [in] */); + +#endif // LIB_MD5_H \ No newline at end of file diff --git a/third_party/stlink/inc/libusb_settings.h b/third_party/stlink/inc/libusb_settings.h index 2a595238..b0a51ad3 100644 --- a/third_party/stlink/inc/libusb_settings.h +++ b/third_party/stlink/inc/libusb_settings.h @@ -1,3 +1,9 @@ +/* + * File: libusb_settings.h + * + * Settings for libusb library + */ + #ifndef LIBUSB_SETTINGS_H #define LIBUSB_SETTINGS_H @@ -19,6 +25,7 @@ * v1.0.23 | 0x01000107 * v1.0.24 | 0x01000108 * v1.0.25 | 0x01000109 + * v1.0.26 | 0x01000110 */ #if defined (__FreeBSD__) @@ -32,11 +39,9 @@ #if defined (__FreeBSD__) #define MINIMAL_API_VERSION 0x01000102 // v1.0.16 #elif defined (__OpenBSD__) - #define MINIMAL_API_VERSION 0x01000105 // v1.0.21 + #define MINIMAL_API_VERSION 0x01000106 // v1.0.22 #elif defined (__linux__) - #define MINIMAL_API_VERSION 0x01000105 // v1.0.21 -#elif defined (__APPLE__) - #define MINIMAL_API_VERSION 0x01000109 // v1.0.25 + #define MINIMAL_API_VERSION 0x01000106 // v1.0.22 #elif defined (_WIN32) #define MINIMAL_API_VERSION 0x01000109 // v1.0.25 #endif diff --git a/third_party/stlink/inc/logging.h b/third_party/stlink/inc/logging.h index 6c97eb89..de5403ca 100644 --- a/third_party/stlink/inc/logging.h +++ b/third_party/stlink/inc/logging.h @@ -1,15 +1,18 @@ /* + * File: logging.h + * + * UglyLogging: Slow, yet another wheel reinvented, but enough to make the rest of our code pretty enough. * Ugly, low performance, configurable level, logging "framework" */ -#ifndef UGLYLOGGING_H -#define UGLYLOGGING_H +#ifndef LOGGING_H +#define LOGGING_H #include "spdlogWrapper.h" #ifdef __cplusplus extern "C" { -#endif +#endif // __cplusplus enum ugly_loglevel { UDEBUG = 90, @@ -22,16 +25,18 @@ enum ugly_loglevel { #define PRINTF_ARRT __attribute__ ((format (printf, 3, 4))) #else #define PRINTF_ARRT -#endif +#endif // __GNUC__ -int ugly_init(int maximum_threshold); -int ugly_log(int level, const char *tag, const char *format, ...) PRINTF_ARRT; -int ugly_libusb_log_level(enum ugly_loglevel v); +int32_t ugly_init(int32_t maximum_threshold); +int32_t ugly_log(int32_t level, const char *tag, const char *format, ...) PRINTF_ARRT; +int32_t ugly_libusb_log_level(enum ugly_loglevel v); #define UGLY_LOG_FILE (strstr(__FILE__, "/") != NULL ? \ strrchr(__FILE__, '/') + 1 : strstr(__FILE__, "\\") != NULL ? \ strrchr(__FILE__, '\\') + 1 : __FILE__) +// TODO: we need to write this in a more generic way, for now this should compile +// on visual studio (See http://stackoverflow.com/a/8673872/1836746) #define DLOG(...) spdlogLog(UDEBUG, __VA_ARGS__) #define ILOG(...) spdlogLog(UINFO, __VA_ARGS__) #define WLOG(...) spdlogLog(UWARN, __VA_ARGS__) @@ -39,6 +44,6 @@ int ugly_libusb_log_level(enum ugly_loglevel v); #ifdef __cplusplus } -#endif +#endif // __cplusplus -#endif // UGLYLOGGING_H +#endif // LOGGING_H diff --git a/third_party/stlink/inc/map_file.h b/third_party/stlink/inc/map_file.h new file mode 100644 index 00000000..f25602d1 --- /dev/null +++ b/third_party/stlink/inc/map_file.h @@ -0,0 +1,33 @@ +/* + * File: map_file.h + * + * File mapping + */ + +#ifndef MAP_FILE_H +#define MAP_FILE_H + +#ifndef O_BINARY +#define O_BINARY 0 +#endif // O_BINARY + +#ifdef STLINK_HAVE_SYS_MMAN_H +#include +#else +#include +#endif // STLINK_HAVE_SYS_MMAN_H + +/* Memory mapped file */ +typedef struct mapped_file { + uint8_t *base; + uint32_t len; +} mapped_file_t; + +#define MAPPED_FILE_INITIALIZER \ + { NULL, 0 } + +int32_t check_file(stlink_t *, mapped_file_t *, stm32_addr_t); +int32_t map_file(mapped_file_t *, const char *); +void unmap_file(mapped_file_t *); + +#endif // MAP_FILE_H diff --git a/third_party/stlink/inc/md5.h b/third_party/stlink/inc/md5.h index a69d7fc6..f5591e2c 100644 --- a/third_party/stlink/inc/md5.h +++ b/third_party/stlink/inc/md5.h @@ -1,63 +1,15 @@ /* - * WjCryptLib_Md5 (https://github.com/WaterJuice/WjCryptLib) - * Implementation of MD5 hash function. Originally written by Alexander Peslyak. - * Modified by WaterJuice retaining Public Domain license. - * This is free and unencumbered software released into the public domain - June 2013 - waterjuice.org + * File: md5.h + * + * MD5 hash function */ -#pragma once +#ifndef MD5_H +#define MD5_H -#include -#include +#include "map_file.h" -/* TYPES */ +void md5_calculate(mapped_file_t *); +void stlink_checksum(mapped_file_t *); -/* Md5Context - * This must be initialised using Md5Initialised. - * Do not modify the contents of this structure directly. - */ -typedef struct { - uint32_t lo; - uint32_t hi; - uint32_t a; - uint32_t b; - uint32_t c; - uint32_t d; - uint8_t buffer[64]; - uint32_t block[16]; -} Md5Context; - -#define MD5_HASH_SIZE (128 / 8) - -typedef struct { - uint8_t bytes [MD5_HASH_SIZE]; -} MD5_HASH; - -/* PUBLIC FUNCTIONS */ - -/* Md5Initialise - * Initialises an MD5 Context. - * Use this to initialise/reset a context. - */ -void Md5Initialise(Md5Context* Context /* [out] */); - -/* Md5Update - * Adds data to the MD5 context. - * This will process the data and update the internal state of the context. - * Keep on calling this function until all the data has been added. - * Then call Md5Finalise to calculate the hash. - */ -void Md5Update(Md5Context* Context /* [in out] */, void const* Buffer /* [in] */, uint32_t BufferSize /* [in] */); - -/* Md5Finalise - * Performs the final calculation of the hash and returns the digest - * (16 byte buffer containing 128bit hash). - * After calling this, Md5Initialised must be used to reuse the context. - */ -void Md5Finalise(Md5Context* Context /* [in out] */, MD5_HASH* Digest /* [in] */); - -/* Md5Calculate - * Combines Md5Initialise, Md5Update, and Md5Finalise into one function. - * Calculates the MD5 hash of the buffer. - */ -void Md5Calculate(void const* Buffer /* [in] */, uint32_t BufferSize /* [in] */, MD5_HASH* Digest /* [in] */); +#endif // MD5_H \ No newline at end of file diff --git a/third_party/stlink/inc/option_bytes.h b/third_party/stlink/inc/option_bytes.h new file mode 100644 index 00000000..7ab3e295 --- /dev/null +++ b/third_party/stlink/inc/option_bytes.h @@ -0,0 +1,47 @@ +/* + * File: option_bytes.h + * + * Read and write option bytes and option control registers + */ + +#ifndef OPTION_BYTES_H +#define OPTION_BYTES_H + +int32_t stlink_read_option_control_register_f0(stlink_t *sl, uint32_t *option_byte); +// static int32_t stlink_write_option_bytes_f0(stlink_t *sl, stm32_addr_t addr, uint8_t* base, uint32_t len); +// static int32_t stlink_write_option_control_register_f0(stlink_t *sl, uint32_t option_cr); +int32_t stlink_read_option_control_register_f2(stlink_t *sl, uint32_t *option_byte); +int32_t stlink_read_option_bytes_f2(stlink_t *sl, uint32_t *option_byte); +int32_t stlink_read_option_control_register_f4(stlink_t *sl, uint32_t *option_byte); +int32_t stlink_read_option_bytes_f4(stlink_t *sl, uint32_t *option_byte); +// static int32_t stlink_write_option_bytes_f4(stlink_t *sl, stm32_addr_t addr, uint8_t *base, uint32_t len); +int32_t stlink_read_option_bytes_f7(stlink_t *sl, uint32_t *option_byte); +// static int32_t stlink_write_option_bytes_f7(stlink_t *sl, stm32_addr_t addr, uint8_t *base, uint32_t len); +int32_t stlink_read_option_control_register_f7(stlink_t *sl, uint32_t *option_byte); +// static int32_t stlink_write_option_control_register_f7(stlink_t *sl, uint32_t option_cr); +int32_t stlink_read_option_control_register1_f7(stlink_t *sl, uint32_t *option_byte); +// static int32_t stlink_write_option_control_register1_f7(stlink_t *sl, uint32_t option_cr1); +int32_t stlink_read_option_bytes_boot_add_f7(stlink_t *sl, uint32_t *option_byte); +// static int32_t stlink_write_option_bytes_boot_add_f7(stlink_t *sl, uint32_t option_byte_boot_add); +int32_t stlink_read_option_control_register_gx(stlink_t *sl, uint32_t *option_byte); +int32_t stlink_read_option_bytes_gx(stlink_t *sl, uint32_t *option_byte); +// static int32_t stlink_write_option_bytes_gx(stlink_t *sl, stm32_addr_t addr, uint8_t *base, uint32_t len); +// static int32_t stlink_write_option_bytes_h7(stlink_t *sl, stm32_addr_t addr, uint8_t *base, uint32_t len); +// static int32_t stlink_write_option_bytes_l0(stlink_t *sl, stm32_addr_t addr, uint8_t *base, uint32_t len); +// static int32_t stlink_write_option_bytes_l4(stlink_t *sl, stm32_addr_t addr, uint8_t *base, uint32_t len); +// static int32_t stlink_write_option_bytes_wb(stlink_t *sl, stm32_addr_t addr, uint8_t *base, uint32_t len); +int32_t stlink_read_option_control_register_wb(stlink_t *sl, uint32_t *option_byte); +// static int32_t stlink_write_option_control_register_wb(stlink_t *sl, uint32_t option_cr); +int32_t stlink_read_option_bytes_generic(stlink_t *sl, uint32_t *option_byte); +int32_t stlink_write_option_bytes(stlink_t *sl, stm32_addr_t addr, uint8_t *base, uint32_t len); +int32_t stlink_fwrite_option_bytes(stlink_t *sl, const char *path, stm32_addr_t addr); +int32_t stlink_read_option_control_register32(stlink_t *sl, uint32_t *option_byte); +int32_t stlink_write_option_control_register32(stlink_t *sl, uint32_t option_cr); +int32_t stlink_read_option_control_register1_32(stlink_t *sl, uint32_t *option_byte); +int32_t stlink_write_option_control_register1_32(stlink_t *sl, uint32_t option_cr1); +int32_t stlink_read_option_bytes32(stlink_t *sl, uint32_t* option_byte); +int32_t stlink_write_option_bytes32(stlink_t *sl, uint32_t option_byte); +int32_t stlink_read_option_bytes_boot_add32(stlink_t *sl, uint32_t* option_byte); +int32_t stlink_write_option_bytes_boot_add32(stlink_t *sl, uint32_t option_bytes_boot_add); + +#endif // OPTION_BYTES_H diff --git a/third_party/stlink/inc/reg.h b/third_party/stlink/inc/register.h similarity index 98% rename from third_party/stlink/inc/reg.h rename to third_party/stlink/inc/register.h index b581a269..f1e9574c 100644 --- a/third_party/stlink/inc/reg.h +++ b/third_party/stlink/inc/register.h @@ -1,5 +1,11 @@ -#ifndef STLINK_REG_H_ -#define STLINK_REG_H_ +/* + * File: register.h + * + * Common STM32 registers + */ + +#ifndef REGISTER_H +#define REGISTER_H #define STLINK_REG_CM3_CPUID 0xE000ED00 @@ -123,4 +129,4 @@ #define STLINK_REG_CM7_ICIALLU 0xE000EF50 #define STLINK_REG_CM7_CCSIDR 0xE000ED80 -#endif // STLINK_REG_H_ +#endif // REGISTER_H diff --git a/third_party/stlink/inc/sg.h b/third_party/stlink/inc/sg.h index 212d03b2..b10d0f6f 100644 --- a/third_party/stlink/inc/sg.h +++ b/third_party/stlink/inc/sg.h @@ -1,13 +1,19 @@ +/* == nightwalker-87: TODO: CONTENT AND USE OF THIS SOURCE FILE IS TO BE VERIFIED (07.06.2023) == */ + /* - * File: sg.h - * Author: karl + * File: sg.h + * + * */ -#ifndef STLINK_SG_H -#define STLINK_SG_H +#ifndef SG_H +#define SG_H + +#include #include -#include + +#include "libusb_settings.h" /* Device access */ #define RDWR 0 @@ -35,15 +41,15 @@ struct stlink_libsg { libusb_context* libusb_ctx; libusb_device_handle *usb_handle; - unsigned ep_rep; - unsigned ep_req; + uint32_t ep_rep; + uint32_t ep_req; - int sg_fd; - int do_scsi_pt_err; + int32_t sg_fd; + int32_t do_scsi_pt_err; unsigned char cdb_cmd_blk[CDB_SL]; - int q_data_dir; // Q_DATA_IN, Q_DATA_OUT + int32_t q_data_dir; // Q_DATA_IN, Q_DATA_OUT // the start of the query data in the device memory space uint32_t q_addr; @@ -54,6 +60,46 @@ struct stlink_libsg { struct stlink_reg reg; }; -stlink_t* stlink_v1_open(const int verbose, int reset); +// static void clear_cdb(struct stlink_libsg *sl); +void _stlink_sg_close(stlink_t *sl); +// static int32_t get_usb_mass_storage_status(libusb_device_handle *handle, uint8_t endpoint, uint32_t *tag); +// static int32_t dump_CDB_command(uint8_t *cdb, uint8_t cdb_len); +int32_t send_usb_mass_storage_command(libusb_device_handle *handle, uint8_t endpoint_out, uint8_t *cdb, uint8_t cdb_length, + uint8_t lun, uint8_t flags, uint32_t expected_rx_size); +// static void get_sense(libusb_device_handle *handle, uint8_t endpoint_in, uint8_t endpoint_out); +int32_t send_usb_data_only(libusb_device_handle *handle, unsigned char endpoint_out, + unsigned char endpoint_in, unsigned char *cbuf, uint32_t length); +int32_t stlink_q(stlink_t *sl); +void stlink_stat(stlink_t *stl, char *txt); +int32_t _stlink_sg_version(stlink_t *stl); +int32_t _stlink_sg_current_mode(stlink_t *stl); +int32_t _stlink_sg_enter_swd_mode(stlink_t *sl); +int32_t _stlink_sg_enter_jtag_mode(stlink_t *sl); +int32_t _stlink_sg_exit_dfu_mode(stlink_t *sl); +int32_t _stlink_sg_core_id(stlink_t *sl); +int32_t _stlink_sg_reset(stlink_t *sl); +int32_t _stlink_sg_jtag_reset(stlink_t *sl, int32_t value); +int32_t _stlink_sg_status(stlink_t *sl); +int32_t _stlink_sg_force_debug(stlink_t *sl); +int32_t _stlink_sg_read_all_regs(stlink_t *sl, struct stlink_reg *regp); +int32_t _stlink_sg_read_reg(stlink_t *sl, int32_t r_idx, struct stlink_reg *regp); +int32_t _stlink_sg_write_reg(stlink_t *sl, uint32_t reg, int32_t idx); +void stlink_write_dreg(stlink_t *sl, uint32_t reg, uint32_t addr); +int32_t _stlink_sg_run(stlink_t *sl, enum run_type type); +int32_t _stlink_sg_step(stlink_t *sl); +void stlink_set_hw_bp(stlink_t *sl, int32_t fp_nr, uint32_t addr, int32_t fp); +void stlink_clr_hw_bp(stlink_t *sl, int32_t fp_nr); +int32_t _stlink_sg_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len); +int32_t _stlink_sg_write_mem8(stlink_t *sl, uint32_t addr, uint16_t len); +int32_t _stlink_sg_write_mem32(stlink_t *sl, uint32_t addr, uint16_t len); +int32_t _stlink_sg_write_debug32(stlink_t *sl, uint32_t addr, uint32_t data); +int32_t _stlink_sg_read_debug32(stlink_t *sl, uint32_t addr, uint32_t *data); +int32_t _stlink_sg_exit_debug_mode(stlink_t *stl); + +// static stlink_backend_t _stlink_sg_backend = { }; + +// static stlink_t* stlink_open(const int32_t verbose); +stlink_t* stlink_v1_open_inner(const int32_t verbose); +stlink_t* stlink_v1_open(const int32_t verbose, int32_t reset); -#endif // STLINK_SG_H +#endif // SG_H diff --git a/third_party/stlink/inc/spdlogWrapper.h b/third_party/stlink/inc/spdlogWrapper.h index 09276557..26f34c8b 100644 --- a/third_party/stlink/inc/spdlogWrapper.h +++ b/third_party/stlink/inc/spdlogWrapper.h @@ -7,7 +7,7 @@ #define EXTERNC #endif -EXTERNC int spdlogLog(int level, const char* str, ...); +EXTERNC int spdlogLog(int level, const char *str, ...); #undef EXTERNC diff --git a/third_party/stlink/inc/stlink copy.h b/third_party/stlink/inc/stlink copy.h deleted file mode 100644 index 17601fda..00000000 --- a/third_party/stlink/inc/stlink copy.h +++ /dev/null @@ -1,331 +0,0 @@ - -/* - * File: stlink.h - * - * This should contain all the common top level stlink interfaces, - * regardless of how the backend does the work.... - */ - -#ifndef STLINK_H -#define STLINK_H - -#include -#include -#include - -#include "stm32.h" -#include "stm32flash.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define STLINK_ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) - -/* Max data transfer size */ -// 6kB = max mem32_read block, 8kB sram -// #define Q_BUF_LEN 96 -#define Q_BUF_LEN (1024 * 100) - -/* Statuses of core */ -enum target_state { - TARGET_UNKNOWN = 0, - TARGET_RUNNING = 1, - TARGET_HALTED = 2, - TARGET_RESET = 3, - TARGET_DEBUG_RUNNING = 4, -}; - -#define STLINK_CORE_RUNNING 0x80 -#define STLINK_CORE_HALTED 0x81 - -/* STLINK modes */ -#define STLINK_DEV_DFU_MODE 0x00 -#define STLINK_DEV_MASS_MODE 0x01 -#define STLINK_DEV_DEBUG_MODE 0x02 -#define STLINK_DEV_UNKNOWN_MODE -1 - -/* NRST pin states */ -#define STLINK_DEBUG_APIV2_DRIVE_NRST_LOW 0x00 -#define STLINK_DEBUG_APIV2_DRIVE_NRST_HIGH 0x01 - -/* Baud rate divisors for SWDCLK */ -#define STLINK_SWDCLK_4MHZ_DIVISOR 0 -#define STLINK_SWDCLK_1P8MHZ_DIVISOR 1 -#define STLINK_SWDCLK_1P2MHZ_DIVISOR 2 -#define STLINK_SWDCLK_950KHZ_DIVISOR 3 -#define STLINK_SWDCLK_480KHZ_DIVISOR 7 -#define STLINK_SWDCLK_240KHZ_DIVISOR 15 -#define STLINK_SWDCLK_125KHZ_DIVISOR 31 -#define STLINK_SWDCLK_100KHZ_DIVISOR 40 -#define STLINK_SWDCLK_50KHZ_DIVISOR 79 -#define STLINK_SWDCLK_25KHZ_DIVISOR 158 -#define STLINK_SWDCLK_15KHZ_DIVISOR 265 -#define STLINK_SWDCLK_5KHZ_DIVISOR 798 - -#define STLINK_SERIAL_LENGTH 24 -#define STLINK_SERIAL_BUFFER_SIZE (STLINK_SERIAL_LENGTH + 1) - -#define STLINK_V3_MAX_FREQ_NB 10 - -#define STLINK_TRACE_BUF_LEN 2048 -#define STLINK_V2_MAX_TRACE_FREQUENCY 2000000 -#define STLINK_V3_MAX_TRACE_FREQUENCY 24000000 -#define STLINK_DEFAULT_TRACE_FREQUENCY 2000000 - -/* Map the relevant features, quirks and workaround for specific firmware version of stlink */ -#define STLINK_F_HAS_TRACE (1 << 0) -#define STLINK_F_HAS_SWD_SET_FREQ (1 << 1) -#define STLINK_F_HAS_JTAG_SET_FREQ (1 << 2) -#define STLINK_F_HAS_MEM_16BIT (1 << 3) -#define STLINK_F_HAS_GETLASTRWSTATUS2 (1 << 4) -#define STLINK_F_HAS_DAP_REG (1 << 5) -#define STLINK_F_QUIRK_JTAG_DP_READ (1 << 6) -#define STLINK_F_HAS_AP_INIT (1 << 7) -#define STLINK_F_HAS_DPBANKSEL (1 << 8) -#define STLINK_F_HAS_RW8_512BYTES (1 << 9) - -/* Additional MCU features */ -#define CHIP_F_HAS_DUAL_BANK (1 << 0) -#define CHIP_F_HAS_SWO_TRACING (1 << 1) - -/* Error code */ -#define STLINK_DEBUG_ERR_OK 0x80 -#define STLINK_DEBUG_ERR_FAULT 0x81 -#define STLINK_DEBUG_ERR_WRITE 0x0c -#define STLINK_DEBUG_ERR_WRITE_VERIFY 0x0d -#define STLINK_DEBUG_ERR_AP_WAIT 0x10 -#define STLINK_DEBUG_ERR_AP_FAULT 0x11 -#define STLINK_DEBUG_ERR_AP_ERROR 0x12 -#define STLINK_DEBUG_ERR_DP_WAIT 0x14 -#define STLINK_DEBUG_ERR_DP_FAULT 0x15 -#define STLINK_DEBUG_ERR_DP_ERROR 0x16 - -#define CMD_CHECK_NO 0 -#define CMD_CHECK_REP_LEN 1 -#define CMD_CHECK_STATUS 2 -#define CMD_CHECK_RETRY 3 /* check status and retry if wait error */ - -#define C_BUF_LEN 32 - -struct stlink_reg { - uint32_t r[16]; - uint32_t s[32]; - uint32_t xpsr; - uint32_t main_sp; - uint32_t process_sp; - uint32_t rw; - uint32_t rw2; - uint8_t control; - uint8_t faultmask; - uint8_t basepri; - uint8_t primask; - uint32_t fpscr; -}; - -typedef uint32_t stm32_addr_t; - -typedef struct flash_loader { - stm32_addr_t loader_addr; // loader sram addr - stm32_addr_t buf_addr; // buffer sram address - uint32_t rcc_dma_bkp; // backup RCC DMA enable state - uint32_t iwdg_kr; // IWDG key register address -} flash_loader_t; - -typedef struct _cortex_m3_cpuid_ { - uint16_t implementer_id; - uint16_t variant; - uint16_t part; - uint8_t revision; -} cortex_m3_cpuid_t; - -enum stlink_jtag_api_version { - STLINK_JTAG_API_V1 = 1, - STLINK_JTAG_API_V2, - STLINK_JTAG_API_V3, -}; - -typedef struct stlink_version_ { - uint32_t stlink_v; - uint32_t jtag_v; - uint32_t swim_v; - uint32_t st_vid; - uint32_t stlink_pid; - // jtag api version supported - enum stlink_jtag_api_version jtag_api; - // one bit for each feature supported. See macros STLINK_F_* - uint32_t flags; -} stlink_version_t; - -enum transport_type { - TRANSPORT_TYPE_ZERO = 0, - TRANSPORT_TYPE_LIBSG, - TRANSPORT_TYPE_LIBUSB, - TRANSPORT_TYPE_INVALID -}; - -enum connect_type { - CONNECT_HOT_PLUG = 0, - CONNECT_NORMAL = 1, - CONNECT_UNDER_RESET = 2, -}; - -enum reset_type { - RESET_AUTO = 0, - RESET_HARD = 1, - RESET_SOFT = 2, - RESET_SOFT_AND_HALT = 3, -}; - -enum run_type { - RUN_NORMAL = 0, - RUN_FLASH_LOADER = 1, -}; - - -typedef struct _stlink stlink_t; - -#include -#include - -struct _stlink { - struct _stlink_backend *backend; - void *backend_data; - - // room for the command header - unsigned char c_buf[C_BUF_LEN]; - // data transferred from or to device - unsigned char q_buf[Q_BUF_LEN]; - int q_len; - - // transport layer verboseness: 0 for no debug info, 10 for lots - int verbose; - int opt; - uint32_t core_id; // set by stlink_core_id(), result from STLINK_DEBUGREADCOREID - uint32_t chip_id; // set by stlink_load_device_params(), used to identify flash and sram - enum target_state core_stat; // set by stlink_status() - - char serial[STLINK_SERIAL_BUFFER_SIZE]; - int freq; // set by stlink_open_usb(), values: STLINK_SWDCLK_xxx_DIVISOR - - enum stm32_flash_type flash_type; - // stlink_chipid_params.flash_type, set by stlink_load_device_params(), values: STM32_FLASH_TYPE_xx - - stm32_addr_t flash_base; // STM32_FLASH_BASE, set by stlink_load_device_params() - size_t flash_size; // calculated by stlink_load_device_params() - size_t flash_pgsz; // stlink_chipid_params.flash_pagesize, set by stlink_load_device_params() - - /* sram settings */ - stm32_addr_t sram_base; // STM32_SRAM_BASE, set by stlink_load_device_params() - size_t sram_size; // stlink_chipid_params.sram_size, set by stlink_load_device_params() - - /* option settings */ - stm32_addr_t option_base; - size_t option_size; - - // bootloader - // sys_base and sys_size are not used by the tools, but are only there to download the bootloader code - // (see tests/sg.c) - stm32_addr_t sys_base; // stlink_chipid_params.bootrom_base, set by stlink_load_device_params() - size_t sys_size; // stlink_chipid_params.bootrom_size, set by stlink_load_device_params() - - struct stlink_version_ version; - - uint32_t chip_flags; // stlink_chipid_params.flags, set by stlink_load_device_params(), values: CHIP_F_xxx - - uint32_t max_trace_freq; // set by stlink_open_usb() -}; - -int stlink_enter_swd_mode(stlink_t *sl); -int stlink_enter_jtag_mode(stlink_t *sl); -int stlink_exit_debug_mode(stlink_t *sl); -int stlink_exit_dfu_mode(stlink_t *sl); -void stlink_close(stlink_t *sl); -int stlink_core_id(stlink_t *sl); -int stlink_reset(stlink_t *sl, enum reset_type type); -int stlink_run(stlink_t *sl, enum run_type type); -int stlink_status(stlink_t *sl); -int stlink_version(stlink_t *sl); -int stlink_read_debug32(stlink_t *sl, uint32_t addr, uint32_t *data); -int stlink_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len); -int stlink_write_debug32(stlink_t *sl, uint32_t addr, uint32_t data); -int stlink_write_mem32(stlink_t *sl, uint32_t addr, uint16_t len); -int stlink_write_mem8(stlink_t *sl, uint32_t addr, uint16_t len); -int stlink_read_all_regs(stlink_t *sl, struct stlink_reg *regp); -int stlink_read_all_unsupported_regs(stlink_t *sl, struct stlink_reg *regp); -int stlink_read_reg(stlink_t *sl, int r_idx, struct stlink_reg *regp); -int stlink_read_unsupported_reg(stlink_t *sl, int r_idx, struct stlink_reg *regp); -int stlink_write_unsupported_reg(stlink_t *sl, uint32_t value, int r_idx, struct stlink_reg *regp); -int stlink_write_reg(stlink_t *sl, uint32_t reg, int idx); -int stlink_step(stlink_t *sl); -int stlink_current_mode(stlink_t *sl); -int stlink_force_debug(stlink_t *sl); -int stlink_target_voltage(stlink_t *sl); -int stlink_set_swdclk(stlink_t *sl, int freq_khz); -int stlink_trace_enable(stlink_t* sl, uint32_t frequency); -int stlink_trace_disable(stlink_t* sl); -int stlink_trace_read(stlink_t* sl, uint8_t* buf, size_t size); -int stlink_erase_flash_mass(stlink_t* sl); -int stlink_erase_flash_section(stlink_t *sl, stm32_addr_t base_addr, size_t size, bool align_size); -int stlink_write_flash(stlink_t* sl, stm32_addr_t address, uint8_t* data, uint32_t length, uint8_t eraseonly); -int stlink_parse_ihex(const char* path, uint8_t erased_pattern, uint8_t * * mem, size_t * size, uint32_t * begin); -uint8_t stlink_get_erased_pattern(stlink_t *sl); -int stlink_mwrite_flash(stlink_t *sl, uint8_t* data, uint32_t length, stm32_addr_t addr); -int stlink_fwrite_flash(stlink_t *sl, const char* path, stm32_addr_t addr); -int stlink_mwrite_sram(stlink_t *sl, uint8_t* data, uint32_t length, stm32_addr_t addr); -int stlink_fwrite_sram(stlink_t *sl, const char* path, stm32_addr_t addr); -int stlink_verify_write_flash(stlink_t *sl, stm32_addr_t address, uint8_t *data, uint32_t length); - -//int stlink_chip_id(stlink_t *sl, uint32_t *chip_id); -int stlink_cpu_id(stlink_t *sl, cortex_m3_cpuid_t *cpuid); - -int stlink_erase_flash_page(stlink_t* sl, stm32_addr_t flashaddr); -uint32_t stlink_calculate_pagesize(stlink_t *sl, uint32_t flashaddr); -int stlink_check_address_range_validity(stlink_t *sl, stm32_addr_t addr, size_t size); -int stlink_check_address_alignment(stlink_t *sl, stm32_addr_t addr); -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); -bool stlink_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, bool is_ihex, stm32_addr_t addr, size_t size); -int stlink_load_device_params(stlink_t *sl); - -int stlink_read_option_bytes32(stlink_t *sl, uint32_t* option_byte); -int stlink_read_option_bytes_boot_add32(stlink_t *sl, uint32_t* option_byte); -int stlink_read_option_control_register32(stlink_t *sl, uint32_t* option_byte); -int stlink_read_option_control_register1_32(stlink_t *sl, uint32_t* option_byte); - -int stlink_write_option_bytes32(stlink_t *sl, uint32_t option_byte); -int stlink_write_option_bytes_boot_add32(stlink_t *sl, uint32_t option_bytes_boot_add); -int stlink_write_option_control_register32(stlink_t *sl, uint32_t option_control_register); -int stlink_write_option_control_register1_32(stlink_t *sl, uint32_t option_control_register1); - -int stlink_write_option_bytes(stlink_t *sl, stm32_addr_t addr, uint8_t* base, uint32_t len); -int stlink_fwrite_option_bytes(stlink_t *sl, const char* path, stm32_addr_t addr); - -int stlink_flashloader_start(stlink_t *sl, flash_loader_t *fl); -int stlink_flashloader_write(stlink_t *sl, flash_loader_t *fl, stm32_addr_t addr, uint8_t* base, uint32_t len); -int stlink_flashloader_stop(stlink_t *sl, flash_loader_t *fl); - -int stlink_target_connect(stlink_t *sl, enum connect_type connect); - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -} -#endif - -#endif // STLINK_H diff --git a/third_party/stlink/inc/stlink.h b/third_party/stlink/inc/stlink.h index 17601fda..0a5c8564 100644 --- a/third_party/stlink/inc/stlink.h +++ b/third_party/stlink/inc/stlink.h @@ -1,23 +1,21 @@ - /* * File: stlink.h * - * This should contain all the common top level stlink interfaces, - * regardless of how the backend does the work.... + * All common top level stlink interfaces, regardless of how the backend does the work.... */ #ifndef STLINK_H #define STLINK_H -#include -#include #include - -#include "stm32.h" -#include "stm32flash.h" +#include +#include +#include +#include #ifdef __cplusplus -extern "C" { +extern "C" +{ #endif #define STLINK_ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) @@ -27,305 +25,283 @@ extern "C" { // #define Q_BUF_LEN 96 #define Q_BUF_LEN (1024 * 100) -/* Statuses of core */ -enum target_state { - TARGET_UNKNOWN = 0, - TARGET_RUNNING = 1, - TARGET_HALTED = 2, - TARGET_RESET = 3, - TARGET_DEBUG_RUNNING = 4, -}; + /* Statuses of core */ + enum target_state + { + TARGET_UNKNOWN = 0, + TARGET_RUNNING = 1, + TARGET_HALTED = 2, + TARGET_RESET = 3, + TARGET_DEBUG_RUNNING = 4, + }; -#define STLINK_CORE_RUNNING 0x80 -#define STLINK_CORE_HALTED 0x81 +#define STLINK_CORE_RUNNING 0x80 +#define STLINK_CORE_HALTED 0x81 /* STLINK modes */ -#define STLINK_DEV_DFU_MODE 0x00 -#define STLINK_DEV_MASS_MODE 0x01 -#define STLINK_DEV_DEBUG_MODE 0x02 -#define STLINK_DEV_UNKNOWN_MODE -1 +#define STLINK_DEV_DFU_MODE 0x00 +#define STLINK_DEV_MASS_MODE 0x01 +#define STLINK_DEV_DEBUG_MODE 0x02 +#define STLINK_DEV_UNKNOWN_MODE -1 /* NRST pin states */ #define STLINK_DEBUG_APIV2_DRIVE_NRST_LOW 0x00 #define STLINK_DEBUG_APIV2_DRIVE_NRST_HIGH 0x01 /* Baud rate divisors for SWDCLK */ -#define STLINK_SWDCLK_4MHZ_DIVISOR 0 -#define STLINK_SWDCLK_1P8MHZ_DIVISOR 1 -#define STLINK_SWDCLK_1P2MHZ_DIVISOR 2 -#define STLINK_SWDCLK_950KHZ_DIVISOR 3 -#define STLINK_SWDCLK_480KHZ_DIVISOR 7 -#define STLINK_SWDCLK_240KHZ_DIVISOR 15 -#define STLINK_SWDCLK_125KHZ_DIVISOR 31 -#define STLINK_SWDCLK_100KHZ_DIVISOR 40 -#define STLINK_SWDCLK_50KHZ_DIVISOR 79 -#define STLINK_SWDCLK_25KHZ_DIVISOR 158 -#define STLINK_SWDCLK_15KHZ_DIVISOR 265 -#define STLINK_SWDCLK_5KHZ_DIVISOR 798 - -#define STLINK_SERIAL_LENGTH 24 -#define STLINK_SERIAL_BUFFER_SIZE (STLINK_SERIAL_LENGTH + 1) - -#define STLINK_V3_MAX_FREQ_NB 10 - -#define STLINK_TRACE_BUF_LEN 2048 -#define STLINK_V2_MAX_TRACE_FREQUENCY 2000000 +#define STLINK_SWDCLK_4MHZ_DIVISOR 0 +#define STLINK_SWDCLK_1P8MHZ_DIVISOR 1 +#define STLINK_SWDCLK_1P2MHZ_DIVISOR 2 +#define STLINK_SWDCLK_950KHZ_DIVISOR 3 +#define STLINK_SWDCLK_480KHZ_DIVISOR 7 +#define STLINK_SWDCLK_240KHZ_DIVISOR 15 +#define STLINK_SWDCLK_125KHZ_DIVISOR 31 +#define STLINK_SWDCLK_100KHZ_DIVISOR 40 +#define STLINK_SWDCLK_50KHZ_DIVISOR 79 +#define STLINK_SWDCLK_25KHZ_DIVISOR 158 +#define STLINK_SWDCLK_15KHZ_DIVISOR 265 +#define STLINK_SWDCLK_5KHZ_DIVISOR 798 + +#define STLINK_SERIAL_LENGTH 24 +#define STLINK_SERIAL_BUFFER_SIZE (STLINK_SERIAL_LENGTH + 1) + +#define STLINK_V3_MAX_FREQ_NB 10 + +#define STLINK_TRACE_BUF_LEN 2048 +#define STLINK_V2_MAX_TRACE_FREQUENCY 2000000 #define STLINK_V3_MAX_TRACE_FREQUENCY 24000000 -#define STLINK_DEFAULT_TRACE_FREQUENCY 2000000 +#define STLINK_DEFAULT_TRACE_FREQUENCY 2000000 /* Map the relevant features, quirks and workaround for specific firmware version of stlink */ -#define STLINK_F_HAS_TRACE (1 << 0) -#define STLINK_F_HAS_SWD_SET_FREQ (1 << 1) -#define STLINK_F_HAS_JTAG_SET_FREQ (1 << 2) -#define STLINK_F_HAS_MEM_16BIT (1 << 3) -#define STLINK_F_HAS_GETLASTRWSTATUS2 (1 << 4) -#define STLINK_F_HAS_DAP_REG (1 << 5) -#define STLINK_F_QUIRK_JTAG_DP_READ (1 << 6) -#define STLINK_F_HAS_AP_INIT (1 << 7) -#define STLINK_F_HAS_DPBANKSEL (1 << 8) -#define STLINK_F_HAS_RW8_512BYTES (1 << 9) +#define STLINK_F_HAS_TRACE (1 << 0) +#define STLINK_F_HAS_SWD_SET_FREQ (1 << 1) +#define STLINK_F_HAS_JTAG_SET_FREQ (1 << 2) +#define STLINK_F_HAS_MEM_16BIT (1 << 3) +#define STLINK_F_HAS_GETLASTRWSTATUS2 (1 << 4) +#define STLINK_F_HAS_DAP_REG (1 << 5) +#define STLINK_F_QUIRK_JTAG_DP_READ (1 << 6) +#define STLINK_F_HAS_AP_INIT (1 << 7) +#define STLINK_F_HAS_DPBANKSEL (1 << 8) +#define STLINK_F_HAS_RW8_512BYTES (1 << 9) /* Additional MCU features */ -#define CHIP_F_HAS_DUAL_BANK (1 << 0) -#define CHIP_F_HAS_SWO_TRACING (1 << 1) +#define CHIP_F_HAS_DUAL_BANK (1 << 0) +#define CHIP_F_HAS_SWO_TRACING (1 << 1) /* Error code */ -#define STLINK_DEBUG_ERR_OK 0x80 -#define STLINK_DEBUG_ERR_FAULT 0x81 -#define STLINK_DEBUG_ERR_WRITE 0x0c -#define STLINK_DEBUG_ERR_WRITE_VERIFY 0x0d -#define STLINK_DEBUG_ERR_AP_WAIT 0x10 -#define STLINK_DEBUG_ERR_AP_FAULT 0x11 -#define STLINK_DEBUG_ERR_AP_ERROR 0x12 -#define STLINK_DEBUG_ERR_DP_WAIT 0x14 -#define STLINK_DEBUG_ERR_DP_FAULT 0x15 -#define STLINK_DEBUG_ERR_DP_ERROR 0x16 - -#define CMD_CHECK_NO 0 -#define CMD_CHECK_REP_LEN 1 -#define CMD_CHECK_STATUS 2 -#define CMD_CHECK_RETRY 3 /* check status and retry if wait error */ +#define STLINK_DEBUG_ERR_OK 0x80 +#define STLINK_DEBUG_ERR_FAULT 0x81 +#define STLINK_DEBUG_ERR_WRITE 0x0c +#define STLINK_DEBUG_ERR_WRITE_VERIFY 0x0d +#define STLINK_DEBUG_ERR_AP_WAIT 0x10 +#define STLINK_DEBUG_ERR_AP_FAULT 0x11 +#define STLINK_DEBUG_ERR_AP_ERROR 0x12 +#define STLINK_DEBUG_ERR_DP_WAIT 0x14 +#define STLINK_DEBUG_ERR_DP_FAULT 0x15 +#define STLINK_DEBUG_ERR_DP_ERROR 0x16 + +#define CMD_CHECK_NO 0 +#define CMD_CHECK_REP_LEN 1 +#define CMD_CHECK_STATUS 2 +#define CMD_CHECK_RETRY 3 /* check status and retry if wait error */ #define C_BUF_LEN 32 -struct stlink_reg { - uint32_t r[16]; - uint32_t s[32]; - uint32_t xpsr; - uint32_t main_sp; - uint32_t process_sp; - uint32_t rw; - uint32_t rw2; - uint8_t control; - uint8_t faultmask; - uint8_t basepri; - uint8_t primask; - uint32_t fpscr; -}; - -typedef uint32_t stm32_addr_t; - -typedef struct flash_loader { - stm32_addr_t loader_addr; // loader sram addr - stm32_addr_t buf_addr; // buffer sram address - uint32_t rcc_dma_bkp; // backup RCC DMA enable state - uint32_t iwdg_kr; // IWDG key register address -} flash_loader_t; - -typedef struct _cortex_m3_cpuid_ { - uint16_t implementer_id; - uint16_t variant; - uint16_t part; - uint8_t revision; -} cortex_m3_cpuid_t; - -enum stlink_jtag_api_version { - STLINK_JTAG_API_V1 = 1, - STLINK_JTAG_API_V2, - STLINK_JTAG_API_V3, -}; - -typedef struct stlink_version_ { - uint32_t stlink_v; - uint32_t jtag_v; - uint32_t swim_v; - uint32_t st_vid; - uint32_t stlink_pid; - // jtag api version supported - enum stlink_jtag_api_version jtag_api; - // one bit for each feature supported. See macros STLINK_F_* - uint32_t flags; -} stlink_version_t; - -enum transport_type { - TRANSPORT_TYPE_ZERO = 0, - TRANSPORT_TYPE_LIBSG, - TRANSPORT_TYPE_LIBUSB, - TRANSPORT_TYPE_INVALID -}; - -enum connect_type { - CONNECT_HOT_PLUG = 0, - CONNECT_NORMAL = 1, - CONNECT_UNDER_RESET = 2, -}; - -enum reset_type { - RESET_AUTO = 0, - RESET_HARD = 1, - RESET_SOFT = 2, - RESET_SOFT_AND_HALT = 3, -}; - -enum run_type { - RUN_NORMAL = 0, - RUN_FLASH_LOADER = 1, -}; - - -typedef struct _stlink stlink_t; + struct stlink_reg + { + uint32_t r[16]; + uint32_t s[32]; + uint32_t xpsr; + uint32_t main_sp; + uint32_t process_sp; + uint32_t rw; + uint32_t rw2; + uint8_t control; + uint8_t faultmask; + uint8_t basepri; + uint8_t primask; + uint32_t fpscr; + }; + + typedef uint32_t stm32_addr_t; + + typedef struct flash_loader + { + stm32_addr_t loader_addr; // loader sram addr + stm32_addr_t buf_addr; // buffer sram address + uint32_t rcc_dma_bkp; // backup RCC DMA enable state + uint32_t iwdg_kr; // IWDG key register address + } flash_loader_t; + + typedef struct _cortex_m3_cpuid_ + { + uint16_t implementer_id; + uint16_t variant; + uint16_t part; + uint8_t revision; + } cortex_m3_cpuid_t; + + enum stlink_jtag_api_version + { + STLINK_JTAG_API_V1 = 1, + STLINK_JTAG_API_V2, + STLINK_JTAG_API_V3, + }; + + typedef struct stlink_version_ + { + uint32_t stlink_v; + uint32_t jtag_v; + uint32_t swim_v; + uint32_t st_vid; + uint32_t stlink_pid; + // jtag api version supported + enum stlink_jtag_api_version jtag_api; + // one bit for each feature supported. See macros STLINK_F_* + uint32_t flags; + } stlink_version_t; + + enum transport_type + { + TRANSPORT_TYPE_ZERO = 0, + TRANSPORT_TYPE_LIBSG, + TRANSPORT_TYPE_LIBUSB, + TRANSPORT_TYPE_INVALID + }; + + enum connect_type + { + CONNECT_HOT_PLUG = 0, + CONNECT_NORMAL = 1, + CONNECT_UNDER_RESET = 2, + }; + + enum reset_type + { + RESET_AUTO = 0, + RESET_HARD = 1, + RESET_SOFT = 2, + RESET_SOFT_AND_HALT = 3, + }; + + enum run_type + { + RUN_NORMAL = 0, + RUN_FLASH_LOADER = 1, + }; + + typedef struct _stlink stlink_t; -#include #include +#include + + struct _stlink + { + struct _stlink_backend* backend; + void* backend_data; + + // room for the command header + unsigned char c_buf[C_BUF_LEN]; + // data transferred from or to device + unsigned char q_buf[Q_BUF_LEN]; + int32_t q_len; + + // transport layer verboseness: 0 for no debug info, 10 for lots + int32_t verbose; + int32_t opt; + uint32_t core_id; // set by stlink_core_id(), result from STLINK_DEBUGREADCOREID + uint32_t chip_id; // set by stlink_load_device_params(), used to identify flash and sram + enum target_state core_stat; // set by stlink_status() + + char serial[STLINK_SERIAL_BUFFER_SIZE]; + int32_t freq; // set by stlink_open_usb(), values: STLINK_SWDCLK_xxx_DIVISOR + + enum stm32_flash_type flash_type; + // stlink_chipid_params.flash_type, set by stlink_load_device_params(), values: STM32_FLASH_TYPE_xx + + stm32_addr_t flash_base; // STM32_FLASH_BASE, set by stlink_load_device_params() + uint32_t flash_size; // calculated by stlink_load_device_params() + uint32_t flash_pgsz; // stlink_chipid_params.flash_pagesize, set by stlink_load_device_params() + + /* sram settings */ + stm32_addr_t sram_base; // STM32_SRAM_BASE, set by stlink_load_device_params() + uint32_t sram_size; // stlink_chipid_params.sram_size, set by stlink_load_device_params() + + /* option settings */ + stm32_addr_t option_base; + uint32_t option_size; + + // bootloader + // sys_base and sys_size are not used by the tools, but are only there to download the bootloader code + // (see tests/sg.c) + stm32_addr_t sys_base; // stlink_chipid_params.bootrom_base, set by stlink_load_device_params() + uint32_t sys_size; // stlink_chipid_params.bootrom_size, set by stlink_load_device_params() + + struct stlink_version_ version; + + uint32_t chip_flags; // stlink_chipid_params.flags, set by stlink_load_device_params(), values: CHIP_F_xxx + + uint32_t max_trace_freq; // set by stlink_open_usb() + }; + + /* Functions defined in common.c */ + + int32_t stlink_enter_swd_mode(stlink_t* sl); + int32_t stlink_enter_jtag_mode(stlink_t* sl); + int32_t stlink_exit_debug_mode(stlink_t* sl); + int32_t stlink_exit_dfu_mode(stlink_t* sl); + void stlink_close(stlink_t* sl); + int32_t stlink_core_id(stlink_t* sl); + int32_t stlink_reset(stlink_t* sl, enum reset_type type); + int32_t stlink_run(stlink_t* sl, enum run_type type); + int32_t stlink_status(stlink_t* sl); + int32_t stlink_version(stlink_t* sl); + int32_t stlink_read_debug32(stlink_t* sl, uint32_t addr, uint32_t* data); + int32_t stlink_read_mem32(stlink_t* sl, uint32_t addr, uint16_t len); + int32_t stlink_write_debug32(stlink_t* sl, uint32_t addr, uint32_t data); + int32_t stlink_write_mem32(stlink_t* sl, uint32_t addr, uint16_t len); + int32_t stlink_write_mem8(stlink_t* sl, uint32_t addr, uint16_t len); + int32_t stlink_read_all_regs(stlink_t* sl, struct stlink_reg* regp); + int32_t stlink_read_all_unsupported_regs(stlink_t* sl, struct stlink_reg* regp); + int32_t stlink_read_reg(stlink_t* sl, int32_t r_idx, struct stlink_reg* regp); + int32_t stlink_read_unsupported_reg(stlink_t* sl, int32_t r_idx, struct stlink_reg* regp); + int32_t stlink_write_unsupported_reg(stlink_t* sl, uint32_t value, int32_t r_idx, struct stlink_reg* regp); + int32_t stlink_write_reg(stlink_t* sl, uint32_t reg, int32_t idx); + int32_t stlink_step(stlink_t* sl); + int32_t stlink_current_mode(stlink_t* sl); + int32_t stlink_force_debug(stlink_t* sl); + int32_t stlink_target_voltage(stlink_t* sl); + int32_t stlink_set_swdclk(stlink_t* sl, int32_t freq_khz); + int32_t stlink_trace_enable(stlink_t* sl, uint32_t frequency); + int32_t stlink_trace_disable(stlink_t* sl); + int32_t stlink_trace_read(stlink_t* sl, uint8_t* buf, uint32_t size); + int32_t stlink_parse_ihex(const char* path, uint8_t erased_pattern, uint8_t** mem, uint32_t* size, uint32_t* begin); + uint8_t stlink_get_erased_pattern(stlink_t* sl); + int32_t stlink_mwrite_sram(stlink_t* sl, uint8_t* data, uint32_t length, stm32_addr_t addr); + int32_t stlink_fwrite_sram(stlink_t* sl, const char* path, stm32_addr_t addr); + // int32_t stlink_chip_id(stlink_t *sl, uint32_t *chip_id); + int32_t stlink_cpu_id(stlink_t* sl, cortex_m3_cpuid_t* cpuid); + uint32_t stlink_calculate_pagesize(stlink_t* sl, uint32_t flashaddr); + uint16_t read_uint16(const unsigned char* c, const int32_t pt); + // void stlink_core_stat(stlink_t *sl); + void stlink_print_data(stlink_t* sl); + uint32_t is_bigendian(void); + uint32_t read_uint32(const unsigned char* c, const int32_t pt); + void write_uint32(unsigned char* buf, uint32_t ui); + void write_uint16(unsigned char* buf, uint16_t ui); + bool stlink_is_core_halted(stlink_t* sl); + int32_t write_buffer_to_sram(stlink_t* sl, flash_loader_t* fl, const uint8_t* buf, uint32_t size); + int32_t write_loader_to_sram(stlink_t* sl, stm32_addr_t* addr, size_t* size); + int32_t stlink_fread(stlink_t* sl, const char* path, bool is_ihex, stm32_addr_t addr, uint32_t size); + int32_t stlink_load_device_params(stlink_t* sl); + int32_t stlink_target_connect(stlink_t* sl, enum connect_type connect); -struct _stlink { - struct _stlink_backend *backend; - void *backend_data; - - // room for the command header - unsigned char c_buf[C_BUF_LEN]; - // data transferred from or to device - unsigned char q_buf[Q_BUF_LEN]; - int q_len; - - // transport layer verboseness: 0 for no debug info, 10 for lots - int verbose; - int opt; - uint32_t core_id; // set by stlink_core_id(), result from STLINK_DEBUGREADCOREID - uint32_t chip_id; // set by stlink_load_device_params(), used to identify flash and sram - enum target_state core_stat; // set by stlink_status() - - char serial[STLINK_SERIAL_BUFFER_SIZE]; - int freq; // set by stlink_open_usb(), values: STLINK_SWDCLK_xxx_DIVISOR - - enum stm32_flash_type flash_type; - // stlink_chipid_params.flash_type, set by stlink_load_device_params(), values: STM32_FLASH_TYPE_xx - - stm32_addr_t flash_base; // STM32_FLASH_BASE, set by stlink_load_device_params() - size_t flash_size; // calculated by stlink_load_device_params() - size_t flash_pgsz; // stlink_chipid_params.flash_pagesize, set by stlink_load_device_params() - - /* sram settings */ - stm32_addr_t sram_base; // STM32_SRAM_BASE, set by stlink_load_device_params() - size_t sram_size; // stlink_chipid_params.sram_size, set by stlink_load_device_params() - - /* option settings */ - stm32_addr_t option_base; - size_t option_size; - - // bootloader - // sys_base and sys_size are not used by the tools, but are only there to download the bootloader code - // (see tests/sg.c) - stm32_addr_t sys_base; // stlink_chipid_params.bootrom_base, set by stlink_load_device_params() - size_t sys_size; // stlink_chipid_params.bootrom_size, set by stlink_load_device_params() - - struct stlink_version_ version; - - uint32_t chip_flags; // stlink_chipid_params.flags, set by stlink_load_device_params(), values: CHIP_F_xxx - - uint32_t max_trace_freq; // set by stlink_open_usb() -}; - -int stlink_enter_swd_mode(stlink_t *sl); -int stlink_enter_jtag_mode(stlink_t *sl); -int stlink_exit_debug_mode(stlink_t *sl); -int stlink_exit_dfu_mode(stlink_t *sl); -void stlink_close(stlink_t *sl); -int stlink_core_id(stlink_t *sl); -int stlink_reset(stlink_t *sl, enum reset_type type); -int stlink_run(stlink_t *sl, enum run_type type); -int stlink_status(stlink_t *sl); -int stlink_version(stlink_t *sl); -int stlink_read_debug32(stlink_t *sl, uint32_t addr, uint32_t *data); -int stlink_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len); -int stlink_write_debug32(stlink_t *sl, uint32_t addr, uint32_t data); -int stlink_write_mem32(stlink_t *sl, uint32_t addr, uint16_t len); -int stlink_write_mem8(stlink_t *sl, uint32_t addr, uint16_t len); -int stlink_read_all_regs(stlink_t *sl, struct stlink_reg *regp); -int stlink_read_all_unsupported_regs(stlink_t *sl, struct stlink_reg *regp); -int stlink_read_reg(stlink_t *sl, int r_idx, struct stlink_reg *regp); -int stlink_read_unsupported_reg(stlink_t *sl, int r_idx, struct stlink_reg *regp); -int stlink_write_unsupported_reg(stlink_t *sl, uint32_t value, int r_idx, struct stlink_reg *regp); -int stlink_write_reg(stlink_t *sl, uint32_t reg, int idx); -int stlink_step(stlink_t *sl); -int stlink_current_mode(stlink_t *sl); -int stlink_force_debug(stlink_t *sl); -int stlink_target_voltage(stlink_t *sl); -int stlink_set_swdclk(stlink_t *sl, int freq_khz); -int stlink_trace_enable(stlink_t* sl, uint32_t frequency); -int stlink_trace_disable(stlink_t* sl); -int stlink_trace_read(stlink_t* sl, uint8_t* buf, size_t size); -int stlink_erase_flash_mass(stlink_t* sl); -int stlink_erase_flash_section(stlink_t *sl, stm32_addr_t base_addr, size_t size, bool align_size); -int stlink_write_flash(stlink_t* sl, stm32_addr_t address, uint8_t* data, uint32_t length, uint8_t eraseonly); -int stlink_parse_ihex(const char* path, uint8_t erased_pattern, uint8_t * * mem, size_t * size, uint32_t * begin); -uint8_t stlink_get_erased_pattern(stlink_t *sl); -int stlink_mwrite_flash(stlink_t *sl, uint8_t* data, uint32_t length, stm32_addr_t addr); -int stlink_fwrite_flash(stlink_t *sl, const char* path, stm32_addr_t addr); -int stlink_mwrite_sram(stlink_t *sl, uint8_t* data, uint32_t length, stm32_addr_t addr); -int stlink_fwrite_sram(stlink_t *sl, const char* path, stm32_addr_t addr); -int stlink_verify_write_flash(stlink_t *sl, stm32_addr_t address, uint8_t *data, uint32_t length); - -//int stlink_chip_id(stlink_t *sl, uint32_t *chip_id); -int stlink_cpu_id(stlink_t *sl, cortex_m3_cpuid_t *cpuid); - -int stlink_erase_flash_page(stlink_t* sl, stm32_addr_t flashaddr); -uint32_t stlink_calculate_pagesize(stlink_t *sl, uint32_t flashaddr); -int stlink_check_address_range_validity(stlink_t *sl, stm32_addr_t addr, size_t size); -int stlink_check_address_alignment(stlink_t *sl, stm32_addr_t addr); -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); -bool stlink_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, bool is_ihex, stm32_addr_t addr, size_t size); -int stlink_load_device_params(stlink_t *sl); - -int stlink_read_option_bytes32(stlink_t *sl, uint32_t* option_byte); -int stlink_read_option_bytes_boot_add32(stlink_t *sl, uint32_t* option_byte); -int stlink_read_option_control_register32(stlink_t *sl, uint32_t* option_byte); -int stlink_read_option_control_register1_32(stlink_t *sl, uint32_t* option_byte); - -int stlink_write_option_bytes32(stlink_t *sl, uint32_t option_byte); -int stlink_write_option_bytes_boot_add32(stlink_t *sl, uint32_t option_bytes_boot_add); -int stlink_write_option_control_register32(stlink_t *sl, uint32_t option_control_register); -int stlink_write_option_control_register1_32(stlink_t *sl, uint32_t option_control_register1); - -int stlink_write_option_bytes(stlink_t *sl, stm32_addr_t addr, uint8_t* base, uint32_t len); -int stlink_fwrite_option_bytes(stlink_t *sl, const char* path, stm32_addr_t addr); - -int stlink_flashloader_start(stlink_t *sl, flash_loader_t *fl); -int stlink_flashloader_write(stlink_t *sl, flash_loader_t *fl, stm32_addr_t addr, uint8_t* base, uint32_t len); -int stlink_flashloader_stop(stlink_t *sl, flash_loader_t *fl); - -int stlink_target_connect(stlink_t *sl, enum connect_type connect); - -#include -#include -#include -#include #include -#include +#include #include -#include #ifdef __cplusplus } #endif -#endif // STLINK_H +#endif // STLINK_H diff --git a/third_party/stlink/inc/stm32.h b/third_party/stlink/inc/stm32.h index 2d533eca..cf9a8a2a 100644 --- a/third_party/stlink/inc/stm32.h +++ b/third_party/stlink/inc/stm32.h @@ -7,11 +7,13 @@ #ifndef STM32_H #define STM32_H +#include + /* STM32 Cortex-M core ids (CPUTAPID) */ enum stm32_core_id { STM32_CORE_ID_M0_SWD = 0x0bb11477, // (RM0091 Section 32.5.3) F0 SW-DP - // (RM0444 Section 40.5.3) G0 SW-DP - STM32_CORE_ID_M0P_SWD = 0x0bc11477, // (RM0385 Section 27.5.3) L0 SW-DP + STM32_CORE_ID_M0P_SWD = 0x0bc11477, // (RM0444 Section 40.5.3) G0 SW-DP + // (RM0377 Section 27.5.3) L0 SW-DP STM32_CORE_ID_M3_r1p1_SWD = 0x1ba01477, // (RM0008 Section 31.8.3) F1 SW-DP STM32_CORE_ID_M3_r1p1_JTAG = 0x3ba00477, // (RM0008 Section 31.6.3) F1 JTAG STM32_CORE_ID_M3_r2p0_SWD = 0x2ba01477, // (RM0033 Section 32.8.3) F2 SW-DP @@ -29,9 +31,15 @@ enum stm32_core_id { STM32_CORE_ID_M4F_r0p1_JTAG = 0x4ba00477, // (RM0090 Section 38.6.3) F4 JTAG // (RM0090 Section 47.6.3) G4 JTAG STM32_CORE_ID_M7F_SWD = 0x5ba02477, // (RM0385 Section 40.8.3) F7 SW-DP + // (RM0473 Section 33.4.4) WB SW-DP + // (RM0453 Section 38.4.1) WL SW-DP STM32_CORE_ID_M7F_JTAG = 0x5ba00477, // (RM0385 Section 40.6.3) F7 JTAG - STM32_CORE_ID_M7F_H7_SWD = 0x6ba02477, // (RM0433 Section 60.4.1) H7 SW-DP - STM32_CORE_ID_M7F_H7_JTAG = 0x6ba00477, // (RM0433 Section 60.4.1) H7 JTAG + STM32_CORE_ID_M7F_M33_SWD = 0x6ba02477, // (RM0481 Section 58.3.3) H5 SW-DP + // (RM0433 Section 60.4.1) H7 SW-DP + STM32_CORE_ID_M7F_M33_JTAG = 0x6ba00477, // (RM0481 Section 58.3.1) H5 JTAG + // (RM0433 Section 60.4.1) H7 JTAG + // (RM0473 Section 33.4.1) WB JTAG + // (RM0453 Section 38.3.8) WL JTAG STM32_CORE_ID_M33_SWD = 0x0be02477, // (RM0438 Section 52.2.10) L5 SW-DP // (RM0456 Section 65.3.3) U5 SW-DP STM32_CORE_ID_M33_JTAGD = 0x0be01477, // (RM0438 Section 52.2.10) L5 JTAG-DP @@ -51,8 +59,8 @@ enum stm32_flash_type { STM32_FLASH_TYPE_G4 = 6, STM32_FLASH_TYPE_H7 = 7, STM32_FLASH_TYPE_L0_L1 = 8, - STM32_FLASH_TYPE_L4_L4P = 9, - STM32_FLASH_TYPE_L5_U5 = 10, + STM32_FLASH_TYPE_L4 = 9, + STM32_FLASH_TYPE_L5_U5_H5 = 10, STM32_FLASH_TYPE_WB_WL = 11, }; @@ -70,7 +78,7 @@ enum stm32_chipids { STM32_CHIPID_F1_HD = 0x414, /* high density */ STM32_CHIPID_L4 = 0x415, STM32_CHIPID_L1_MD = 0x416, /* medium density */ - STM32_CHIPID_L0 = 0x417, + STM32_CHIPID_L0_CAT3 = 0x417, STM32_CHIPID_F1_CONN = 0x418, /* connectivity line */ STM32_CHIPID_F4_HD = 0x419, /* high density */ STM32_CHIPID_F1_VL_MD_LD = 0x420, /* value line medium & low density */ @@ -104,22 +112,25 @@ enum stm32_chipids { STM32_CHIPID_F76xxx = 0x451, STM32_CHIPID_F72xxx = 0x452, /* Nucleo F722ZE board */ STM32_CHIPID_G0_CAT4 = 0x456, /* G051/G061 */ - STM32_CHIPID_L011 = 0x457, + STM32_CHIPID_L0_CAT1 = 0x457, STM32_CHIPID_F410 = 0x458, - STM32_CHIPID_G0_CAT2 = 0x460, /* G070/G071/G081 */ + STM32_CHIPID_G0_CAT2 = 0x460, /* G07x/G08x */ STM32_CHIPID_L496x_L4A6x = 0x461, STM32_CHIPID_L45x_L46x = 0x462, STM32_CHIPID_F413 = 0x463, STM32_CHIPID_L41x_L42x = 0x464, - STM32_CHIPID_G0_CAT1 = 0x466, /* G030/G031/G041 */ - STM32_CHIPID_G0_CAT3 = 0x467, /* G0B1/G0C1 */ + STM32_CHIPID_G0_CAT1 = 0x466, /* G03x/G04x */ + STM32_CHIPID_G0_CAT3 = 0x467, /* G0Bx/G0Cx */ STM32_CHIPID_G4_CAT2 = 0x468, /* RM0440, section 46.6.1 "MCU device ID code" */ STM32_CHIPID_G4_CAT3 = 0x469, STM32_CHIPID_L4Rx = 0x470, /* RM0432, p.2247, found on the STM32L4R9I-DISCO board */ STM32_CHIPID_L4PX = 0x471, /* RM0432, p.2247 */ + STM32_CHIPID_L5x2xx = 0x472, /* RM0438, p.2157 */ STM32_CHIPID_G4_CAT4 = 0x479, STM32_CHIPID_H7Ax = 0x480, /* RM0455, p.2863 */ + STM32_CHIPID_U5x5 = 0x482, /* RM0456, p.2991 */ STM32_CHIPID_H72x = 0x483, /* RM0468, p.3199 */ + STM32_CHIPID_H5xx = 0x484, /* RM0481, p.3085 */ STM32_CHIPID_WB55 = 0x495, STM32_CHIPID_WLE = 0x497, }; @@ -196,10 +207,16 @@ enum stm32_chipids { #define STM32L1_RCC_AHBENR 0x4002381C #define STM32L1_RCC_DMAEN 0x30000000 // DMA2EN | DMA1EN +#define STM32L5_RCC_AHB1ENR 0x40021048 // RM0438, p. 91,377 +#define STM32L5_RCC_DMAEN 0x00000003 // DMA2EN | DMA1EN // RM0438, p. 378 + #define STM32H7_RCC_AHB1ENR 0x58024538 #define STM32H7_RCC_DMAEN 0x00000003 // DMA2EN | DMA1EN #define STM32WB_RCC_AHB1ENR 0x58000048 #define STM32WB_RCC_DMAEN 0x00000003 // DMA2EN | DMA1EN +#define STM32L5_PWR_CR1 0x40007000 // RM0438, p. 93,324 +#define STM32L5_PWR_CR1_VOS 9 + #endif // STM32_H diff --git a/third_party/stlink/inc/stm32flash.h b/third_party/stlink/inc/stm32flash.h index 5e7ad2e4..69c6206e 100644 --- a/third_party/stlink/inc/stm32flash.h +++ b/third_party/stlink/inc/stm32flash.h @@ -1,8 +1,10 @@ #ifndef STM32FLASH_H #define STM32FLASH_H -/* stm32f FPEC flash controller interface, pm0063 manual */ -// STM32F05x is identical, based on RM0091 (DM00031936, Doc ID 018940 Rev 2, August 2012) +#include + +/* STM32Fx FPEC flash controller interface, PM0063 manual */ +// STM32F05x is identical, based on RM0091 (DM00031936, Doc ID 018940 Rev.2, Aug 2012) #define FLASH_REGS_ADDR 0x40022000 #define FLASH_REGS_SIZE 0x28 @@ -15,32 +17,19 @@ #define FLASH_OBR (FLASH_REGS_ADDR + 0x1c) #define FLASH_WRPR (FLASH_REGS_ADDR + 0x20) -// STM32F10x_XL has two flash memory banks with separate registers to control -// the second bank. +// STM32F10x_XL has two flash memory banks +// with separate registers to control the second bank. #define FLASH_KEYR2 (FLASH_REGS_ADDR + 0x44) #define FLASH_SR2 (FLASH_REGS_ADDR + 0x4c) #define FLASH_CR2 (FLASH_REGS_ADDR + 0x50) #define FLASH_AR2 (FLASH_REGS_ADDR + 0x54) -// For STM32F05x, the RDPTR_KEY may be wrong, but as it is not used anywhere... #define FLASH_RDPTR_KEY 0x00a5 #define FLASH_KEY1 0x45670123 #define FLASH_KEY2 0xcdef89ab -#define FLASH_L0_PRGKEY1 0x8c9daebf -#define FLASH_L0_PRGKEY2 0x13141516 - -#define FLASH_L0_PEKEY1 0x89abcdef -#define FLASH_L0_PEKEY2 0x02030405 - -#define FLASH_OPTKEY1 0x08192A3B -#define FLASH_OPTKEY2 0x4C5D6E7F - -#define FLASH_F0_OPTKEY1 0x45670123 -#define FLASH_F0_OPTKEY2 0xCDEF89AB - -#define FLASH_L0_OPTKEY1 0xFBEAD9C8 -#define FLASH_L0_OPTKEY2 0x24252627 +#define FLASH_OPTKEY1 0x08192a3b +#define FLASH_OPTKEY2 0x4c5d6e7f #define FLASH_SR_BSY 0 #define FLASH_SR_PG_ERR 2 @@ -59,170 +48,6 @@ #define FLASH_CR_OPTWRE 9 #define FLASH_CR_OBL_LAUNCH 13 -#define STM32L_FLASH_REGS_ADDR ((uint32_t)0x40023c00) -#define STM32L_FLASH_ACR (STM32L_FLASH_REGS_ADDR + 0x00) -#define STM32L_FLASH_PECR (STM32L_FLASH_REGS_ADDR + 0x04) -#define STM32L_FLASH_PDKEYR (STM32L_FLASH_REGS_ADDR + 0x08) -#define STM32L_FLASH_PEKEYR (STM32L_FLASH_REGS_ADDR + 0x0c) -#define STM32L_FLASH_PRGKEYR (STM32L_FLASH_REGS_ADDR + 0x10) -#define STM32L_FLASH_OPTKEYR (STM32L_FLASH_REGS_ADDR + 0x14) -#define STM32L_FLASH_SR (STM32L_FLASH_REGS_ADDR + 0x18) -#define STM32L_FLASH_OBR (STM32L_FLASH_REGS_ADDR + 0x1c) -#define STM32L_FLASH_WRPR (STM32L_FLASH_REGS_ADDR + 0x20) -#define FLASH_L1_FPRG 10 -#define FLASH_L1_PROG 3 - -// Flash registers common to STM32G0 and STM32G4 series. -#define STM32Gx_FLASH_REGS_ADDR ((uint32_t)0x40022000) -#define STM32Gx_FLASH_ACR (STM32Gx_FLASH_REGS_ADDR + 0x00) -#define STM32Gx_FLASH_KEYR (STM32Gx_FLASH_REGS_ADDR + 0x08) -#define STM32Gx_FLASH_OPTKEYR (STM32Gx_FLASH_REGS_ADDR + 0x0c) -#define STM32Gx_FLASH_SR (STM32Gx_FLASH_REGS_ADDR + 0x10) -#define STM32Gx_FLASH_CR (STM32Gx_FLASH_REGS_ADDR + 0x14) -#define STM32Gx_FLASH_ECCR (STM32Gx_FLASH_REGS_ADDR + 0x18) -#define STM32Gx_FLASH_OPTR (STM32Gx_FLASH_REGS_ADDR + 0x20) - -// G0 (RM0444 Table 1, sec 3.7) -// Mostly the same as G4 chips, but the notation -// varies a bit after the 'OPTR' register. -#define STM32G0_FLASH_REGS_ADDR (STM32Gx_FLASH_REGS_ADDR) -#define STM32G0_FLASH_PCROP1ASR (STM32G0_FLASH_REGS_ADDR + 0x24) -#define STM32G0_FLASH_PCROP1AER (STM32G0_FLASH_REGS_ADDR + 0x28) -#define STM32G0_FLASH_WRP1AR (STM32G0_FLASH_REGS_ADDR + 0x2C) -#define STM32G0_FLASH_WRP1BR (STM32G0_FLASH_REGS_ADDR + 0x30) -#define STM32G0_FLASH_PCROP1BSR (STM32G0_FLASH_REGS_ADDR + 0x34) -#define STM32G0_FLASH_PCROP1BER (STM32G0_FLASH_REGS_ADDR + 0x38) -#define STM32G0_FLASH_SECR (STM32G0_FLASH_REGS_ADDR + 0x80) - -// G4 (RM0440 Table 17, sec 3.7.19) -// Mostly the same as STM32G0 chips, but there are a few extra -// registers because 'cat 3' devices can have two Flash banks. -#define STM32G4_FLASH_REGS_ADDR (STM32Gx_FLASH_REGS_ADDR) -#define STM32G4_FLASH_PDKEYR (STM32G4_FLASH_REGS_ADDR + 0x04) -#define STM32G4_FLASH_PCROP1SR (STM32G4_FLASH_REGS_ADDR + 0x24) -#define STM32G4_FLASH_PCROP1ER (STM32G4_FLASH_REGS_ADDR + 0x28) -#define STM32G4_FLASH_WRP1AR (STM32G4_FLASH_REGS_ADDR + 0x2C) -#define STM32G4_FLASH_WRP1BR (STM32G4_FLASH_REGS_ADDR + 0x30) -#define STM32G4_FLASH_PCROP2SR (STM32G4_FLASH_REGS_ADDR + 0x44) -#define STM32G4_FLASH_PCROP2ER (STM32G4_FLASH_REGS_ADDR + 0x48) -#define STM32G4_FLASH_WRP2AR (STM32G4_FLASH_REGS_ADDR + 0x4C) -#define STM32G4_FLASH_WRP2BR (STM32G4_FLASH_REGS_ADDR + 0x50) -#define STM32G4_FLASH_SEC1R (STM32G4_FLASH_REGS_ADDR + 0x70) -#define STM32G4_FLASH_SEC2R (STM32G4_FLASH_REGS_ADDR + 0x74) - -// G0/G4 FLASH control register -#define STM32Gx_FLASH_CR_PG (0) /* Program */ -#define STM32Gx_FLASH_CR_PER (1) /* Page erase */ -#define STM32Gx_FLASH_CR_MER1 (2) /* Mass erase */ -#define STM32Gx_FLASH_CR_PNB (3) /* Page number */ -#define STM32G0_FLASH_CR_PNG_LEN (5) /* STM32G0: 5 page number bits */ -#define STM32G4_FLASH_CR_PNG_LEN (7) /* STM32G4: 7 page number bits */ -#define STM32Gx_FLASH_CR_MER2 (15) /* Mass erase (2nd bank)*/ -#define STM32Gx_FLASH_CR_STRT (16) /* Start */ -#define STM32Gx_FLASH_CR_OPTSTRT \ - (17) /* Start of modification of option bytes */ -#define STM32Gx_FLASH_CR_FSTPG (18) /* Fast programming */ -#define STM32Gx_FLASH_CR_EOPIE (24) /* End of operation interrupt enable */ -#define STM32Gx_FLASH_CR_ERRIE (25) /* Error interrupt enable */ -#define STM32Gx_FLASH_CR_OBL_LAUNCH (27) /* Forces the option byte loading */ -#define STM32Gx_FLASH_CR_OPTLOCK (30) /* Options Lock */ -#define STM32Gx_FLASH_CR_LOCK (31) /* FLASH_CR Lock */ - -// G0/G4 FLASH status register -#define STM32Gx_FLASH_SR_ERROR_MASK (0x3fa) -#define STM32Gx_FLASH_SR_PROGERR (3) -#define STM32Gx_FLASH_SR_WRPERR (4) -#define STM32Gx_FLASH_SR_PGAERR (5) -#define STM32Gx_FLASH_SR_BSY (16) /* FLASH_SR Busy */ -#define STM32Gx_FLASH_SR_EOP (0) /* FLASH_EOP End of Operation */ - -// G4 FLASH option register -#define STM32G4_FLASH_OPTR_DBANK (22) /* FLASH_OPTR Dual Bank Mode */ - -// WB (RM0434) -#define STM32WB_FLASH_REGS_ADDR ((uint32_t)0x58004000) -#define STM32WB_FLASH_ACR (STM32WB_FLASH_REGS_ADDR + 0x00) -#define STM32WB_FLASH_KEYR (STM32WB_FLASH_REGS_ADDR + 0x08) -#define STM32WB_FLASH_OPT_KEYR (STM32WB_FLASH_REGS_ADDR + 0x0C) -#define STM32WB_FLASH_SR (STM32WB_FLASH_REGS_ADDR + 0x10) -#define STM32WB_FLASH_CR (STM32WB_FLASH_REGS_ADDR + 0x14) -#define STM32WB_FLASH_ECCR (STM32WB_FLASH_REGS_ADDR + 0x18) -#define STM32WB_FLASH_OPTR (STM32WB_FLASH_REGS_ADDR + 0x20) -#define STM32WB_FLASH_PCROP1ASR (STM32WB_FLASH_REGS_ADDR + 0x24) -#define STM32WB_FLASH_PCROP1AER (STM32WB_FLASH_REGS_ADDR + 0x28) -#define STM32WB_FLASH_WRP1AR (STM32WB_FLASH_REGS_ADDR + 0x2C) -#define STM32WB_FLASH_WRP1BR (STM32WB_FLASH_REGS_ADDR + 0x30) -#define STM32WB_FLASH_PCROP1BSR (STM32WB_FLASH_REGS_ADDR + 0x34) -#define STM32WB_FLASH_PCROP1BER (STM32WB_FLASH_REGS_ADDR + 0x38) -#define STM32WB_FLASH_IPCCBR (STM32WB_FLASH_REGS_ADDR + 0x3C) -#define STM32WB_FLASH_C2ACR (STM32WB_FLASH_REGS_ADDR + 0x5C) -#define STM32WB_FLASH_C2SR (STM32WB_FLASH_REGS_ADDR + 0x60) -#define STM32WB_FLASH_C2CR (STM32WB_FLASH_REGS_ADDR + 0x64) -#define STM32WB_FLASH_SFR (STM32WB_FLASH_REGS_ADDR + 0x80) -#define STM32WB_FLASH_SRRVR (STM32WB_FLASH_REGS_ADDR + 0x84) - -// WB Flash control register. -#define STM32WB_FLASH_CR_STRT (16) /* Start */ -#define STM32WB_FLASH_CR_OPTSTRT (17) /* Start writing option bytes */ -#define STM32WB_FLASH_CR_OBL_LAUNCH (27) /* Forces the option byte loading */ -#define STM32WB_FLASH_CR_OPTLOCK (30) /* Option Lock */ -#define STM32WB_FLASH_CR_LOCK (31) /* Lock */ -// WB Flash status register. -#define STM32WB_FLASH_SR_ERROR_MASK (0x3f8) /* SR [9:3] */ -#define STM32WB_FLASH_SR_PROGERR (3) /* Programming alignment error */ -#define STM32WB_FLASH_SR_WRPERR (4) /* Write protection error */ -#define STM32WB_FLASH_SR_PGAERR (5) /* Programming error */ -#define STM32WB_FLASH_SR_BSY (16) /* Busy */ - -// 32L4 register base is at FLASH_REGS_ADDR (0x40022000) -#define STM32L4_FLASH_KEYR (FLASH_REGS_ADDR + 0x08) -#define STM32L4_FLASH_OPTKEYR (FLASH_REGS_ADDR + 0x0C) -#define STM32L4_FLASH_SR (FLASH_REGS_ADDR + 0x10) -#define STM32L4_FLASH_CR (FLASH_REGS_ADDR + 0x14) -#define STM32L4_FLASH_OPTR (FLASH_REGS_ADDR + 0x20) - -#define STM32L4_FLASH_SR_ERROR_MASK 0x3f8 /* SR [9:3] */ -#define STM32L4_FLASH_SR_PROGERR 3 -#define STM32L4_FLASH_SR_WRPERR 4 -#define STM32L4_FLASH_SR_PGAERR 5 -#define STM32L4_FLASH_SR_BSY 16 - -#define STM32L4_FLASH_CR_LOCK 31 /* Lock control register */ -#define STM32L4_FLASH_CR_OPTLOCK 30 /* Lock option bytes */ -#define STM32L4_FLASH_CR_PG 0 /* Program */ -#define STM32L4_FLASH_CR_PER 1 /* Page erase */ -#define STM32L4_FLASH_CR_MER1 2 /* Bank 1 erase */ -#define STM32L4_FLASH_CR_MER2 15 /* Bank 2 erase */ -#define STM32L4_FLASH_CR_STRT 16 /* Start command */ -#define STM32L4_FLASH_CR_OPTSTRT 17 /* Start writing option bytes */ -#define STM32L4_FLASH_CR_BKER 11 /* Bank select for page erase */ -#define STM32L4_FLASH_CR_PNB 3 /* Page number (8 bits) */ -#define STM32L4_FLASH_CR_OBL_LAUNCH 27 /* Option bytes reload */ -// Bits requesting flash operations (useful when we want to clear them) -#define STM32L4_FLASH_CR_OPBITS \ - (uint32_t)((1lu << STM32L4_FLASH_CR_PG) | (1lu << STM32L4_FLASH_CR_PER) | \ - (1lu << STM32L4_FLASH_CR_MER1) | (1lu << STM32L4_FLASH_CR_MER1)) -// Page is fully specified by BKER and PNB -#define STM32L4_FLASH_CR_PAGEMASK (uint32_t)(0x1fflu << STM32L4_FLASH_CR_PNB) - -#define STM32L4_FLASH_OPTR_DUALBANK 21 - -// STM32L0x flash register base and offsets RM0090 - DM00031020.pdf -#define STM32L0_FLASH_REGS_ADDR ((uint32_t)0x40022000) - -#define STM32L0_FLASH_PELOCK (0) -#define STM32L0_FLASH_OPTLOCK (2) -#define STM32L0_FLASH_OBL_LAUNCH (18) - -#define STM32L0_FLASH_SR_ERROR_MASK 0x00013F00 -#define STM32L0_FLASH_SR_WRPERR 8 -#define STM32L0_FLASH_SR_PGAERR 9 -#define STM32L0_FLASH_SR_NOTZEROERR 16 - -#define STM32L1_FLASH_SR_ERROR_MASK 0x00003F00 -#define STM32L1_FLASH_SR_WRPERR 8 -#define STM32L1_FLASH_SR_PGAERR 9 - #define FLASH_ACR_OFF ((uint32_t)0x00) #define FLASH_PECR_OFF ((uint32_t)0x04) #define FLASH_PDKEYR_OFF ((uint32_t)0x08) @@ -233,7 +58,55 @@ #define FLASH_OBR_OFF ((uint32_t)0x1c) #define FLASH_WRPR_OFF ((uint32_t)0x20) -// STM32F7 +// == STM32F0 == +#define FLASH_F0_OPTKEY1 0x45670123 +#define FLASH_F0_OPTKEY2 0xcdef89ab + +// == STM32F2 == +#define FLASH_F2_REGS_ADDR ((uint32_t)0x40023c00) +#define FLASH_F2_KEYR (FLASH_F2_REGS_ADDR + 0x04) +#define FLASH_F2_OPT_KEYR (FLASH_F2_REGS_ADDR + 0x08) +#define FLASH_F2_SR (FLASH_F2_REGS_ADDR + 0x0c) +#define FLASH_F2_CR (FLASH_F2_REGS_ADDR + 0x10) +#define FLASH_F2_OPT_CR (FLASH_F2_REGS_ADDR + 0x14) +#define FLASH_F2_OPT_LOCK_BIT (1u << 0) + +// F2 Flash control register +#define FLASH_F2_CR_STRT 16 +#define FLASH_F2_CR_LOCK 31 +#define FLASH_F2_CR_SER 1 +#define FLASH_F2_CR_SNB 3 +#define FLASH_F2_CR_SNB_MASK 0x78 + +// F2 Flash status register +#define FLASH_F2_SR_BSY 16 + +// == STM32F4 == +// F4 Flash registers +#define FLASH_F4_REGS_ADDR ((uint32_t)0x40023c00) +#define FLASH_F4_KEYR (FLASH_F4_REGS_ADDR + 0x04) +#define FLASH_F4_OPT_KEYR (FLASH_F4_REGS_ADDR + 0x08) +#define FLASH_F4_SR (FLASH_F4_REGS_ADDR + 0x0c) +#define FLASH_F4_CR (FLASH_F4_REGS_ADDR + 0x10) +#define FLASH_F4_OPTCR (FLASH_F4_REGS_ADDR + 0x14) +#define FLASH_F4_OPTCR_LOCK 0 +#define FLASH_F4_OPTCR_START 1 + +// F4 Flash control register +#define FLASH_F4_CR_STRT 16 +#define FLASH_F4_CR_LOCK 31 +#define FLASH_F4_CR_SER 1 +#define FLASH_F4_CR_SNB 3 +#define FLASH_F4_CR_SNB_MASK 0xf8 + +// F4 Flash status register +#define FLASH_F4_SR_ERROR_MASK 0x000000F0 +#define FLASH_F4_SR_PGAERR 5 +#define FLASH_F4_SR_WRPERR 4 +#define FLASH_F4_SR_BSY 16 + +// == STM32F7 == +// F7 Flash registers #define FLASH_F7_REGS_ADDR ((uint32_t)0x40023c00) #define FLASH_F7_KEYR (FLASH_F7_REGS_ADDR + 0x04) #define FLASH_F7_OPT_KEYR (FLASH_F7_REGS_ADDR + 0x08) @@ -243,11 +116,17 @@ #define FLASH_F7_OPTCR1 (FLASH_F7_REGS_ADDR + 0x18) #define FLASH_F7_OPTCR_LOCK 0 #define FLASH_F7_OPTCR_START 1 +#define FLASH_F7_OPTCR1_BOOT_ADD0 0 +#define FLASH_F7_OPTCR1_BOOT_ADD1 16 + +// F7 Flash control register #define FLASH_F7_CR_STRT 16 #define FLASH_F7_CR_LOCK 31 #define FLASH_F7_CR_SER 1 #define FLASH_F7_CR_SNB 3 #define FLASH_F7_CR_SNB_MASK 0xf8 + +// F7 Flash status register #define FLASH_F7_SR_BSY 16 #define FLASH_F7_SR_ERS_ERR 7 /* Erase Sequence Error */ #define FLASH_F7_SR_PGP_ERR 6 /* Programming parallelism error */ @@ -255,50 +134,106 @@ #define FLASH_F7_SR_WRP_ERR 4 /* Write protection error */ #define FLASH_F7_SR_OP_ERR 1 /* Operation error */ #define FLASH_F7_SR_EOP 0 /* End of operation */ -#define FLASH_F7_OPTCR1_BOOT_ADD0 0 -#define FLASH_F7_OPTCR1_BOOT_ADD1 16 - -#define FLASH_F7_SR_ERROR_MASK \ - ((1 << FLASH_F7_SR_ERS_ERR) | (1 << FLASH_F7_SR_PGP_ERR) | \ - (1 << FLASH_F7_SR_PGA_ERR) | (1 << FLASH_F7_SR_WRP_ERR) | \ +#define FLASH_F7_SR_ERROR_MASK \ + ((1 << FLASH_F7_SR_ERS_ERR) | (1 << FLASH_F7_SR_PGP_ERR) | \ + (1 << FLASH_F7_SR_PGA_ERR) | (1 << FLASH_F7_SR_WRP_ERR) | \ (1 << FLASH_F7_SR_OP_ERR)) -// STM32F4 -#define FLASH_F4_REGS_ADDR ((uint32_t)0x40023c00) -#define FLASH_F4_KEYR (FLASH_F4_REGS_ADDR + 0x04) -#define FLASH_F4_OPT_KEYR (FLASH_F4_REGS_ADDR + 0x08) -#define FLASH_F4_SR (FLASH_F4_REGS_ADDR + 0x0c) -#define FLASH_F4_CR (FLASH_F4_REGS_ADDR + 0x10) -#define FLASH_F4_OPTCR (FLASH_F4_REGS_ADDR + 0x14) -#define FLASH_F4_OPTCR_LOCK 0 -#define FLASH_F4_OPTCR_START 1 -#define FLASH_F4_CR_STRT 16 -#define FLASH_F4_CR_LOCK 31 -#define FLASH_F4_CR_SER 1 -#define FLASH_F4_CR_SNB 3 -#define FLASH_F4_CR_SNB_MASK 0xf8 -#define FLASH_F4_SR_ERROR_MASK 0x000000F0 -#define FLASH_F4_SR_PGAERR 5 -#define FLASH_F4_SR_WRPERR 4 -#define FLASH_F4_SR_BSY 16 +// == STM32G0/G4 == +// G0/G4 Flash registers (RM0440, p.146) +#define FLASH_Gx_REGS_ADDR ((uint32_t)0x40022000) +#define FLASH_Gx_ACR (FLASH_Gx_REGS_ADDR + 0x00) +#define FLASH_Gx_KEYR (FLASH_Gx_REGS_ADDR + 0x08) +#define FLASH_Gx_OPTKEYR (FLASH_Gx_REGS_ADDR + 0x0c) +#define FLASH_Gx_SR (FLASH_Gx_REGS_ADDR + 0x10) +#define FLASH_Gx_CR (FLASH_Gx_REGS_ADDR + 0x14) +#define FLASH_Gx_ECCR (FLASH_Gx_REGS_ADDR + 0x18) +#define FLASH_Gx_OPTR (FLASH_Gx_REGS_ADDR + 0x20) + +// G0/G4 Flash control register +#define FLASH_Gx_CR_PG (0) /* Program */ +#define FLASH_Gx_CR_PER (1) /* Page erase */ +#define FLASH_Gx_CR_MER1 (2) /* Mass erase */ +#define FLASH_Gx_CR_PNB (3) /* Page number */ +#define FLASH_G0_CR_PNG_LEN (5) /* STM32G0: 5 page number bits */ +#define FLASH_G4_CR_PNG_LEN (7) /* STM32G4: 7 page number bits */ +#define FLASH_Gx_CR_MER2 (15) /* Mass erase (2nd bank)*/ +#define FLASH_Gx_CR_STRT (16) /* Start */ +#define FLASH_Gx_CR_OPTSTRT (17) /* Start of modification of option bytes */ +#define FLASH_Gx_CR_FSTPG (18) /* Fast programming */ +#define FLASH_Gx_CR_EOPIE (24) /* End of operation interrupt enable */ +#define FLASH_Gx_CR_ERRIE (25) /* Error interrupt enable */ +#define FLASH_Gx_CR_OBL_LAUNCH (27) /* Forces the option byte loading */ +#define FLASH_Gx_CR_OPTLOCK (30) /* Options Lock */ +#define FLASH_Gx_CR_LOCK (31) /* FLASH_CR Lock */ + +// G0/G4 Flash status register +#define FLASH_Gx_SR_ERROR_MASK (0x3fa) +#define FLASH_Gx_SR_PROGERR (3) +#define FLASH_Gx_SR_WRPERR (4) +#define FLASH_Gx_SR_PGAERR (5) +#define FLASH_Gx_SR_BSY (16) /* FLASH_SR Busy */ +#define FLASH_Gx_SR_EOP (0) /* FLASH_EOP End of Operation */ + +// == STM32G0 == (RM0444 Table 1, sec. 3.7) +// Mostly the same as G4 chips, but the notation +// varies a bit after the 'OPTR' register. +#define FLASH_G0_REGS_ADDR (FLASH_Gx_REGS_ADDR) +#define FLASH_G0_PCROP1ASR (FLASH_G0_REGS_ADDR + 0x24) +#define FLASH_G0_PCROP1AER (FLASH_G0_REGS_ADDR + 0x28) +#define FLASH_G0_WRP1AR (FLASH_G0_REGS_ADDR + 0x2c) +#define FLASH_G0_WRP1BR (FLASH_G0_REGS_ADDR + 0x30) +#define FLASH_G0_PCROP1BSR (FLASH_G0_REGS_ADDR + 0x34) +#define FLASH_G0_PCROP1BER (FLASH_G0_REGS_ADDR + 0x38) +#define FLASH_G0_SECR (FLASH_G0_REGS_ADDR + 0x80) + +// == STM32G4 == (RM0440 Table 17, sec. 3.7.19) + +#define FLASH_G4_OPTR_DBANK (22) /* FLASH option register FLASH_OPTR Dual-Bank Mode */ + +// There are a few extra registers because 'cat 3' devices can have +// two Flash banks. +#define FLASH_G4_REGS_ADDR (FLASH_Gx_REGS_ADDR) +#define FLASH_G4_PDKEYR (FLASH_G4_REGS_ADDR + 0x04) +#define FLASH_G4_PCROP1SR (FLASH_G4_REGS_ADDR + 0x24) +#define FLASH_G4_PCROP1ER (FLASH_G4_REGS_ADDR + 0x28) +#define FLASH_G4_WRP1AR (FLASH_G4_REGS_ADDR + 0x2c) +#define FLASH_G4_WRP1BR (FLASH_G4_REGS_ADDR + 0x30) +#define FLASH_G4_PCROP2SR (FLASH_G4_REGS_ADDR + 0x44) +#define FLASH_G4_PCROP2ER (FLASH_G4_REGS_ADDR + 0x48) +#define FLASH_G4_WRP2AR (FLASH_G4_REGS_ADDR + 0x4c) +#define FLASH_G4_WRP2BR (FLASH_G4_REGS_ADDR + 0x50) +#define FLASH_G4_SEC1R (FLASH_G4_REGS_ADDR + 0x70) +#define FLASH_G4_SEC2R (FLASH_G4_REGS_ADDR + 0x74) + +// == STM32H7 == +// H7 Flash registers +#define FLASH_H7_REGS_ADDR ((uint32_t)0x52002000) +#define FLASH_H7_KEYR1 (FLASH_H7_REGS_ADDR + 0x04) +#define FLASH_H7_KEYR2 (FLASH_H7_REGS_ADDR + 0x104) +#define FLASH_H7_OPT_KEYR (FLASH_H7_REGS_ADDR + 0x08) +#define FLASH_H7_OPT_KEYR2 (FLASH_H7_REGS_ADDR + 0x108) +#define FLASH_H7_CR1 (FLASH_H7_REGS_ADDR + 0x0c) +#define FLASH_H7_CR2 (FLASH_H7_REGS_ADDR + 0x10c) +#define FLASH_H7_SR1 (FLASH_H7_REGS_ADDR + 0x10) +#define FLASH_H7_SR2 (FLASH_H7_REGS_ADDR + 0x110) +#define FLASH_H7_CCR1 (FLASH_H7_REGS_ADDR + 0x14) +#define FLASH_H7_CCR2 (FLASH_H7_REGS_ADDR + 0x114) +#define FLASH_H7_OPTCR (FLASH_H7_REGS_ADDR + 0x18) +#define FLASH_H7_OPTCR2 (FLASH_H7_REGS_ADDR + 0x118) +#define FLASH_H7_OPTSR_CUR (FLASH_H7_REGS_ADDR + 0x1c) +#define FLASH_H7_OPTCCR (FLASH_H7_REGS_ADDR + 0x24) -// STM32F2 -#define FLASH_F2_REGS_ADDR ((uint32_t)0x40023c00) -#define FLASH_F2_KEYR (FLASH_F2_REGS_ADDR + 0x04) -#define FLASH_F2_OPT_KEYR (FLASH_F2_REGS_ADDR + 0x08) -#define FLASH_F2_SR (FLASH_F2_REGS_ADDR + 0x0c) -#define FLASH_F2_CR (FLASH_F2_REGS_ADDR + 0x10) -#define FLASH_F2_OPT_CR (FLASH_F2_REGS_ADDR + 0x14) -#define FLASH_F2_OPT_LOCK_BIT (1u << 0) -#define FLASH_F2_CR_STRT 16 -#define FLASH_F2_CR_LOCK 31 +#define FLASH_H7_OPTCR_OPTLOCK 0 +#define FLASH_H7_OPTCR_OPTSTART 1 +#define FLASH_H7_OPTCR_MER 4 -#define FLASH_F2_CR_SER 1 -#define FLASH_F2_CR_SNB 3 -#define FLASH_F2_CR_SNB_MASK 0x78 -#define FLASH_F2_SR_BSY 16 +#define FLASH_H7_OPTSR_OPT_BUSY 0 +#define FLASH_H7_OPTSR_OPTCHANGEERR 30 -// STM32H7xx +#define FLASH_H7_OPTCCR_CLR_OPTCHANGEERR 30 + +// H7 Flash control register #define FLASH_H7_CR_LOCK 0 #define FLASH_H7_CR_PG 1 #define FLASH_H7_CR_SER 2 @@ -308,6 +243,7 @@ #define FLASH_H7_CR_SNB 8 #define FLASH_H7_CR_SNB_MASK 0x700 +// H7 Flash status register #define FLASH_H7_SR_QW 2 #define FLASH_H7_SR_WRPERR 17 #define FLASH_H7_SR_PGSERR 18 @@ -316,29 +252,162 @@ ((1 << FLASH_H7_SR_PGSERR) | (1 << FLASH_H7_SR_STRBERR) | \ (1 << FLASH_H7_SR_WRPERR)) -#define FLASH_H7_OPTCR_OPTLOCK 0 -#define FLASH_H7_OPTCR_OPTSTART 1 -#define FLASH_H7_OPTCR_MER 4 +// == STM32L0/L1/L4/L5 == +// Lx Flash registers +#define FLASH_Lx_REGS_ADDR ((uint32_t)0x40023c00) +#define FLASH_Lx_ACR (FLASH_Lx_REGS_ADDR + 0x00) +#define FLASH_Lx_PECR (FLASH_Lx_REGS_ADDR + 0x04) +#define FLASH_Lx_PDKEYR (FLASH_Lx_REGS_ADDR + 0x08) +#define FLASH_Lx_PEKEYR (FLASH_Lx_REGS_ADDR + 0x0c) +#define FLASH_Lx_PRGKEYR (FLASH_Lx_REGS_ADDR + 0x10) +#define FLASH_Lx_OPTKEYR (FLASH_Lx_REGS_ADDR + 0x14) +#define FLASH_Lx_SR (FLASH_Lx_REGS_ADDR + 0x18) +#define FLASH_Lx_OBR (FLASH_Lx_REGS_ADDR + 0x1c) +#define FLASH_Lx_WRPR (FLASH_Lx_REGS_ADDR + 0x20) + +// == STM32L0 == +// L0 Flash registers +#define FLASH_L0_PEKEY1 0x89abcdef +#define FLASH_L0_PEKEY2 0x02030405 -#define FLASH_H7_OPTSR_OPT_BUSY 0 -#define FLASH_H7_OPTSR_OPTCHANGEERR 30 +#define FLASH_L0_PRGKEY1 0x8c9daebf +#define FLASH_L0_PRGKEY2 0x13141516 -#define FLASH_H7_OPTCCR_CLR_OPTCHANGEERR 30 +#define FLASH_L0_OPTKEY1 0xFBEAD9C8 +#define FLASH_L0_OPTKEY2 0x24252627 -#define FLASH_H7_REGS_ADDR ((uint32_t)0x52002000) -#define FLASH_H7_KEYR1 (FLASH_H7_REGS_ADDR + 0x04) -#define FLASH_H7_KEYR2 (FLASH_H7_REGS_ADDR + 0x104) -#define FLASH_H7_OPT_KEYR (FLASH_H7_REGS_ADDR + 0x08) -#define FLASH_H7_OPT_KEYR2 (FLASH_H7_REGS_ADDR + 0x108) -#define FLASH_H7_CR1 (FLASH_H7_REGS_ADDR + 0x0c) -#define FLASH_H7_CR2 (FLASH_H7_REGS_ADDR + 0x10c) -#define FLASH_H7_SR1 (FLASH_H7_REGS_ADDR + 0x10) -#define FLASH_H7_SR2 (FLASH_H7_REGS_ADDR + 0x110) -#define FLASH_H7_CCR1 (FLASH_H7_REGS_ADDR + 0x14) -#define FLASH_H7_CCR2 (FLASH_H7_REGS_ADDR + 0x114) -#define FLASH_H7_OPTCR (FLASH_H7_REGS_ADDR + 0x18) -#define FLASH_H7_OPTCR2 (FLASH_H7_REGS_ADDR + 0x118) -#define FLASH_H7_OPTSR_CUR (FLASH_H7_REGS_ADDR + 0x1c) -#define FLASH_H7_OPTCCR (FLASH_H7_REGS_ADDR + 0x24) +#define FLASH_L0_REGS_ADDR ((uint32_t)0x40022000) + +#define FLASH_L0_PELOCK (0) +#define FLASH_L0_OPTLOCK (2) +#define FLASH_L0_OBL_LAUNCH (18) + +// L0 Flash status register +#define FLASH_L0_SR_ERROR_MASK 0x00013f00 +#define FLASH_L0_SR_WRPERR 8 +#define FLASH_L0_SR_PGAERR 9 +#define FLASH_L0_SR_NOTZEROERR 16 + +// == STM32L1 == +// L1 Flash registers +#define FLASH_L1_FPRG 10 +#define FLASH_L1_PROG 3 + +// L1 Flash status register +#define FLASH_L1_SR_ERROR_MASK 0x00003f00 +#define FLASH_L1_SR_WRPERR 8 +#define FLASH_L1_SR_PGAERR 9 + +// == STM32L4 == +// L4 Flash registers +// L4 register base is at FLASH_REGS_ADDR (0x40022000) +#define FLASH_L4_KEYR (FLASH_REGS_ADDR + 0x08) +#define FLASH_L4_OPTKEYR (FLASH_REGS_ADDR + 0x0c) +#define FLASH_L4_SR (FLASH_REGS_ADDR + 0x10) +#define FLASH_L4_CR (FLASH_REGS_ADDR + 0x14) +#define FLASH_L4_OPTR (FLASH_REGS_ADDR + 0x20) + +// L4 Flash status register +#define FLASH_L4_SR_ERROR_MASK 0x3f8 /* SR [9:3] */ +#define FLASH_L4_SR_PROGERR 3 +#define FLASH_L4_SR_WRPERR 4 +#define FLASH_L4_SR_PGAERR 5 +#define FLASH_L4_SR_BSY 16 + +// L4 Flash control register +#define FLASH_L4_CR_LOCK 31 /* Lock control register */ +#define FLASH_L4_CR_OPTLOCK 30 /* Lock option bytes */ +#define FLASH_L4_CR_PG 0 /* Program */ +#define FLASH_L4_CR_PER 1 /* Page erase */ +#define FLASH_L4_CR_MER1 2 /* Bank 1 erase */ +#define FLASH_L4_CR_MER2 15 /* Bank 2 erase */ +#define FLASH_L4_CR_STRT 16 /* Start command */ +#define FLASH_L4_CR_OPTSTRT 17 /* Start writing option bytes */ +#define FLASH_L4_CR_BKER 11 /* Bank select for page erase */ +#define FLASH_L4_CR_PNB 3 /* Page number (8 bits) */ +#define FLASH_L4_CR_OBL_LAUNCH 27 /* Option bytes reload */ +// Bits requesting flash operations (useful when we want to clear them) +#define FLASH_L4_CR_OPBITS \ + (uint32_t)((1lu << FLASH_L4_CR_PG) | (1lu << FLASH_L4_CR_PER) | \ + (1lu << FLASH_L4_CR_MER1) | (1lu << FLASH_L4_CR_MER1)) +// Page is fully specified by BKER and PNB +#define FLASH_L4_CR_PAGEMASK (uint32_t)(0x1fflu << FLASH_L4_CR_PNB) + +#define FLASH_L4_OPTR_DUALBANK 21 + +// == STM32L5 == (RM0438, p.241) +// L5 Flash registers +#define FLASH_L5_REGS_ADDR ((uint32_t)0x40022000) +#define FLASH_L5_ACR (FLASH_L5_REGS_ADDR + 0x00) +#define FLASH_L5_NSKEYR (FLASH_L5_REGS_ADDR + 0x08) +#define FLASH_L5_OPTKEYR (FLASH_L5_REGS_ADDR + 0x10) +#define FLASH_L5_NSSR (FLASH_L5_REGS_ADDR + 0x20) +#define FLASH_L5_NSCR (FLASH_L5_REGS_ADDR + 0x28) +#define FLASH_L5_ECCR (FLASH_L5_REGS_ADDR + 0x30) +#define FLASH_L5_OPTR (FLASH_L5_REGS_ADDR + 0x40) + +// FLASH_NSCR control registers (RM0438, p. 242) +#define FLASH_L5_NSCR_NSPG 0 /* Program */ +#define FLASH_L5_NSCR_NSPER 1 /* Page erase */ +#define FLASH_L5_NSCR_NSMER1 2 /* Bank 1 erase */ +#define FLASH_L5_NSCR_NSPNB 3 /* Page number (7 bits) */ +#define FLASH_L5_NSCR_NSBKER 11 /* Bank select for page erase */ +#define FLASH_L5_NSCR_NSMER2 15 /* Bank 2 erase */ +#define FLASH_L5_NSCR_NSSTRT 16 /* Start command */ +#define FLASH_L5_NSCR_NSOPTSTRT 17 /* Start writing option bytes */ +#define FLASH_L5_NSCR_NSEOPIE 24 +#define FLASH_L5_NSCR_NSERRIE 25 +#define FLASH_L5_NSCR_OBL_LAUNCH 27 /* Option bytes reload */ +#define FLASH_L5_NSCR_OPTLOCK 30 /* Lock option bytes */ +#define FLASH_L5_NSCR_NSLOCK 31 /* Lock control register */ + +// FLASH_NSSR status register (RM0438, p. 241) +#define FLASH_L5_NSSR_NSEOP 0 /* End of Operation */ +#define FLASH_L5_NSSR_NSOPERR 1 +#define FLASH_L5_NSSR_NSPROGERR 3 +#define FLASH_L5_NSSR_NSWRPERR 4 +#define FLASH_L5_NSSR_NSPGAERR 5 +#define FLASH_L5_NSSR_NSSIZERR 6 +#define FLASH_L5_NSSR_NSPGSERR 7 +#define FLASH_L5_NSSR_OPTWERR 12 +#define FLASH_L5_NSSR_BSY 16 /* Busy */ +#define FLASH_L5_NSSR_ERROR_MASK (0x20fa) + +// == STM32WB == (RM0434) +// WB Flash registers +#define FLASH_WB_REGS_ADDR ((uint32_t)0x58004000) +#define FLASH_WB_ACR (FLASH_WB_REGS_ADDR + 0x00) +#define FLASH_WB_KEYR (FLASH_WB_REGS_ADDR + 0x08) +#define FLASH_WB_OPT_KEYR (FLASH_WB_REGS_ADDR + 0x0c) +#define FLASH_WB_SR (FLASH_WB_REGS_ADDR + 0x10) +#define FLASH_WB_CR (FLASH_WB_REGS_ADDR + 0x14) +#define FLASH_WB_ECCR (FLASH_WB_REGS_ADDR + 0x18) +#define FLASH_WB_OPTR (FLASH_WB_REGS_ADDR + 0x20) +#define FLASH_WB_PCROP1ASR (FLASH_WB_REGS_ADDR + 0x24) +#define FLASH_WB_PCROP1AER (FLASH_WB_REGS_ADDR + 0x28) +#define FLASH_WB_WRP1AR (FLASH_WB_REGS_ADDR + 0x2c) +#define FLASH_WB_WRP1BR (FLASH_WB_REGS_ADDR + 0x30) +#define FLASH_WB_PCROP1BSR (FLASH_WB_REGS_ADDR + 0x34) +#define FLASH_WB_PCROP1BER (FLASH_WB_REGS_ADDR + 0x38) +#define FLASH_WB_IPCCBR (FLASH_WB_REGS_ADDR + 0x3c) +#define FLASH_WB_C2ACR (FLASH_WB_REGS_ADDR + 0x5c) +#define FLASH_WB_C2SR (FLASH_WB_REGS_ADDR + 0x60) +#define FLASH_WB_C2CR (FLASH_WB_REGS_ADDR + 0x64) +#define FLASH_WB_SFR (FLASH_WB_REGS_ADDR + 0x80) +#define FLASH_WB_SRRVR (FLASH_WB_REGS_ADDR + 0x84) + +// WB Flash control register +#define FLASH_WB_CR_STRT (16) /* Start */ +#define FLASH_WB_CR_OPTSTRT (17) /* Start writing option bytes */ +#define FLASH_WB_CR_OBL_LAUNCH (27) /* Forces the option byte loading */ +#define FLASH_WB_CR_OPTLOCK (30) /* Option Lock */ +#define FLASH_WB_CR_LOCK (31) /* Lock */ + +// WB Flash status register +#define FLASH_WB_SR_ERROR_MASK (0x3f8) /* SR [9:3] */ +#define FLASH_WB_SR_PROGERR (3) /* Programming alignment error */ +#define FLASH_WB_SR_WRPERR (4) /* Write protection error */ +#define FLASH_WB_SR_PGAERR (5) /* Programming error */ +#define FLASH_WB_SR_BSY (16) /* Busy */ #endif // STM32FLASH_H diff --git a/third_party/stlink/inc/usb.h b/third_party/stlink/inc/usb.h index 3f4b71e5..2ec7490a 100644 --- a/third_party/stlink/inc/usb.h +++ b/third_party/stlink/inc/usb.h @@ -1,15 +1,15 @@ /* - * File: usb.h - * Author: karl + * File: usb.h + * + * USB commands & interaction with ST-LINK devices */ -#ifndef STLINK_USB_H -#define STLINK_USB_H +#ifndef USB_H +#define USB_H -#include +#include -#include -#include +#include "libusb_settings.h" #include "logging.h" #define STLINK_USB_VID_ST 0x0483 @@ -46,28 +46,64 @@ #define STLINK_SG_SIZE 31 #define STLINK_CMD_SIZE 16 +enum SCSI_Generic_Direction {SG_DXFER_TO_DEV = 0, SG_DXFER_FROM_DEV = 0x80}; + struct stlink_libusb { libusb_context* libusb_ctx; libusb_device_handle* usb_handle; - unsigned int ep_req; - unsigned int ep_rep; - unsigned int ep_trace; - int protocoll; - unsigned int sg_transfer_idx; - unsigned int cmd_len; + uint32_t ep_req; + uint32_t ep_rep; + uint32_t ep_trace; + int32_t protocoll; + uint32_t sg_transfer_idx; + uint32_t cmd_len; }; -/** - * Open a stlink - * @param verbose Verbosity loglevel - * @param connect Type of connect to target - * @param serial Serial number to search for, when NULL the first stlink found is opened (binary format) - * @retval NULL Error while opening the stlink - * @retval !NULL Stlink found and ready to use - */ - -stlink_t *stlink_open_usb(enum ugly_loglevel verbose, enum connect_type connect, char serial[STLINK_SERIAL_BUFFER_SIZE], int freq); -size_t stlink_probe_usb(stlink_t **stdevs[], enum connect_type connect, int freq); -void stlink_probe_usb_free(stlink_t **stdevs[], size_t size); +// static inline uint32_t le_to_h_u32(const uint8_t* buf); +// static int32_t _stlink_match_speed_map(const uint32_t *map, uint32_t map_size, uint32_t khz); +void _stlink_usb_close(stlink_t* sl); +ssize_t send_recv(struct stlink_libusb* handle, int32_t terminate, unsigned char* txbuf, uint32_t txsize, + unsigned char* rxbuf, uint32_t rxsize, int32_t check_error, const char *cmd); +// static inline int32_t send_only(struct stlink_libusb* handle, int32_t terminate, unsigned char* txbuf, +// uint32_t txsize, const char *cmd); +// static int32_t fill_command(stlink_t * sl, enum SCSI_Generic_Direction dir, uint32_t len); +int32_t _stlink_usb_version(stlink_t *sl); +int32_t _stlink_usb_target_voltage(stlink_t *sl); +int32_t _stlink_usb_read_debug32(stlink_t *sl, uint32_t addr, uint32_t *data); +int32_t _stlink_usb_write_debug32(stlink_t *sl, uint32_t addr, uint32_t data); +int32_t _stlink_usb_get_rw_status(stlink_t *sl); +int32_t _stlink_usb_write_mem32(stlink_t *sl, uint32_t addr, uint16_t len); +int32_t _stlink_usb_write_mem8(stlink_t *sl, uint32_t addr, uint16_t len); +int32_t _stlink_usb_current_mode(stlink_t * sl); +int32_t _stlink_usb_core_id(stlink_t * sl); +int32_t _stlink_usb_status_v2(stlink_t *sl); +int32_t _stlink_usb_status(stlink_t * sl); +int32_t _stlink_usb_force_debug(stlink_t *sl); +int32_t _stlink_usb_enter_swd_mode(stlink_t * sl); +int32_t _stlink_usb_exit_dfu_mode(stlink_t* sl); +int32_t _stlink_usb_reset(stlink_t * sl); +int32_t _stlink_usb_jtag_reset(stlink_t * sl, int32_t value); +int32_t _stlink_usb_step(stlink_t* sl); +int32_t _stlink_usb_run(stlink_t* sl, enum run_type type); +int32_t _stlink_usb_set_swdclk(stlink_t* sl, int32_t clk_freq); +int32_t _stlink_usb_exit_debug_mode(stlink_t *sl); +int32_t _stlink_usb_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len); +int32_t _stlink_usb_read_all_regs(stlink_t *sl, struct stlink_reg *regp); +int32_t _stlink_usb_read_reg(stlink_t *sl, int32_t r_idx, struct stlink_reg *regp); +int32_t _stlink_usb_read_unsupported_reg(stlink_t *sl, int32_t r_idx, struct stlink_reg *regp); +int32_t _stlink_usb_read_all_unsupported_regs(stlink_t *sl, struct stlink_reg *regp); +int32_t _stlink_usb_write_unsupported_reg(stlink_t *sl, uint32_t val, int32_t r_idx, struct stlink_reg *regp); +int32_t _stlink_usb_write_reg(stlink_t *sl, uint32_t reg, int32_t idx); +int32_t _stlink_usb_enable_trace(stlink_t* sl, uint32_t frequency); +int32_t _stlink_usb_disable_trace(stlink_t* sl); +int32_t _stlink_usb_read_trace(stlink_t* sl, uint8_t* buf, uint32_t size); + +// static stlink_backend_t _stlink_usb_backend = { }; + +size_t stlink_serial(struct libusb_device_handle *handle, struct libusb_device_descriptor *desc, char *serial); +stlink_t *stlink_open_usb(enum ugly_loglevel verbose, enum connect_type connect, char serial[STLINK_SERIAL_BUFFER_SIZE], int32_t freq); +// static uint32_t stlink_probe_usb_devs(libusb_device **devs, stlink_t **sldevs[], enum connect_type connect, int32_t freq); +size_t stlink_probe_usb(stlink_t **stdevs[], enum connect_type connect, int32_t freq); +void stlink_probe_usb_free(stlink_t **stdevs[], uint32_t size); -#endif // STLINK_USB_H +#endif // USB_H diff --git a/third_party/stlink/inc/version.h b/third_party/stlink/inc/version.h index a33bfc68..39020c0b 100644 --- a/third_party/stlink/inc/version.h +++ b/third_party/stlink/inc/version.h @@ -1,9 +1,9 @@ -#ifndef STLINK_VERSION_H_ -#define STLINK_VERSION_H_ +#ifndef VERSION_H +#define VERSION_H -#define STLINK_VERSION "1.7.0-237-g1bec78c" -#define STLINK_VERSION_MAJOR 1 -#define STLINK_VERSION_MINOR 7 -#define STLINK_VERSION_PATCH 0 +#define STLINK_VERSION "@PROJECT_VERSION@" +#define STLINK_VERSION_MAJOR @PROJECT_VERSION_MAJOR@ +#define STLINK_VERSION_MINOR @PROJECT_VERSION_MINOR@ +#define STLINK_VERSION_PATCH @PROJECT_VERSION_PATCH@ -#endif // STLINK_VERSION_H_ +#endif // VERSION_H diff --git a/third_party/stlink/lib/linux/libstlink.a b/third_party/stlink/lib/linux/libstlink.a index 077e7f6dc914aeb6f3d8cf6b4527b860e7f55e69..c44908c86bdc7f79a8bcfa0156eada475bc1b371 100644 GIT binary patch delta 41 xcmZ3qpJ&m2o`x32EligycufsVOc_cN)AdXZ%q*rqs9+LjGB@4+vw~^mG5|Wt4(I>? delta 41 xcmZ3qpJ&m2o`x32Eligycug!VjTlN2)AdXZ3{9s$s9+LjGBVo!vw~^mG5|Xi4&nd+ diff --git a/third_party/stlink/lib/windows/libstlink.a b/third_party/stlink/lib/windows/libstlink.a index b7cfa8c967873ab216c592c95d1fee4ce2e9ea7b..f28320c38d486eca0e144e73d9931b5d77b295cd 100644 GIT binary patch literal 138324 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%0Abt9%CmB4gehsqfOrt7tMr}q|Mx_Y4F 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

    XD$ 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 bZS74q!$VHyn<0FDx;(IpRL>%-+@Aje{@LXP diff --git a/third_party/stlink/lib/windows/libstlink.dll b/third_party/stlink/lib/windows/libstlink.dll deleted file mode 100644 index 9410267d70679811ca16843e35baa305017e3da1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532298 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 z