File tree 2 files changed +19
-7
lines changed
2 files changed +19
-7
lines changed Original file line number Diff line number Diff line change @@ -159,11 +159,6 @@ int copy_raw(const uint32_t src_addr,
159
159
gzip = true;
160
160
}
161
161
while (left > 0 ) {
162
- if (!verify ) {
163
- if (SPIEraseSector (daddr /buffer_size )) {
164
- return 2 ;
165
- }
166
- }
167
162
if (!gzip ) {
168
163
if (SPIRead (saddr , buffer , buffer_size )) {
169
164
return 3 ;
@@ -190,8 +185,25 @@ int copy_raw(const uint32_t src_addr,
190
185
return 9 ;
191
186
}
192
187
} else {
193
- if (SPIWrite (daddr , buffer , buffer_size )) {
194
- return 4 ;
188
+ // Special treatment for address 0 (bootloader). Only erase and
189
+ // rewrite if the data is different (i.e. very rarely).
190
+ bool skip = false;
191
+ if (daddr == 0 ) {
192
+ if (SPIRead (daddr , buffer2 , buffer_size )) {
193
+ return 4 ;
194
+ }
195
+ if (!memcmp (buffer2 , buffer , buffer_size )) {
196
+ ets_putc ('B' ); // Note we skipped the bootloader in output
197
+ skip = true; // And skip erase/write
198
+ }
199
+ }
200
+ if (!skip ) {
201
+ if (SPIEraseSector (daddr /buffer_size )) {
202
+ return 2 ;
203
+ }
204
+ if (SPIWrite (daddr , buffer , buffer_size )) {
205
+ return 4 ;
206
+ }
195
207
}
196
208
}
197
209
saddr += buffer_size ;
You can’t perform that action at this time.
0 commit comments