42 lines
1.4 KiB
Diff
42 lines
1.4 KiB
Diff
From 93b4cfb7d73dd467be1a6688e400135a0b007421 Mon Sep 17 00:00:00 2001
|
|
From: Martino Facchin <m.facchin@arduino.cc>
|
|
Date: Tue, 13 Apr 2021 12:20:06 +0200
|
|
Subject: [PATCH 054/204] RP2040: FLASH: fix multipage write
|
|
|
|
---
|
|
.../TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c | 16 ++++++----------
|
|
1 file changed, 6 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c
|
|
index fb1a28dd7f..2ebfc40a04 100644
|
|
--- a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c
|
|
+++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c
|
|
@@ -71,18 +71,14 @@ int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data,
|
|
return -1;
|
|
}
|
|
|
|
- uint8_t buf[FLASH_PAGE_SIZE];
|
|
-
|
|
- for (int j = 0; j < size/FLASH_PAGE_SIZE; j++) {
|
|
- for (int i = 0; i < FLASH_PAGE_SIZE; i++) {
|
|
- buf[i] = data[j*FLASH_PAGE_SIZE + i];
|
|
- }
|
|
- address = address + j*FLASH_PAGE_SIZE;
|
|
- core_util_critical_section_enter();
|
|
- flash_range_program(address, buf, FLASH_PAGE_SIZE);
|
|
- core_util_critical_section_exit();
|
|
+ size_t pages = size/FLASH_PAGE_SIZE;
|
|
+ if (size%FLASH_PAGE_SIZE != 0) {
|
|
+ pages += 1;
|
|
}
|
|
|
|
+ core_util_critical_section_enter();
|
|
+ flash_range_program(address, data, FLASH_PAGE_SIZE * pages);
|
|
+ core_util_critical_section_exit();
|
|
|
|
return 0;
|
|
|
|
--
|
|
2.39.1
|
|
|