24
24
// #include "option_bits.h"
25
25
#include " mbed.h"
26
26
#include " target.h"
27
- #include " QSPIFBlockDevice .h"
27
+ #include " BlockDevice .h"
28
28
#include " FlashSimBlockDevice.h"
29
29
#include " flash_map_backend/secondary_bd.h"
30
30
#include " bootutil/bootutil.h"
42
42
/* Private macro ------------------------------------------------------------- */
43
43
/* Private variables --------------------------------------------------------- */
44
44
/* Private function prototypes ----------------------------------------------- */
45
-
46
45
char BOOTLOADER_DESC_STR[48 ];
47
46
48
47
@@ -54,8 +53,8 @@ uint8_t *Flash_If_Read(uint8_t * src, uint8_t * dest, uint32_t Len);
54
53
uint16_t Flash_If_DeInit (void );
55
54
uint16_t Flash_If_GetStatus (uint32_t Add, uint8_t Cmd, uint8_t * buffer);
56
55
57
- FlashIAP flash;
58
- QSPIFBlockDevice qspi_flash (PD_11, PD_12, PF_7, PD_13, PF_10, PG_6, QSPIF_POLARITY_MODE_1, 40000000 );
56
+ extern FlashIAP flash;
57
+ mbed::BlockDevice* qspi_flash = mbed::BlockDevice::get_default_instance( );
59
58
mbed::BlockDevice* dfu_secondary_bd = get_secondary_bd();
60
59
61
60
const uint32_t QSPIFLASH_BASE_ADDRESS = 0x90000000 ;
@@ -80,8 +79,10 @@ bool Flash_If_Init_requested = false;
80
79
81
80
void init_Memories () {
82
81
flash.init ();
83
- qspi_flash.init ();
84
- dfu_secondary_bd->init ();
82
+ qspi_flash->init ();
83
+ if (dfu_secondary_bd != nullptr ) {
84
+ dfu_secondary_bd->init ();
85
+ }
85
86
snprintf (BOOTLOADER_DESC_STR, sizeof (BOOTLOADER_DESC_STR), " @MCUBoot version %d /0x00000000/0*4Kg" , BOOTLOADER_VERSION);
86
87
}
87
88
@@ -108,8 +109,10 @@ uint16_t Flash_If_Init(void)
108
109
uint16_t Flash_If_DeInit (void )
109
110
{
110
111
flash.deinit ();
111
- dfu_secondary_bd->deinit ();
112
- boot_set_pending (false );
112
+ if (dfu_secondary_bd != nullptr ) {
113
+ dfu_secondary_bd->deinit ();
114
+ boot_set_pending (false );
115
+ }
113
116
return 0 ;
114
117
}
115
118
@@ -128,12 +131,14 @@ static bool isFileBlockFlash(uint32_t Add) {
128
131
*/
129
132
uint16_t Flash_If_Erase (uint32_t Add)
130
133
{
131
- if (isFileBlockFlash (Add)) {
134
+ if (isFileBlockFlash (Add) && dfu_secondary_bd == nullptr ) {
135
+ return -1 ;
136
+ } else if (isFileBlockFlash (Add) && dfu_secondary_bd != nullptr ) {
132
137
Add -= FILEBLOCK_BASE_ADDRESS;
133
138
return dfu_secondary_bd->erase (Add, dfu_secondary_bd->get_erase_size (Add));
134
139
} else if (isExternalFlash (Add)) {
135
140
Add -= QSPIFLASH_BASE_ADDRESS;
136
- return qspi_flash. erase (Add, qspi_flash. get_erase_size (Add));
141
+ return qspi_flash-> erase (Add, qspi_flash-> get_erase_size (Add));
137
142
} else {
138
143
return flash.erase (Add, flash.get_sector_size (Add));
139
144
}
@@ -160,7 +165,9 @@ void delayed_write(struct writeInfo* info) {
160
165
*/
161
166
uint16_t Flash_If_Write (uint8_t * src, uint8_t * dest, uint32_t Len)
162
167
{
163
- if (isFileBlockFlash ((uint32_t )dest)) {
168
+ if (isFileBlockFlash ((uint32_t )dest) && dfu_secondary_bd == nullptr ) {
169
+ return -1 ;
170
+ } else if (isFileBlockFlash ((uint32_t )dest) && dfu_secondary_bd != nullptr ) {
164
171
dest -= FILEBLOCK_BASE_ADDRESS;
165
172
if (Len < dfu_secondary_bd->get_erase_size (0 )) {
166
173
uint8_t * srcCopy = (uint8_t *)malloc (dfu_secondary_bd->get_erase_size (0 ));
@@ -171,10 +178,10 @@ uint16_t Flash_If_Write(uint8_t * src, uint8_t * dest, uint32_t Len)
171
178
return dfu_secondary_bd->program (src, (uint32_t )dest, Len);
172
179
} else if (isExternalFlash ((uint32_t )dest)) {
173
180
dest -= QSPIFLASH_BASE_ADDRESS;
174
- if (Len < qspi_flash. get_erase_size (0 )) {
175
- Len = qspi_flash. get_erase_size (0 );
181
+ if (Len < qspi_flash-> get_erase_size (0 )) {
182
+ Len = qspi_flash-> get_erase_size (0 );
176
183
}
177
- return qspi_flash. program (src, (uint32_t )dest, Len);
184
+ return qspi_flash-> program (src, (uint32_t )dest, Len);
178
185
} else {
179
186
uint8_t * srcCopy = (uint8_t *)malloc (Len);
180
187
memcpy (srcCopy, src, Len);
@@ -199,12 +206,14 @@ uint8_t *Flash_If_Read(uint8_t * src, uint8_t * dest, uint32_t Len)
199
206
uint32_t i = 0 ;
200
207
uint8_t *psrc = src;
201
208
202
- if (isFileBlockFlash ((uint32_t )src)) {
209
+ if (isFileBlockFlash ((uint32_t )src) && dfu_secondary_bd == nullptr ) {
210
+ Len = 0 ;
211
+ } else if (isFileBlockFlash ((uint32_t )src) && dfu_secondary_bd != nullptr ) {
203
212
src -= FILEBLOCK_BASE_ADDRESS;
204
213
dfu_secondary_bd->read (dest, (uint32_t )src, Len);
205
214
} else if (isExternalFlash ((uint32_t )src)) {
206
215
src -= QSPIFLASH_BASE_ADDRESS;
207
- qspi_flash. read (dest, (uint32_t )src, Len);
216
+ qspi_flash-> read (dest, (uint32_t )src, Len);
208
217
} else {
209
218
for (i = 0 ; i < Len; i++)
210
219
{
0 commit comments