@@ -113,7 +113,9 @@ int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data,
113
113
if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_BYTE , address , (uint64_t )* data ) != HAL_OK ) {
114
114
return -1 ;
115
115
} else {
116
- size -- ; address ++ ;data ++ ;
116
+ size -- ;
117
+ address ++ ;
118
+ data ++ ;
117
119
}
118
120
}
119
121
return 0 ;
@@ -150,105 +152,21 @@ uint32_t flash_get_size(const flash_t *obj)
150
152
*/
151
153
static uint32_t GetSector (uint32_t address )
152
154
{
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 );
252
170
return sector ;
253
171
}
254
172
@@ -259,22 +177,17 @@ static uint32_t GetSector(uint32_t address)
259
177
*/
260
178
static uint32_t GetSectorSize (uint32_t Sector )
261
179
{
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 ;
278
191
}
279
192
280
193
#endif
0 commit comments