@@ -259,7 +259,7 @@ def flash_begin(self, *, size=0, offset=0):
259
259
number of blocks requred."""
260
260
if self ._chipfamily == ESP32 :
261
261
self .check_command (ESP_SPI_ATTACH , bytes ([0 ] * 8 ))
262
- # We are harcoded for 4MB flash on ESP32
262
+ # We are hardcoded for 4MB flash on ESP32
263
263
buffer = struct .pack (
264
264
"<IIIIII" , 0 , self ._flashsize , 0x10000 , 4096 , 256 , 0xFFFF
265
265
)
@@ -270,7 +270,7 @@ def flash_begin(self, *, size=0, offset=0):
270
270
erase_size = self .get_erase_size (offset , size )
271
271
else :
272
272
erase_size = size
273
- timeout = 5
273
+ timeout = 13
274
274
stamp = time .monotonic ()
275
275
buffer = struct .pack (
276
276
"<IIII" , erase_size , num_blocks , self .FLASH_WRITE_SIZE , offset
@@ -303,7 +303,7 @@ def check_command(
303
303
else :
304
304
if len (data ) in (2 , 4 ):
305
305
status_len = len (data )
306
- if len (data ) < status_len :
306
+ if data is None or len (data ) < status_len :
307
307
raise RuntimeError ("Didn't get enough status bytes" )
308
308
status = data [- status_len :]
309
309
data = data [:- status_len ]
@@ -372,7 +372,10 @@ def get_response(self, opcode, timeout=0.1): # pylint: disable=too-many-branche
372
372
packet_length = reply [3 ] + (reply [4 ] << 8 )
373
373
if len (reply ) == packet_length + 10 :
374
374
break
375
- else :
375
+ # Check to see if we have a complete packet. If not, we timed out.
376
+ if len (reply ) != packet_length + 10 :
377
+ if self ._debug :
378
+ print ("Timed out after {} seconds" .format (timeout ))
376
379
return (None , None )
377
380
if self ._debug :
378
381
print ("Packet:" , [hex (i ) for i in reply ])
@@ -464,7 +467,7 @@ def sync(self):
464
467
ESP ROM bootloader, we will retry a few times"""
465
468
self .reset (True )
466
469
467
- for _ in range (3 ):
470
+ for _ in range (5 ):
468
471
if self ._sync ():
469
472
time .sleep (0.1 )
470
473
return True
0 commit comments