From 5dcd45d8a48aaead2a2d1d1b9c36ab14f507628b Mon Sep 17 00:00:00 2001 From: Jim Paris Date: Fri, 31 Jan 2014 16:26:35 -0500 Subject: [PATCH] When ignoring the end of a file, make sure we don't ignore partial words. Consider a 128-byte write to the chip. If the last 2 bytes are considered "empty", then len is adjusted to 126, and run_flash_loader will only copy 126 bytes to RAM. However, run_flash_loader then proceeds to round up to 32 words (128 bytes) when flashing, which has the effect of clobbering those last two "empty" bytes with junk data. --- src/stlink-common.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/stlink-common.c b/src/stlink-common.c index b7645fe..b942dea 100644 --- a/src/stlink-common.c +++ b/src/stlink-common.c @@ -1752,8 +1752,10 @@ int stlink_fwrite_flash(stlink_t *sl, const char* path, stm32_addr_t addr) { else num_empty = 0; } + /* Round down to words */ + num_empty -= (num_empty & 3); if(num_empty != 0) { - ILOG("Ignoring %d bytes of Zeros at end of file\n",num_empty); + ILOG("Ignoring %d bytes of 0x%02x at end of file\n", num_empty, erased_pattern); mf.len -= num_empty; } err = stlink_write_flash(sl, addr, mf.base, mf.len); -- 2.47.2