|
| 1 | +From e8e2a401550e456862311fcd191a2abb7bd3a7b7 Mon Sep 17 00:00:00 2001 |
| 2 | +From: Martino Facchin < [email protected]> |
| 3 | +Date: Tue, 13 Apr 2021 12:20:06 +0200 |
| 4 | +Subject: [PATCH] RP2040: FLASH: fix multipage write |
| 5 | + |
| 6 | +--- |
| 7 | + .../TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c | 16 ++++++---------- |
| 8 | + 1 file changed, 6 insertions(+), 10 deletions(-) |
| 9 | + |
| 10 | +diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c |
| 11 | +index fb1a28dd7f..2ebfc40a04 100644 |
| 12 | +--- a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c |
| 13 | ++++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c |
| 14 | +@@ -71,18 +71,14 @@ int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data, |
| 15 | + return -1; |
| 16 | + } |
| 17 | + |
| 18 | +- uint8_t buf[FLASH_PAGE_SIZE]; |
| 19 | +- |
| 20 | +- for (int j = 0; j < size/FLASH_PAGE_SIZE; j++) { |
| 21 | +- for (int i = 0; i < FLASH_PAGE_SIZE; i++) { |
| 22 | +- buf[i] = data[j*FLASH_PAGE_SIZE + i]; |
| 23 | +- } |
| 24 | +- address = address + j*FLASH_PAGE_SIZE; |
| 25 | +- core_util_critical_section_enter(); |
| 26 | +- flash_range_program(address, buf, FLASH_PAGE_SIZE); |
| 27 | +- core_util_critical_section_exit(); |
| 28 | ++ size_t pages = size/FLASH_PAGE_SIZE; |
| 29 | ++ if (size%FLASH_PAGE_SIZE != 0) { |
| 30 | ++ pages += 1; |
| 31 | + } |
| 32 | + |
| 33 | ++ core_util_critical_section_enter(); |
| 34 | ++ flash_range_program(address, data, FLASH_PAGE_SIZE * pages); |
| 35 | ++ core_util_critical_section_exit(); |
| 36 | + |
| 37 | + return 0; |
| 38 | + |
| 39 | +-- |
| 40 | +2.30.1 |
| 41 | + |
0 commit comments