You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1232 lines
33 KiB

  1. /***************************************************************************
  2. * Copyright (C) 2005 by Dominic Rath *
  3. * Dominic.Rath@gmx.de *
  4. * *
  5. * Copyright (C) 2008 by Spencer Oliver *
  6. * spen@spen-soft.co.uk *
  7. * *
  8. * Copyright (C) 2011 Øyvind Harboe *
  9. * oyvind.harboe@zylin.com *
  10. * *
  11. * This program is free software; you can redistribute it and/or modify *
  12. * it under the terms of the GNU General Public License as published by *
  13. * the Free Software Foundation; either version 2 of the License, or *
  14. * (at your option) any later version. *
  15. * *
  16. * This program is distributed in the hope that it will be useful, *
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  19. * GNU General Public License for more details. *
  20. * *
  21. * You should have received a copy of the GNU General Public License *
  22. * along with this program; if not, write to the *
  23. * Free Software Foundation, Inc., *
  24. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
  25. ***************************************************************************/
  26. #ifdef HAVE_CONFIG_H
  27. #include "config.h"
  28. #endif
  29. #include "imp.h"
  30. #include <helper/binarybuffer.h>
  31. #include <target/algorithm.h>
  32. #include <target/armv7m.h>
  33. /* Regarding performance:
  34. *
  35. * Short story - it might be best to leave the performance at
  36. * current levels.
  37. *
  38. * You may see a jump in speed if you change to using
  39. * 32bit words for the block programming.
  40. *
  41. * Its a shame you cannot use the double word as its
  42. * even faster - but you require external VPP for that mode.
  43. *
  44. * Having said all that 16bit writes give us the widest vdd
  45. * operating range, so may be worth adding a note to that effect.
  46. *
  47. */
  48. /* Danger!!!! The STM32F1x and STM32F2x series actually have
  49. * quite different flash controllers.
  50. *
  51. * What's more scary is that the names of the registers and their
  52. * addresses are the same, but the actual bits and what they do are
  53. * can be very different.
  54. *
  55. * To reduce testing complexity and dangers of regressions,
  56. * a seperate file is used for stm32fx2x.
  57. *
  58. * Sector sizes in kiBytes:
  59. * 1 MiByte part with 4 x 16, 1 x 64, 7 x 128.
  60. * 2 MiByte part with 4 x 16, 1 x 64, 7 x 128, 4 x 16, 1 x 64, 7 x 128.
  61. * 1 MiByte STM32F42x/43x part with DB1M Option set:
  62. * 4 x 16, 1 x 64, 3 x 128, 4 x 16, 1 x 64, 3 x 128.
  63. *
  64. * STM32F7
  65. * 1 MiByte part with 4 x 32, 1 x 128, 3 x 256.
  66. *
  67. * Protection size is sector size.
  68. *
  69. * Tested with STM3220F-EVAL board.
  70. *
  71. * STM32F4xx series for reference.
  72. *
  73. * RM0090
  74. * http://www.st.com/web/en/resource/technical/document/reference_manual/DM00031020.pdf
  75. *
  76. * PM0059
  77. * www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/
  78. * PROGRAMMING_MANUAL/CD00233952.pdf
  79. *
  80. * STM32F7xx series for reference.
  81. *
  82. * RM0385
  83. * http://www.st.com/web/en/resource/technical/document/reference_manual/DM00124865.pdf
  84. *
  85. * STM32F1x series - notice that this code was copy, pasted and knocked
  86. * into a stm32f2x driver, so in case something has been converted or
  87. * bugs haven't been fixed, here are the original manuals:
  88. *
  89. * RM0008 - Reference manual
  90. *
  91. * RM0042, the Flash programming manual for low-, medium- high-density and
  92. * connectivity line STM32F10x devices
  93. *
  94. * PM0068, the Flash programming manual for XL-density STM32F10x devices.
  95. *
  96. */
  97. /* Erase time can be as high as 1000ms, 10x this and it's toast... */
  98. #define FLASH_ERASE_TIMEOUT 10000
  99. #define FLASH_WRITE_TIMEOUT 5
  100. #define STM32_FLASH_BASE 0x40023c00
  101. #define STM32_FLASH_ACR 0x40023c00
  102. #define STM32_FLASH_KEYR 0x40023c04
  103. #define STM32_FLASH_OPTKEYR 0x40023c08
  104. #define STM32_FLASH_SR 0x40023c0C
  105. #define STM32_FLASH_CR 0x40023c10
  106. #define STM32_FLASH_OPTCR 0x40023c14
  107. #define STM32_FLASH_OPTCR1 0x40023c18
  108. /* FLASH_CR register bits */
  109. #define FLASH_PG (1 << 0)
  110. #define FLASH_SER (1 << 1)
  111. #define FLASH_MER (1 << 2)
  112. #define FLASH_MER1 (1 << 15)
  113. #define FLASH_STRT (1 << 16)
  114. #define FLASH_PSIZE_8 (0 << 8)
  115. #define FLASH_PSIZE_16 (1 << 8)
  116. #define FLASH_PSIZE_32 (2 << 8)
  117. #define FLASH_PSIZE_64 (3 << 8)
  118. /* The sector number encoding is not straight binary for dual bank flash.
  119. * Warning: evaluates the argument multiple times */
  120. #define FLASH_SNB(a) ((((a) >= 12) ? 0x10 | ((a) - 12) : (a)) << 3)
  121. #define FLASH_LOCK (1 << 31)
  122. /* FLASH_SR register bits */
  123. #define FLASH_BSY (1 << 16)
  124. #define FLASH_PGSERR (1 << 7) /* Programming sequence error */
  125. #define FLASH_PGPERR (1 << 6) /* Programming parallelism error */
  126. #define FLASH_PGAERR (1 << 5) /* Programming alignment error */
  127. #define FLASH_WRPERR (1 << 4) /* Write protection error */
  128. #define FLASH_OPERR (1 << 1) /* Operation error */
  129. #define FLASH_ERROR (FLASH_PGSERR | FLASH_PGPERR | FLASH_PGAERR | FLASH_WRPERR | FLASH_OPERR)
  130. /* STM32_FLASH_OPTCR register bits */
  131. #define OPT_LOCK (1 << 0)
  132. #define OPT_START (1 << 1)
  133. /* STM32_FLASH_OBR bit definitions (reading) */
  134. #define OPT_ERROR 0
  135. #define OPT_READOUT 1
  136. #define OPT_RDWDGSW 2
  137. #define OPT_RDRSTSTOP 3
  138. #define OPT_RDRSTSTDBY 4
  139. #define OPT_BFB2 5 /* dual flash bank only */
  140. #define OPT_DB1M 14 /* 1 MiB devices dual flash bank option */
  141. /* register unlock keys */
  142. #define KEY1 0x45670123
  143. #define KEY2 0xCDEF89AB
  144. /* option register unlock key */
  145. #define OPTKEY1 0x08192A3B
  146. #define OPTKEY2 0x4C5D6E7F
  147. struct stm32x_options {
  148. uint8_t RDP;
  149. uint8_t user_options;
  150. uint32_t protection;
  151. };
  152. struct stm32x_flash_bank {
  153. struct stm32x_options option_bytes;
  154. int probed;
  155. bool has_large_mem; /* stm32f42x/stm32f43x family */
  156. uint32_t user_bank_size;
  157. };
  158. /* flash bank stm32x <base> <size> 0 0 <target#>
  159. */
  160. FLASH_BANK_COMMAND_HANDLER(stm32x_flash_bank_command)
  161. {
  162. struct stm32x_flash_bank *stm32x_info;
  163. if (CMD_ARGC < 6)
  164. return ERROR_COMMAND_SYNTAX_ERROR;
  165. stm32x_info = malloc(sizeof(struct stm32x_flash_bank));
  166. bank->driver_priv = stm32x_info;
  167. stm32x_info->probed = 0;
  168. stm32x_info->user_bank_size = bank->size;
  169. return ERROR_OK;
  170. }
  171. static inline int stm32x_get_flash_reg(struct flash_bank *bank, uint32_t reg)
  172. {
  173. return reg;
  174. }
  175. static inline int stm32x_get_flash_status(struct flash_bank *bank, uint32_t *status)
  176. {
  177. struct target *target = bank->target;
  178. return target_read_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_SR), status);
  179. }
  180. static int stm32x_wait_status_busy(struct flash_bank *bank, int timeout)
  181. {
  182. struct target *target = bank->target;
  183. uint32_t status;
  184. int retval = ERROR_OK;
  185. /* wait for busy to clear */
  186. for (;;) {
  187. retval = stm32x_get_flash_status(bank, &status);
  188. if (retval != ERROR_OK)
  189. return retval;
  190. LOG_DEBUG("status: 0x%" PRIx32 "", status);
  191. if ((status & FLASH_BSY) == 0)
  192. break;
  193. if (timeout-- <= 0) {
  194. LOG_ERROR("timed out waiting for flash");
  195. return ERROR_FAIL;
  196. }
  197. alive_sleep(1);
  198. }
  199. if (status & FLASH_WRPERR) {
  200. LOG_ERROR("stm32x device protected");
  201. retval = ERROR_FAIL;
  202. }
  203. /* Clear but report errors */
  204. if (status & FLASH_ERROR) {
  205. /* If this operation fails, we ignore it and report the original
  206. * retval
  207. */
  208. target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_SR),
  209. status & FLASH_ERROR);
  210. }
  211. return retval;
  212. }
  213. static int stm32x_unlock_reg(struct target *target)
  214. {
  215. uint32_t ctrl;
  216. /* first check if not already unlocked
  217. * otherwise writing on STM32_FLASH_KEYR will fail
  218. */
  219. int retval = target_read_u32(target, STM32_FLASH_CR, &ctrl);
  220. if (retval != ERROR_OK)
  221. return retval;
  222. if ((ctrl & FLASH_LOCK) == 0)
  223. return ERROR_OK;
  224. /* unlock flash registers */
  225. retval = target_write_u32(target, STM32_FLASH_KEYR, KEY1);
  226. if (retval != ERROR_OK)
  227. return retval;
  228. retval = target_write_u32(target, STM32_FLASH_KEYR, KEY2);
  229. if (retval != ERROR_OK)
  230. return retval;
  231. retval = target_read_u32(target, STM32_FLASH_CR, &ctrl);
  232. if (retval != ERROR_OK)
  233. return retval;
  234. if (ctrl & FLASH_LOCK) {
  235. LOG_ERROR("flash not unlocked STM32_FLASH_CR: %" PRIx32, ctrl);
  236. return ERROR_TARGET_FAILURE;
  237. }
  238. return ERROR_OK;
  239. }
  240. static int stm32x_unlock_option_reg(struct target *target)
  241. {
  242. uint32_t ctrl;
  243. int retval = target_read_u32(target, STM32_FLASH_OPTCR, &ctrl);
  244. if (retval != ERROR_OK)
  245. return retval;
  246. if ((ctrl & OPT_LOCK) == 0)
  247. return ERROR_OK;
  248. /* unlock option registers */
  249. retval = target_write_u32(target, STM32_FLASH_OPTKEYR, OPTKEY1);
  250. if (retval != ERROR_OK)
  251. return retval;
  252. retval = target_write_u32(target, STM32_FLASH_OPTKEYR, OPTKEY2);
  253. if (retval != ERROR_OK)
  254. return retval;
  255. retval = target_read_u32(target, STM32_FLASH_OPTCR, &ctrl);
  256. if (retval != ERROR_OK)
  257. return retval;
  258. if (ctrl & OPT_LOCK) {
  259. LOG_ERROR("options not unlocked STM32_FLASH_OPTCR: %" PRIx32, ctrl);
  260. return ERROR_TARGET_FAILURE;
  261. }
  262. return ERROR_OK;
  263. }
  264. static int stm32x_read_options(struct flash_bank *bank)
  265. {
  266. uint32_t optiondata;
  267. struct stm32x_flash_bank *stm32x_info = NULL;
  268. struct target *target = bank->target;
  269. stm32x_info = bank->driver_priv;
  270. /* read current option bytes */
  271. int retval = target_read_u32(target, STM32_FLASH_OPTCR, &optiondata);
  272. if (retval != ERROR_OK)
  273. return retval;
  274. stm32x_info->option_bytes.user_options = optiondata & 0xec;
  275. stm32x_info->option_bytes.RDP = (optiondata >> 8) & 0xff;
  276. stm32x_info->option_bytes.protection = (optiondata >> 16) & 0xfff;
  277. if (stm32x_info->has_large_mem) {
  278. retval = target_read_u32(target, STM32_FLASH_OPTCR1, &optiondata);
  279. if (retval != ERROR_OK)
  280. return retval;
  281. /* append protection bits */
  282. stm32x_info->option_bytes.protection |= (optiondata >> 4) & 0x00fff000;
  283. }
  284. if (stm32x_info->option_bytes.RDP != 0xAA)
  285. LOG_INFO("Device Security Bit Set");
  286. return ERROR_OK;
  287. }
  288. static int stm32x_write_options(struct flash_bank *bank)
  289. {
  290. struct stm32x_flash_bank *stm32x_info = NULL;
  291. struct target *target = bank->target;
  292. uint32_t optiondata;
  293. stm32x_info = bank->driver_priv;
  294. int retval = stm32x_unlock_option_reg(target);
  295. if (retval != ERROR_OK)
  296. return retval;
  297. /* rebuild option data */
  298. optiondata = stm32x_info->option_bytes.user_options;
  299. optiondata |= stm32x_info->option_bytes.RDP << 8;
  300. optiondata |= (stm32x_info->option_bytes.protection & 0x0fff) << 16;
  301. /* program options */
  302. retval = target_write_u32(target, STM32_FLASH_OPTCR, optiondata);
  303. if (retval != ERROR_OK)
  304. return retval;
  305. if (stm32x_info->has_large_mem) {
  306. uint32_t optiondata2 = 0;
  307. optiondata2 |= (stm32x_info->option_bytes.protection & 0x00fff000) << 4;
  308. retval = target_write_u32(target, STM32_FLASH_OPTCR1, optiondata2);
  309. if (retval != ERROR_OK)
  310. return retval;
  311. }
  312. /* start programming cycle */
  313. retval = target_write_u32(target, STM32_FLASH_OPTCR, optiondata | OPT_START);
  314. if (retval != ERROR_OK)
  315. return retval;
  316. /* wait for completion */
  317. retval = stm32x_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
  318. if (retval != ERROR_OK)
  319. return retval;
  320. /* relock registers */
  321. retval = target_write_u32(target, STM32_FLASH_OPTCR, optiondata | OPT_LOCK);
  322. if (retval != ERROR_OK)
  323. return retval;
  324. return ERROR_OK;
  325. }
  326. static int stm32x_protect_check(struct flash_bank *bank)
  327. {
  328. struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
  329. /* read write protection settings */
  330. int retval = stm32x_read_options(bank);
  331. if (retval != ERROR_OK) {
  332. LOG_DEBUG("unable to read option bytes");
  333. return retval;
  334. }
  335. for (int i = 0; i < bank->num_sectors; i++) {
  336. if (stm32x_info->option_bytes.protection & (1 << i))
  337. bank->sectors[i].is_protected = 0;
  338. else
  339. bank->sectors[i].is_protected = 1;
  340. }
  341. return ERROR_OK;
  342. }
  343. static int stm32x_erase(struct flash_bank *bank, int first, int last)
  344. {
  345. struct target *target = bank->target;
  346. int i;
  347. assert(first < bank->num_sectors);
  348. assert(last < bank->num_sectors);
  349. if (bank->target->state != TARGET_HALTED) {
  350. LOG_ERROR("Target not halted");
  351. return ERROR_TARGET_NOT_HALTED;
  352. }
  353. int retval;
  354. retval = stm32x_unlock_reg(target);
  355. if (retval != ERROR_OK)
  356. return retval;
  357. /*
  358. Sector Erase
  359. To erase a sector, follow the procedure below:
  360. 1. Check that no Flash memory operation is ongoing by checking the BSY bit in the
  361. FLASH_SR register
  362. 2. Set the SER bit and select the sector
  363. you wish to erase (SNB) in the FLASH_CR register
  364. 3. Set the STRT bit in the FLASH_CR register
  365. 4. Wait for the BSY bit to be cleared
  366. */
  367. for (i = first; i <= last; i++) {
  368. retval = target_write_u32(target,
  369. stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_SER | FLASH_SNB(i) | FLASH_STRT);
  370. if (retval != ERROR_OK)
  371. return retval;
  372. retval = stm32x_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
  373. if (retval != ERROR_OK)
  374. return retval;
  375. bank->sectors[i].is_erased = 1;
  376. }
  377. retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_LOCK);
  378. if (retval != ERROR_OK)
  379. return retval;
  380. return ERROR_OK;
  381. }
  382. static int stm32x_protect(struct flash_bank *bank, int set, int first, int last)
  383. {
  384. struct target *target = bank->target;
  385. struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
  386. if (target->state != TARGET_HALTED) {
  387. LOG_ERROR("Target not halted");
  388. return ERROR_TARGET_NOT_HALTED;
  389. }
  390. /* read protection settings */
  391. int retval = stm32x_read_options(bank);
  392. if (retval != ERROR_OK) {
  393. LOG_DEBUG("unable to read option bytes");
  394. return retval;
  395. }
  396. for (int i = first; i <= last; i++) {
  397. if (set)
  398. stm32x_info->option_bytes.protection &= ~(1 << i);
  399. else
  400. stm32x_info->option_bytes.protection |= (1 << i);
  401. }
  402. retval = stm32x_write_options(bank);
  403. if (retval != ERROR_OK)
  404. return retval;
  405. return ERROR_OK;
  406. }
  407. static int stm32x_write_block(struct flash_bank *bank, const uint8_t *buffer,
  408. uint32_t offset, uint32_t count)
  409. {
  410. struct target *target = bank->target;
  411. uint32_t buffer_size = 16384;
  412. struct working_area *write_algorithm;
  413. struct working_area *source;
  414. uint32_t address = bank->base + offset;
  415. struct reg_param reg_params[5];
  416. struct armv7m_algorithm armv7m_info;
  417. int retval = ERROR_OK;
  418. /* see contrib/loaders/flash/stm32f2x.S for src */
  419. static const uint8_t stm32x_flash_write_code[] = {
  420. /* wait_fifo: */
  421. 0xD0, 0xF8, 0x00, 0x80, /* ldr r8, [r0, #0] */
  422. 0xB8, 0xF1, 0x00, 0x0F, /* cmp r8, #0 */
  423. 0x1A, 0xD0, /* beq exit */
  424. 0x47, 0x68, /* ldr r7, [r0, #4] */
  425. 0x47, 0x45, /* cmp r7, r8 */
  426. 0xF7, 0xD0, /* beq wait_fifo */
  427. 0xDF, 0xF8, 0x34, 0x60, /* ldr r6, STM32_PROG16 */
  428. 0x26, 0x61, /* str r6, [r4, #STM32_FLASH_CR_OFFSET] */
  429. 0x37, 0xF8, 0x02, 0x6B, /* ldrh r6, [r7], #0x02 */
  430. 0x22, 0xF8, 0x02, 0x6B, /* strh r6, [r2], #0x02 */
  431. 0xBF, 0xF3, 0x4F, 0x8F, /* dsb sy */
  432. /* busy: */
  433. 0xE6, 0x68, /* ldr r6, [r4, #STM32_FLASH_SR_OFFSET] */
  434. 0x16, 0xF4, 0x80, 0x3F, /* tst r6, #0x10000 */
  435. 0xFB, 0xD1, /* bne busy */
  436. 0x16, 0xF0, 0xF0, 0x0F, /* tst r6, #0xf0 */
  437. 0x07, 0xD1, /* bne error */
  438. 0x8F, 0x42, /* cmp r7, r1 */
  439. 0x28, 0xBF, /* it cs */
  440. 0x00, 0xF1, 0x08, 0x07, /* addcs r7, r0, #8 */
  441. 0x47, 0x60, /* str r7, [r0, #4] */
  442. 0x01, 0x3B, /* subs r3, r3, #1 */
  443. 0x13, 0xB1, /* cbz r3, exit */
  444. 0xDF, 0xE7, /* b wait_fifo */
  445. /* error: */
  446. 0x00, 0x21, /* movs r1, #0 */
  447. 0x41, 0x60, /* str r1, [r0, #4] */
  448. /* exit: */
  449. 0x30, 0x46, /* mov r0, r6 */
  450. 0x00, 0xBE, /* bkpt #0x00 */
  451. /* <STM32_PROG16>: */
  452. 0x01, 0x01, 0x00, 0x00, /* .word 0x00000101 */
  453. };
  454. if (target_alloc_working_area(target, sizeof(stm32x_flash_write_code),
  455. &write_algorithm) != ERROR_OK) {
  456. LOG_WARNING("no working area available, can't do block memory writes");
  457. return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
  458. }
  459. retval = target_write_buffer(target, write_algorithm->address,
  460. sizeof(stm32x_flash_write_code),
  461. stm32x_flash_write_code);
  462. if (retval != ERROR_OK)
  463. return retval;
  464. /* memory buffer */
  465. while (target_alloc_working_area_try(target, buffer_size, &source) != ERROR_OK) {
  466. buffer_size /= 2;
  467. if (buffer_size <= 256) {
  468. /* we already allocated the writing code, but failed to get a
  469. * buffer, free the algorithm */
  470. target_free_working_area(target, write_algorithm);
  471. LOG_WARNING("no large enough working area available, can't do block memory writes");
  472. return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
  473. }
  474. }
  475. armv7m_info.common_magic = ARMV7M_COMMON_MAGIC;
  476. armv7m_info.core_mode = ARM_MODE_THREAD;
  477. init_reg_param(&reg_params[0], "r0", 32, PARAM_IN_OUT); /* buffer start, status (out) */
  478. init_reg_param(&reg_params[1], "r1", 32, PARAM_OUT); /* buffer end */
  479. init_reg_param(&reg_params[2], "r2", 32, PARAM_OUT); /* target address */
  480. init_reg_param(&reg_params[3], "r3", 32, PARAM_OUT); /* count (halfword-16bit) */
  481. init_reg_param(&reg_params[4], "r4", 32, PARAM_OUT); /* flash base */
  482. buf_set_u32(reg_params[0].value, 0, 32, source->address);
  483. buf_set_u32(reg_params[1].value, 0, 32, source->address + source->size);
  484. buf_set_u32(reg_params[2].value, 0, 32, address);
  485. buf_set_u32(reg_params[3].value, 0, 32, count);
  486. buf_set_u32(reg_params[4].value, 0, 32, STM32_FLASH_BASE);
  487. retval = target_run_flash_async_algorithm(target, buffer, count, 2,
  488. 0, NULL,
  489. 5, reg_params,
  490. source->address, source->size,
  491. write_algorithm->address, 0,
  492. &armv7m_info);
  493. if (retval == ERROR_FLASH_OPERATION_FAILED) {
  494. LOG_ERROR("error executing stm32x flash write algorithm");
  495. uint32_t error = buf_get_u32(reg_params[0].value, 0, 32) & FLASH_ERROR;
  496. if (error & FLASH_WRPERR)
  497. LOG_ERROR("flash memory write protected");
  498. if (error != 0) {
  499. LOG_ERROR("flash write failed = %08" PRIx32, error);
  500. /* Clear but report errors */
  501. target_write_u32(target, STM32_FLASH_SR, error);
  502. retval = ERROR_FAIL;
  503. }
  504. }
  505. target_free_working_area(target, source);
  506. target_free_working_area(target, write_algorithm);
  507. destroy_reg_param(&reg_params[0]);
  508. destroy_reg_param(&reg_params[1]);
  509. destroy_reg_param(&reg_params[2]);
  510. destroy_reg_param(&reg_params[3]);
  511. destroy_reg_param(&reg_params[4]);
  512. return retval;
  513. }
  514. static int stm32x_write(struct flash_bank *bank, const uint8_t *buffer,
  515. uint32_t offset, uint32_t count)
  516. {
  517. struct target *target = bank->target;
  518. uint32_t words_remaining = (count / 2);
  519. uint32_t bytes_remaining = (count & 0x00000001);
  520. uint32_t address = bank->base + offset;
  521. uint32_t bytes_written = 0;
  522. int retval;
  523. if (bank->target->state != TARGET_HALTED) {
  524. LOG_ERROR("Target not halted");
  525. return ERROR_TARGET_NOT_HALTED;
  526. }
  527. if (offset & 0x1) {
  528. LOG_WARNING("offset 0x%" PRIx32 " breaks required 2-byte alignment", offset);
  529. return ERROR_FLASH_DST_BREAKS_ALIGNMENT;
  530. }
  531. retval = stm32x_unlock_reg(target);
  532. if (retval != ERROR_OK)
  533. return retval;
  534. /* multiple half words (2-byte) to be programmed? */
  535. if (words_remaining > 0) {
  536. /* try using a block write */
  537. retval = stm32x_write_block(bank, buffer, offset, words_remaining);
  538. if (retval != ERROR_OK) {
  539. if (retval == ERROR_TARGET_RESOURCE_NOT_AVAILABLE) {
  540. /* if block write failed (no sufficient working area),
  541. * we use normal (slow) single dword accesses */
  542. LOG_WARNING("couldn't use block writes, falling back to single memory accesses");
  543. }
  544. } else {
  545. buffer += words_remaining * 2;
  546. address += words_remaining * 2;
  547. words_remaining = 0;
  548. }
  549. }
  550. if ((retval != ERROR_OK) && (retval != ERROR_TARGET_RESOURCE_NOT_AVAILABLE))
  551. return retval;
  552. /*
  553. Standard programming
  554. The Flash memory programming sequence is as follows:
  555. 1. Check that no main Flash memory operation is ongoing by checking the BSY bit in the
  556. FLASH_SR register.
  557. 2. Set the PG bit in the FLASH_CR register
  558. 3. Perform the data write operation(s) to the desired memory address (inside main
  559. memory block or OTP area):
  560. – – Half-word access in case of x16 parallelism
  561. – Word access in case of x32 parallelism
  562. 4.
  563. Byte access in case of x8 parallelism
  564. Double word access in case of x64 parallelism
  565. Wait for the BSY bit to be cleared
  566. */
  567. while (words_remaining > 0) {
  568. uint16_t value;
  569. memcpy(&value, buffer + bytes_written, sizeof(uint16_t));
  570. retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR),
  571. FLASH_PG | FLASH_PSIZE_16);
  572. if (retval != ERROR_OK)
  573. return retval;
  574. retval = target_write_u16(target, address, value);
  575. if (retval != ERROR_OK)
  576. return retval;
  577. retval = stm32x_wait_status_busy(bank, FLASH_WRITE_TIMEOUT);
  578. if (retval != ERROR_OK)
  579. return retval;
  580. bytes_written += 2;
  581. words_remaining--;
  582. address += 2;
  583. }
  584. if (bytes_remaining) {
  585. retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR),
  586. FLASH_PG | FLASH_PSIZE_8);
  587. if (retval != ERROR_OK)
  588. return retval;
  589. retval = target_write_u8(target, address, buffer[bytes_written]);
  590. if (retval != ERROR_OK)
  591. return retval;
  592. retval = stm32x_wait_status_busy(bank, FLASH_WRITE_TIMEOUT);
  593. if (retval != ERROR_OK)
  594. return retval;
  595. }
  596. return target_write_u32(target, STM32_FLASH_CR, FLASH_LOCK);
  597. }
  598. static void setup_sector(struct flash_bank *bank, int start, int num, int size)
  599. {
  600. for (int i = start; i < (start + num) ; i++) {
  601. assert(i < bank->num_sectors);
  602. bank->sectors[i].offset = bank->size;
  603. bank->sectors[i].size = size;
  604. bank->size += bank->sectors[i].size;
  605. }
  606. }
  607. static int stm32x_get_device_id(struct flash_bank *bank, uint32_t *device_id)
  608. {
  609. /* this checks for a stm32f4x errata issue where a
  610. * stm32f2x DBGMCU_IDCODE is incorrectly returned.
  611. * If the issue is detected target is forced to stm32f4x Rev A.
  612. * Only effects Rev A silicon */
  613. struct target *target = bank->target;
  614. uint32_t cpuid;
  615. /* read stm32 device id register */
  616. int retval = target_read_u32(target, 0xE0042000, device_id);
  617. if (retval != ERROR_OK)
  618. return retval;
  619. if ((*device_id & 0xfff) == 0x411) {
  620. /* read CPUID reg to check core type */
  621. retval = target_read_u32(target, 0xE000ED00, &cpuid);
  622. if (retval != ERROR_OK)
  623. return retval;
  624. /* check for cortex_m4 */
  625. if (((cpuid >> 4) & 0xFFF) == 0xC24) {
  626. *device_id &= ~((0xFFFF << 16) | 0xfff);
  627. *device_id |= (0x1000 << 16) | 0x413;
  628. LOG_INFO("stm32f4x errata detected - fixing incorrect MCU_IDCODE");
  629. }
  630. }
  631. return retval;
  632. }
  633. static int stm32x_probe(struct flash_bank *bank)
  634. {
  635. struct target *target = bank->target;
  636. struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
  637. int i;
  638. uint16_t flash_size_in_kb;
  639. uint32_t flash_size_reg = 0x1FFF7A22;
  640. uint16_t max_sector_size_in_kb = 128;
  641. uint16_t max_flash_size_in_kb;
  642. uint32_t device_id;
  643. uint32_t base_address = 0x08000000;
  644. stm32x_info->probed = 0;
  645. stm32x_info->has_large_mem = false;
  646. /* read stm32 device id register */
  647. int retval = stm32x_get_device_id(bank, &device_id);
  648. if (retval != ERROR_OK)
  649. return retval;
  650. LOG_INFO("device id = 0x%08" PRIx32 "", device_id);
  651. /* set max flash size depending on family */
  652. switch (device_id & 0xfff) {
  653. case 0x411:
  654. case 0x413:
  655. max_flash_size_in_kb = 1024;
  656. break;
  657. case 0x419:
  658. case 0x434:
  659. max_flash_size_in_kb = 2048;
  660. break;
  661. case 0x423:
  662. max_flash_size_in_kb = 256;
  663. break;
  664. case 0x431:
  665. case 0x433:
  666. case 0x421:
  667. max_flash_size_in_kb = 512;
  668. break;
  669. case 0x449:
  670. max_flash_size_in_kb = 1024;
  671. max_sector_size_in_kb = 256;
  672. flash_size_reg = 0x1FF0F442;
  673. break;
  674. default:
  675. LOG_WARNING("Cannot identify target as a STM32 family.");
  676. return ERROR_FAIL;
  677. }
  678. /* get flash size from target. */
  679. retval = target_read_u16(target, flash_size_reg, &flash_size_in_kb);
  680. /* failed reading flash size or flash size invalid (early silicon),
  681. * default to max target family */
  682. if (retval != ERROR_OK || flash_size_in_kb == 0xffff || flash_size_in_kb == 0) {
  683. LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming %dk flash",
  684. max_flash_size_in_kb);
  685. flash_size_in_kb = max_flash_size_in_kb;
  686. }
  687. /* if the user sets the size manually then ignore the probed value
  688. * this allows us to work around devices that have a invalid flash size register value */
  689. if (stm32x_info->user_bank_size) {
  690. LOG_INFO("ignoring flash probed value, using configured bank size");
  691. flash_size_in_kb = stm32x_info->user_bank_size / 1024;
  692. }
  693. LOG_INFO("flash size = %dkbytes", flash_size_in_kb);
  694. /* did we assign flash size? */
  695. assert(flash_size_in_kb != 0xffff);
  696. /* calculate numbers of pages */
  697. int num_pages = (flash_size_in_kb / max_sector_size_in_kb) + 4;
  698. /* Devices with > 1024 kiByte always are dual-banked */
  699. if (flash_size_in_kb > 1024)
  700. stm32x_info->has_large_mem = true;
  701. /* F42x/43x 1024 kiByte devices have a dual bank option */
  702. if ((device_id & 0xfff) == 0x419 && (flash_size_in_kb == 1024)) {
  703. uint32_t optiondata;
  704. retval = target_read_u32(target, STM32_FLASH_OPTCR, &optiondata);
  705. if (retval != ERROR_OK) {
  706. LOG_DEBUG("unable to read option bytes");
  707. return retval;
  708. }
  709. if (optiondata & (1 << OPT_DB1M)) {
  710. stm32x_info->has_large_mem = true;
  711. LOG_INFO("Dual Bank 1024 kiB STM32F42x/43x found");
  712. }
  713. }
  714. /* check for dual-banked devices */
  715. if (stm32x_info->has_large_mem)
  716. num_pages += 4;
  717. /* check that calculation result makes sense */
  718. assert(num_pages > 0);
  719. if (bank->sectors) {
  720. free(bank->sectors);
  721. bank->sectors = NULL;
  722. }
  723. bank->base = base_address;
  724. bank->num_sectors = num_pages;
  725. bank->sectors = malloc(sizeof(struct flash_sector) * num_pages);
  726. bank->size = 0;
  727. /* fixed memory */
  728. setup_sector(bank, 0, 4, (max_sector_size_in_kb / 8) * 1024);
  729. setup_sector(bank, 4, 1, (max_sector_size_in_kb / 2) * 1024);
  730. if (stm32x_info->has_large_mem) {
  731. if (flash_size_in_kb == 1024) {
  732. setup_sector(bank, 5, 3, 128 * 1024);
  733. setup_sector(bank, 12, 4, 16 * 1024);
  734. setup_sector(bank, 16, 1, 64 * 1024);
  735. setup_sector(bank, 17, 3, 128 * 1024);
  736. } else {
  737. setup_sector(bank, 5, 7, 128 * 1024);
  738. setup_sector(bank, 12, 4, 16 * 1024);
  739. setup_sector(bank, 16, 1, 64 * 1024);
  740. setup_sector(bank, 17, 7, 128 * 1024);
  741. }
  742. } else {
  743. setup_sector(bank, 4 + 1, MIN(12, num_pages) - 5,
  744. max_sector_size_in_kb * 1024);
  745. }
  746. for (i = 0; i < num_pages; i++) {
  747. bank->sectors[i].is_erased = -1;
  748. bank->sectors[i].is_protected = 0;
  749. }
  750. stm32x_info->probed = 1;
  751. return ERROR_OK;
  752. }
  753. static int stm32x_auto_probe(struct flash_bank *bank)
  754. {
  755. struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
  756. if (stm32x_info->probed)
  757. return ERROR_OK;
  758. return stm32x_probe(bank);
  759. }
  760. static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size)
  761. {
  762. uint32_t dbgmcu_idcode;
  763. /* read stm32 device id register */
  764. int retval = stm32x_get_device_id(bank, &dbgmcu_idcode);
  765. if (retval != ERROR_OK)
  766. return retval;
  767. uint16_t device_id = dbgmcu_idcode & 0xfff;
  768. uint16_t rev_id = dbgmcu_idcode >> 16;
  769. const char *device_str;
  770. const char *rev_str = NULL;
  771. switch (device_id) {
  772. case 0x411:
  773. device_str = "STM32F2xx";
  774. switch (rev_id) {
  775. case 0x1000:
  776. rev_str = "A";
  777. break;
  778. case 0x2000:
  779. rev_str = "B";
  780. break;
  781. case 0x1001:
  782. rev_str = "Z";
  783. break;
  784. case 0x2001:
  785. rev_str = "Y";
  786. break;
  787. case 0x2003:
  788. rev_str = "X";
  789. break;
  790. }
  791. break;
  792. case 0x413:
  793. case 0x419:
  794. case 0x434:
  795. device_str = "STM32F4xx";
  796. switch (rev_id) {
  797. case 0x1000:
  798. rev_str = "A";
  799. break;
  800. case 0x1001:
  801. rev_str = "Z";
  802. break;
  803. case 0x1003:
  804. rev_str = "Y";
  805. break;
  806. case 0x1007:
  807. rev_str = "1";
  808. break;
  809. case 0x2001:
  810. rev_str = "3";
  811. break;
  812. }
  813. break;
  814. case 0x421:
  815. device_str = "STM32F446";
  816. switch (rev_id) {
  817. case 0x1000:
  818. rev_str = "A";
  819. break;
  820. }
  821. break;
  822. case 0x423:
  823. case 0x431:
  824. case 0x433:
  825. device_str = "STM32F4xx (Low Power)";
  826. switch (rev_id) {
  827. case 0x1000:
  828. rev_str = "A";
  829. break;
  830. case 0x1001:
  831. rev_str = "Z";
  832. break;
  833. }
  834. break;
  835. case 0x449:
  836. device_str = "STM32F7[4|5]x";
  837. switch (rev_id) {
  838. case 0x1000:
  839. rev_str = "A";
  840. break;
  841. case 0x1001:
  842. rev_str = "Z";
  843. break;
  844. }
  845. break;
  846. default:
  847. snprintf(buf, buf_size, "Cannot identify target as a STM32F2/4/7\n");
  848. return ERROR_FAIL;
  849. }
  850. if (rev_str != NULL)
  851. snprintf(buf, buf_size, "%s - Rev: %s", device_str, rev_str);
  852. else
  853. snprintf(buf, buf_size, "%s - Rev: unknown (0x%04x)", device_str, rev_id);
  854. return ERROR_OK;
  855. }
  856. COMMAND_HANDLER(stm32x_handle_lock_command)
  857. {
  858. struct target *target = NULL;
  859. struct stm32x_flash_bank *stm32x_info = NULL;
  860. if (CMD_ARGC < 1)
  861. return ERROR_COMMAND_SYNTAX_ERROR;
  862. struct flash_bank *bank;
  863. int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
  864. if (ERROR_OK != retval)
  865. return retval;
  866. stm32x_info = bank->driver_priv;
  867. target = bank->target;
  868. if (target->state != TARGET_HALTED) {
  869. LOG_ERROR("Target not halted");
  870. return ERROR_TARGET_NOT_HALTED;
  871. }
  872. if (stm32x_read_options(bank) != ERROR_OK) {
  873. command_print(CMD_CTX, "%s failed to read options", bank->driver->name);
  874. return ERROR_OK;
  875. }
  876. /* set readout protection */
  877. stm32x_info->option_bytes.RDP = 0;
  878. if (stm32x_write_options(bank) != ERROR_OK) {
  879. command_print(CMD_CTX, "%s failed to lock device", bank->driver->name);
  880. return ERROR_OK;
  881. }
  882. command_print(CMD_CTX, "%s locked", bank->driver->name);
  883. return ERROR_OK;
  884. }
  885. COMMAND_HANDLER(stm32x_handle_unlock_command)
  886. {
  887. struct target *target = NULL;
  888. struct stm32x_flash_bank *stm32x_info = NULL;
  889. if (CMD_ARGC < 1)
  890. return ERROR_COMMAND_SYNTAX_ERROR;
  891. struct flash_bank *bank;
  892. int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
  893. if (ERROR_OK != retval)
  894. return retval;
  895. stm32x_info = bank->driver_priv;
  896. target = bank->target;
  897. if (target->state != TARGET_HALTED) {
  898. LOG_ERROR("Target not halted");
  899. return ERROR_TARGET_NOT_HALTED;
  900. }
  901. if (stm32x_read_options(bank) != ERROR_OK) {
  902. command_print(CMD_CTX, "%s failed to read options", bank->driver->name);
  903. return ERROR_OK;
  904. }
  905. /* clear readout protection and complementary option bytes
  906. * this will also force a device unlock if set */
  907. stm32x_info->option_bytes.RDP = 0xAA;
  908. if (stm32x_write_options(bank) != ERROR_OK) {
  909. command_print(CMD_CTX, "%s failed to unlock device", bank->driver->name);
  910. return ERROR_OK;
  911. }
  912. command_print(CMD_CTX, "%s unlocked.\n"
  913. "INFO: a reset or power cycle is required "
  914. "for the new settings to take effect.", bank->driver->name);
  915. return ERROR_OK;
  916. }
  917. static int stm32x_mass_erase(struct flash_bank *bank)
  918. {
  919. int retval;
  920. struct target *target = bank->target;
  921. struct stm32x_flash_bank *stm32x_info = NULL;
  922. if (target->state != TARGET_HALTED) {
  923. LOG_ERROR("Target not halted");
  924. return ERROR_TARGET_NOT_HALTED;
  925. }
  926. stm32x_info = bank->driver_priv;
  927. retval = stm32x_unlock_reg(target);
  928. if (retval != ERROR_OK)
  929. return retval;
  930. /* mass erase flash memory */
  931. if (stm32x_info->has_large_mem)
  932. retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_MER | FLASH_MER1);
  933. else
  934. retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_MER);
  935. if (retval != ERROR_OK)
  936. return retval;
  937. retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR),
  938. FLASH_MER | FLASH_STRT);
  939. if (retval != ERROR_OK)
  940. return retval;
  941. retval = stm32x_wait_status_busy(bank, 30000);
  942. if (retval != ERROR_OK)
  943. return retval;
  944. retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_LOCK);
  945. if (retval != ERROR_OK)
  946. return retval;
  947. return ERROR_OK;
  948. }
  949. COMMAND_HANDLER(stm32x_handle_mass_erase_command)
  950. {
  951. int i;
  952. if (CMD_ARGC < 1) {
  953. command_print(CMD_CTX, "stm32x mass_erase <bank>");
  954. return ERROR_COMMAND_SYNTAX_ERROR;
  955. }
  956. struct flash_bank *bank;
  957. int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
  958. if (ERROR_OK != retval)
  959. return retval;
  960. retval = stm32x_mass_erase(bank);
  961. if (retval == ERROR_OK) {
  962. /* set all sectors as erased */
  963. for (i = 0; i < bank->num_sectors; i++)
  964. bank->sectors[i].is_erased = 1;
  965. command_print(CMD_CTX, "stm32x mass erase complete");
  966. } else {
  967. command_print(CMD_CTX, "stm32x mass erase failed");
  968. }
  969. return retval;
  970. }
  971. static const struct command_registration stm32x_exec_command_handlers[] = {
  972. {
  973. .name = "lock",
  974. .handler = stm32x_handle_lock_command,
  975. .mode = COMMAND_EXEC,
  976. .usage = "bank_id",
  977. .help = "Lock entire flash device.",
  978. },
  979. {
  980. .name = "unlock",
  981. .handler = stm32x_handle_unlock_command,
  982. .mode = COMMAND_EXEC,
  983. .usage = "bank_id",
  984. .help = "Unlock entire protected flash device.",
  985. },
  986. {
  987. .name = "mass_erase",
  988. .handler = stm32x_handle_mass_erase_command,
  989. .mode = COMMAND_EXEC,
  990. .usage = "bank_id",
  991. .help = "Erase entire flash device.",
  992. },
  993. COMMAND_REGISTRATION_DONE
  994. };
  995. static const struct command_registration stm32x_command_handlers[] = {
  996. {
  997. .name = "stm32f2x",
  998. .mode = COMMAND_ANY,
  999. .help = "stm32f2x flash command group",
  1000. .usage = "",
  1001. .chain = stm32x_exec_command_handlers,
  1002. },
  1003. COMMAND_REGISTRATION_DONE
  1004. };
  1005. struct flash_driver stm32f2x_flash = {
  1006. .name = "stm32f2x",
  1007. .commands = stm32x_command_handlers,
  1008. .flash_bank_command = stm32x_flash_bank_command,
  1009. .erase = stm32x_erase,
  1010. .protect = stm32x_protect,
  1011. .write = stm32x_write,
  1012. .read = default_flash_read,
  1013. .probe = stm32x_probe,
  1014. .auto_probe = stm32x_auto_probe,
  1015. .erase_check = default_flash_blank_check,
  1016. .protect_check = stm32x_protect_check,
  1017. .info = get_stm32x_info,
  1018. };