X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fflash%2Fnor%2Fstm32f1x.c;h=d06e0a692cd3ca445d7f17007b878baab86c36d7;hb=060e9c3b36a8cf109011e15e445745bc14396b35;hp=601417a956e6b83fcf113da0231e936da7a81582;hpb=76ea15cce78111d5628b5177cd22e69f6bf08db3;p=fw%2Fopenocd diff --git a/src/flash/nor/stm32f1x.c b/src/flash/nor/stm32f1x.c index 601417a95..d06e0a692 100644 --- a/src/flash/nor/stm32f1x.c +++ b/src/flash/nor/stm32f1x.c @@ -620,7 +620,7 @@ static int stm32x_write_block(struct flash_bank *bank, const uint8_t *buffer, &write_algorithm) != ERROR_OK) { LOG_WARNING("no working area available, can't do block memory writes"); return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; - }; + } retval = target_write_buffer(target, write_algorithm->address, sizeof(stm32x_flash_write_code), stm32x_flash_write_code); @@ -639,7 +639,7 @@ static int stm32x_write_block(struct flash_bank *bank, const uint8_t *buffer, LOG_WARNING("no large enough working area available, can't do block memory writes"); return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; } - }; + } init_reg_param(®_params[0], "r0", 32, PARAM_IN_OUT); /* flash base (in), status (out) */ init_reg_param(®_params[1], "r1", 32, PARAM_OUT); /* count (halfword-16bit) */ @@ -894,7 +894,7 @@ static int stm32x_probe(struct flash_bank *bank) stm32x_info->ppage_size = 4; max_flash_size_in_kb = 128; break; - case 0x422: /* stm32f30x */ + case 0x422: /* stm32f302/3xb/c */ page_size = 2048; stm32x_info->ppage_size = 2; max_flash_size_in_kb = 256; @@ -902,6 +902,14 @@ static int stm32x_probe(struct flash_bank *bank) stm32x_info->option_offset = 6; stm32x_info->default_rdp = 0x55AA; break; + case 0x446: /* stm32f303xD/E */ + page_size = 2048; + stm32x_info->ppage_size = 2; + max_flash_size_in_kb = 512; + stm32x_info->user_data_offset = 16; + stm32x_info->option_offset = 6; + stm32x_info->default_rdp = 0x55AA; + break; case 0x428: /* value line High density */ page_size = 2048; stm32x_info->ppage_size = 4; @@ -922,6 +930,7 @@ static int stm32x_probe(struct flash_bank *bank) stm32x_info->default_rdp = 0x55AA; break; case 0x438: /* stm32f33x */ + case 0x439: /* stm32f302x6/8 */ page_size = 2048; stm32x_info->ppage_size = 2; max_flash_size_in_kb = 64; @@ -940,9 +949,10 @@ static int stm32x_probe(struct flash_bank *bank) stm32x_info->default_rdp = 0x55AA; break; case 0x448: /* stm32f07x */ + case 0x442: /* stm32f09x */ page_size = 2048; stm32x_info->ppage_size = 4; - max_flash_size_in_kb = 128; + max_flash_size_in_kb = 256; stm32x_info->user_data_offset = 16; stm32x_info->option_offset = 6; stm32x_info->default_rdp = 0x55AA; @@ -1031,6 +1041,21 @@ COMMAND_HANDLER(stm32x_handle_part_id_command) } #endif +static const char *get_stm32f0_revision(uint16_t rev_id) +{ + const char *rev_str = NULL; + + switch (rev_id) { + case 0x1000: + rev_str = "1.0"; + break; + case 0x2000: + rev_str = "2.0"; + break; + } + return rev_str; +} + static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) { uint32_t dbgmcu_idcode; @@ -1125,7 +1150,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) break; case 0x422: - device_str = "STM32F30x"; + device_str = "STM32F302xB/C"; switch (rev_id) { case 0x1000: @@ -1194,60 +1219,52 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) } break; - case 0x444: - device_str = "STM32F03x"; + case 0x439: + device_str = "STM32F302x6/8"; switch (rev_id) { case 0x1000: - rev_str = "1.0"; + rev_str = "A"; break; - case 0x2000: - rev_str = "2.0"; + case 0x1001: + rev_str = "Z"; break; } break; + case 0x444: + device_str = "STM32F03x"; + rev_str = get_stm32f0_revision(rev_id); + break; + case 0x440: device_str = "STM32F05x"; - - switch (rev_id) { - case 0x1000: - rev_str = "1.0"; - break; - - case 0x2000: - rev_str = "2.0"; - break; - } + rev_str = get_stm32f0_revision(rev_id); break; case 0x445: device_str = "STM32F04x"; + rev_str = get_stm32f0_revision(rev_id); + break; + case 0x446: + device_str = "STM32F303xD/E"; switch (rev_id) { case 0x1000: - rev_str = "1.0"; - break; - - case 0x2000: - rev_str = "2.0"; + rev_str = "A"; break; } break; case 0x448: device_str = "STM32F07x"; + rev_str = get_stm32f0_revision(rev_id); + break; - switch (rev_id) { - case 0x1000: - rev_str = "1.0"; - break; - - case 0x2000: - rev_str = "2.0"; - break; - } + case 0x442: + device_str = "STM32F09x"; + rev_str = get_stm32f0_revision(rev_id); break; default: