Skip to content

Commit 0d1c6c2

Browse files
committed
F429 + F439 : changes after code review
GetSector has been rewritten
1 parent 634df41 commit 0d1c6c2

File tree

2 files changed

+58
-232
lines changed

2 files changed

+58
-232
lines changed

targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/flash_api.c

Lines changed: 29 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data,
113113
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, address, (uint64_t)*data) != HAL_OK) {
114114
return -1;
115115
} else {
116-
size--; address++;data++;
116+
size--;
117+
address++;
118+
data++;
117119
}
118120
}
119121
return 0;
@@ -150,105 +152,21 @@ uint32_t flash_get_size(const flash_t *obj)
150152
*/
151153
static uint32_t GetSector(uint32_t address)
152154
{
153-
uint32_t sector = 0;
154-
155-
if((address < ADDR_FLASH_SECTOR_1) && (address >= ADDR_FLASH_SECTOR_0))
156-
{
157-
sector = FLASH_SECTOR_0;
158-
}
159-
else if((address < ADDR_FLASH_SECTOR_2) && (address >= ADDR_FLASH_SECTOR_1))
160-
{
161-
sector = FLASH_SECTOR_1;
162-
}
163-
else if((address < ADDR_FLASH_SECTOR_3) && (address >= ADDR_FLASH_SECTOR_2))
164-
{
165-
sector = FLASH_SECTOR_2;
166-
}
167-
else if((address < ADDR_FLASH_SECTOR_4) && (address >= ADDR_FLASH_SECTOR_3))
168-
{
169-
sector = FLASH_SECTOR_3;
170-
}
171-
else if((address < ADDR_FLASH_SECTOR_5) && (address >= ADDR_FLASH_SECTOR_4))
172-
{
173-
sector = FLASH_SECTOR_4;
174-
}
175-
else if((address < ADDR_FLASH_SECTOR_6) && (address >= ADDR_FLASH_SECTOR_5))
176-
{
177-
sector = FLASH_SECTOR_5;
178-
}
179-
else if((address < ADDR_FLASH_SECTOR_7) && (address >= ADDR_FLASH_SECTOR_6))
180-
{
181-
sector = FLASH_SECTOR_6;
182-
}
183-
else if((address < ADDR_FLASH_SECTOR_8) && (address >= ADDR_FLASH_SECTOR_7))
184-
{
185-
sector = FLASH_SECTOR_7;
186-
}
187-
else if((address < ADDR_FLASH_SECTOR_9) && (address >= ADDR_FLASH_SECTOR_8))
188-
{
189-
sector = FLASH_SECTOR_8;
190-
}
191-
else if((address < ADDR_FLASH_SECTOR_10) && (address >= ADDR_FLASH_SECTOR_9))
192-
{
193-
sector = FLASH_SECTOR_9;
194-
}
195-
else if((address < ADDR_FLASH_SECTOR_11) && (address >= ADDR_FLASH_SECTOR_10))
196-
{
197-
sector = FLASH_SECTOR_10;
198-
}
199-
else if((address < ADDR_FLASH_SECTOR_12) && (address >= ADDR_FLASH_SECTOR_11))
200-
{
201-
sector = FLASH_SECTOR_11;
202-
}
203-
else if((address < ADDR_FLASH_SECTOR_13) && (address >= ADDR_FLASH_SECTOR_12))
204-
{
205-
sector = FLASH_SECTOR_12;
206-
}
207-
else if((address < ADDR_FLASH_SECTOR_14) && (address >= ADDR_FLASH_SECTOR_13))
208-
{
209-
sector = FLASH_SECTOR_13;
210-
}
211-
else if((address < ADDR_FLASH_SECTOR_15) && (address >= ADDR_FLASH_SECTOR_14))
212-
{
213-
sector = FLASH_SECTOR_14;
214-
}
215-
else if((address < ADDR_FLASH_SECTOR_16) && (address >= ADDR_FLASH_SECTOR_15))
216-
{
217-
sector = FLASH_SECTOR_15;
218-
}
219-
else if((address < ADDR_FLASH_SECTOR_17) && (address >= ADDR_FLASH_SECTOR_16))
220-
{
221-
sector = FLASH_SECTOR_16;
222-
}
223-
else if((address < ADDR_FLASH_SECTOR_18) && (address >= ADDR_FLASH_SECTOR_17))
224-
{
225-
sector = FLASH_SECTOR_17;
226-
}
227-
else if((address < ADDR_FLASH_SECTOR_19) && (address >= ADDR_FLASH_SECTOR_18))
228-
{
229-
sector = FLASH_SECTOR_18;
230-
}
231-
else if((address < ADDR_FLASH_SECTOR_20) && (address >= ADDR_FLASH_SECTOR_19))
232-
{
233-
sector = FLASH_SECTOR_19;
234-
}
235-
else if((address < ADDR_FLASH_SECTOR_21) && (address >= ADDR_FLASH_SECTOR_20))
236-
{
237-
sector = FLASH_SECTOR_20;
238-
}
239-
else if((address < ADDR_FLASH_SECTOR_22) && (address >= ADDR_FLASH_SECTOR_21))
240-
{
241-
sector = FLASH_SECTOR_21;
242-
}
243-
else if((address < ADDR_FLASH_SECTOR_23) && (address >= ADDR_FLASH_SECTOR_22))
244-
{
245-
sector = FLASH_SECTOR_22;
246-
}
247-
else/*(address < FLASH_END_ADDR) && (address >= ADDR_FLASH_SECTOR_23))*/
248-
{
249-
sector = FLASH_SECTOR_23;
250-
}
251-
155+
uint32_t sector = 0;
156+
uint32_t tmp = address - ADDR_FLASH_SECTOR_0;
157+
if (address & 0x100000) { // handle 2nd bank
158+
sector = FLASH_SECTOR_12;
159+
tmp = address - ADDR_FLASH_SECTOR_12;
160+
}
161+
if (address < ADDR_FLASH_SECTOR_4) { // 16k sectorsize
162+
//printf("tmp for sectors less than 4: 0X%4x")
163+
sector += tmp >>14;
164+
} else if (address < ADDR_FLASH_SECTOR_5) { //64k sector size
165+
sector += FLASH_SECTOR_4;
166+
} else {
167+
sector += 4 + (tmp >>17);
168+
}
169+
printf("address:0X%04x%04x, secteur: %d\n", (address>>16)&0XFFFF, (address&0XFFFF), sector);
252170
return sector;
253171
}
254172

@@ -259,22 +177,17 @@ static uint32_t GetSector(uint32_t address)
259177
*/
260178
static uint32_t GetSectorSize(uint32_t Sector)
261179
{
262-
uint32_t sectorsize = 0x00;
263-
if((Sector == FLASH_SECTOR_0) || (Sector == FLASH_SECTOR_1) || (Sector == FLASH_SECTOR_2) ||\
264-
(Sector == FLASH_SECTOR_3) || (Sector == FLASH_SECTOR_12) || (Sector == FLASH_SECTOR_13) ||\
265-
(Sector == FLASH_SECTOR_14) || (Sector == FLASH_SECTOR_15))
266-
{
267-
sectorsize = 16 * 1024;
268-
}
269-
else if((Sector == FLASH_SECTOR_4) || (Sector == FLASH_SECTOR_16))
270-
{
271-
sectorsize = 64 * 1024;
272-
}
273-
else
274-
{
275-
sectorsize = 128 * 1024;
276-
}
277-
return sectorsize;
180+
uint32_t sectorsize = 0x00;
181+
if((Sector == FLASH_SECTOR_0) || (Sector == FLASH_SECTOR_1) || (Sector == FLASH_SECTOR_2) ||\
182+
(Sector == FLASH_SECTOR_3) || (Sector == FLASH_SECTOR_12) || (Sector == FLASH_SECTOR_13) ||\
183+
(Sector == FLASH_SECTOR_14) || (Sector == FLASH_SECTOR_15)) {
184+
sectorsize = 16 * 1024;
185+
} else if((Sector == FLASH_SECTOR_4) || (Sector == FLASH_SECTOR_16)){
186+
sectorsize = 64 * 1024;
187+
} else {
188+
sectorsize = 128 * 1024;
189+
}
190+
return sectorsize;
278191
}
279192

280193
#endif

targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/flash_api.c

Lines changed: 29 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data,
113113
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, address, (uint64_t)*data) != HAL_OK) {
114114
return -1;
115115
} else {
116-
size--; address++;data++;
116+
size--;
117+
address++;
118+
data++;
117119
}
118120
}
119121
return 0;
@@ -150,105 +152,21 @@ uint32_t flash_get_size(const flash_t *obj)
150152
*/
151153
static uint32_t GetSector(uint32_t address)
152154
{
153-
uint32_t sector = 0;
154-
155-
if((address < ADDR_FLASH_SECTOR_1) && (address >= ADDR_FLASH_SECTOR_0))
156-
{
157-
sector = FLASH_SECTOR_0;
158-
}
159-
else if((address < ADDR_FLASH_SECTOR_2) && (address >= ADDR_FLASH_SECTOR_1))
160-
{
161-
sector = FLASH_SECTOR_1;
162-
}
163-
else if((address < ADDR_FLASH_SECTOR_3) && (address >= ADDR_FLASH_SECTOR_2))
164-
{
165-
sector = FLASH_SECTOR_2;
166-
}
167-
else if((address < ADDR_FLASH_SECTOR_4) && (address >= ADDR_FLASH_SECTOR_3))
168-
{
169-
sector = FLASH_SECTOR_3;
170-
}
171-
else if((address < ADDR_FLASH_SECTOR_5) && (address >= ADDR_FLASH_SECTOR_4))
172-
{
173-
sector = FLASH_SECTOR_4;
174-
}
175-
else if((address < ADDR_FLASH_SECTOR_6) && (address >= ADDR_FLASH_SECTOR_5))
176-
{
177-
sector = FLASH_SECTOR_5;
178-
}
179-
else if((address < ADDR_FLASH_SECTOR_7) && (address >= ADDR_FLASH_SECTOR_6))
180-
{
181-
sector = FLASH_SECTOR_6;
182-
}
183-
else if((address < ADDR_FLASH_SECTOR_8) && (address >= ADDR_FLASH_SECTOR_7))
184-
{
185-
sector = FLASH_SECTOR_7;
186-
}
187-
else if((address < ADDR_FLASH_SECTOR_9) && (address >= ADDR_FLASH_SECTOR_8))
188-
{
189-
sector = FLASH_SECTOR_8;
190-
}
191-
else if((address < ADDR_FLASH_SECTOR_10) && (address >= ADDR_FLASH_SECTOR_9))
192-
{
193-
sector = FLASH_SECTOR_9;
194-
}
195-
else if((address < ADDR_FLASH_SECTOR_11) && (address >= ADDR_FLASH_SECTOR_10))
196-
{
197-
sector = FLASH_SECTOR_10;
198-
}
199-
else if((address < ADDR_FLASH_SECTOR_12) && (address >= ADDR_FLASH_SECTOR_11))
200-
{
201-
sector = FLASH_SECTOR_11;
202-
}
203-
else if((address < ADDR_FLASH_SECTOR_13) && (address >= ADDR_FLASH_SECTOR_12))
204-
{
205-
sector = FLASH_SECTOR_12;
206-
}
207-
else if((address < ADDR_FLASH_SECTOR_14) && (address >= ADDR_FLASH_SECTOR_13))
208-
{
209-
sector = FLASH_SECTOR_13;
210-
}
211-
else if((address < ADDR_FLASH_SECTOR_15) && (address >= ADDR_FLASH_SECTOR_14))
212-
{
213-
sector = FLASH_SECTOR_14;
214-
}
215-
else if((address < ADDR_FLASH_SECTOR_16) && (address >= ADDR_FLASH_SECTOR_15))
216-
{
217-
sector = FLASH_SECTOR_15;
218-
}
219-
else if((address < ADDR_FLASH_SECTOR_17) && (address >= ADDR_FLASH_SECTOR_16))
220-
{
221-
sector = FLASH_SECTOR_16;
222-
}
223-
else if((address < ADDR_FLASH_SECTOR_18) && (address >= ADDR_FLASH_SECTOR_17))
224-
{
225-
sector = FLASH_SECTOR_17;
226-
}
227-
else if((address < ADDR_FLASH_SECTOR_19) && (address >= ADDR_FLASH_SECTOR_18))
228-
{
229-
sector = FLASH_SECTOR_18;
230-
}
231-
else if((address < ADDR_FLASH_SECTOR_20) && (address >= ADDR_FLASH_SECTOR_19))
232-
{
233-
sector = FLASH_SECTOR_19;
234-
}
235-
else if((address < ADDR_FLASH_SECTOR_21) && (address >= ADDR_FLASH_SECTOR_20))
236-
{
237-
sector = FLASH_SECTOR_20;
238-
}
239-
else if((address < ADDR_FLASH_SECTOR_22) && (address >= ADDR_FLASH_SECTOR_21))
240-
{
241-
sector = FLASH_SECTOR_21;
242-
}
243-
else if((address < ADDR_FLASH_SECTOR_23) && (address >= ADDR_FLASH_SECTOR_22))
244-
{
245-
sector = FLASH_SECTOR_22;
246-
}
247-
else/*(address < FLASH_END_ADDR) && (address >= ADDR_FLASH_SECTOR_23))*/
248-
{
249-
sector = FLASH_SECTOR_23;
250-
}
251-
155+
uint32_t sector = 0;
156+
uint32_t tmp = address - ADDR_FLASH_SECTOR_0;
157+
if (address & 0x100000) { // handle 2nd bank
158+
sector = FLASH_SECTOR_12;
159+
tmp = address - ADDR_FLASH_SECTOR_12;
160+
}
161+
if (address < ADDR_FLASH_SECTOR_4) { // 16k sectorsize
162+
//printf("tmp for sectors less than 4: 0X%4x")
163+
sector += tmp >>14;
164+
} else if (address < ADDR_FLASH_SECTOR_5) { //64k sector size
165+
sector += FLASH_SECTOR_4;
166+
} else {
167+
sector += 4 + (tmp >>17);
168+
}
169+
printf("address:0X%04x%04x, secteur: %d\n", (address>>16)&0XFFFF, (address&0XFFFF), sector);
252170
return sector;
253171
}
254172

@@ -259,22 +177,17 @@ static uint32_t GetSector(uint32_t address)
259177
*/
260178
static uint32_t GetSectorSize(uint32_t Sector)
261179
{
262-
uint32_t sectorsize = 0x00;
263-
if((Sector == FLASH_SECTOR_0) || (Sector == FLASH_SECTOR_1) || (Sector == FLASH_SECTOR_2) ||\
264-
(Sector == FLASH_SECTOR_3) || (Sector == FLASH_SECTOR_12) || (Sector == FLASH_SECTOR_13) ||\
265-
(Sector == FLASH_SECTOR_14) || (Sector == FLASH_SECTOR_15))
266-
{
267-
sectorsize = 16 * 1024;
268-
}
269-
else if((Sector == FLASH_SECTOR_4) || (Sector == FLASH_SECTOR_16))
270-
{
271-
sectorsize = 64 * 1024;
272-
}
273-
else
274-
{
275-
sectorsize = 128 * 1024;
276-
}
277-
return sectorsize;
180+
uint32_t sectorsize = 0x00;
181+
if((Sector == FLASH_SECTOR_0) || (Sector == FLASH_SECTOR_1) || (Sector == FLASH_SECTOR_2) ||\
182+
(Sector == FLASH_SECTOR_3) || (Sector == FLASH_SECTOR_12) || (Sector == FLASH_SECTOR_13) ||\
183+
(Sector == FLASH_SECTOR_14) || (Sector == FLASH_SECTOR_15)) {
184+
sectorsize = 16 * 1024;
185+
} else if((Sector == FLASH_SECTOR_4) || (Sector == FLASH_SECTOR_16)){
186+
sectorsize = 64 * 1024;
187+
} else {
188+
sectorsize = 128 * 1024;
189+
}
190+
return sectorsize;
278191
}
279192

280193
#endif

0 commit comments

Comments
 (0)