aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/flash/nor/lpc2000.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/flash/nor/lpc2000.c b/src/flash/nor/lpc2000.c
index 76cd86b7..190684af 100644
--- a/src/flash/nor/lpc2000.c
+++ b/src/flash/nor/lpc2000.c
@@ -259,6 +259,8 @@
#define IAP_CODE_LEN 0x34
+#define LPC11xx_REG_SECTORS 24
+
typedef enum {
lpc2000_v1,
lpc2000_v2,
@@ -554,14 +556,21 @@ static int lpc2000_build_sector_list(struct flash_bank *bank)
exit(-1);
}
lpc2000_info->cmd51_max_buffer = 512; /* smallest MCU in the series, LPC1110, has 1 kB of SRAM */
- bank->num_sectors = bank->size / 4096;
+ unsigned int large_sectors = 0;
+ unsigned int normal_sectors = bank->size / 4096;
+
+ if (normal_sectors > LPC11xx_REG_SECTORS) {
+ large_sectors = (normal_sectors - LPC11xx_REG_SECTORS) / 8;
+ normal_sectors = LPC11xx_REG_SECTORS;
+ }
+
+ bank->num_sectors = normal_sectors + large_sectors;
bank->sectors = malloc(sizeof(struct flash_sector) * bank->num_sectors);
for (int i = 0; i < bank->num_sectors; i++) {
bank->sectors[i].offset = offset;
- /* all sectors are 4kB-sized */
- bank->sectors[i].size = 4 * 1024;
+ bank->sectors[i].size = (i < LPC11xx_REG_SECTORS ? 4 : 32) * 1024;
offset += bank->sectors[i].size;
bank->sectors[i].is_erased = -1;
bank->sectors[i].is_protected = 1;