|
51 | 51 | pass # __doc__ returns None for pyserial
|
52 | 52 |
|
53 | 53 |
|
54 |
| -__version__ = "2.5.0" |
| 54 | +__version__ = "2.6-beta1" |
55 | 55 |
|
56 | 56 | MAX_UINT32 = 0xffffffff
|
57 | 57 | MAX_UINT24 = 0xffffff
|
@@ -243,17 +243,19 @@ def detect_chip(port=DEFAULT_PORT, baud=ESP_ROM_BAUD, connect_mode='default_rese
|
243 | 243 | """
|
244 | 244 | detect_port = ESPLoader(port, baud, trace_enabled=trace_enabled)
|
245 | 245 | detect_port.connect(connect_mode)
|
246 |
| - print('Detecting chip type...', end='') |
247 |
| - sys.stdout.flush() |
248 |
| - date_reg = detect_port.read_reg(ESPLoader.UART_DATA_REG_ADDR) |
249 |
| - |
250 |
| - for cls in [ESP8266ROM, ESP32ROM]: |
251 |
| - if date_reg == cls.DATE_REG_VALUE: |
252 |
| - # don't connect a second time |
253 |
| - inst = cls(detect_port._port, baud, trace_enabled=trace_enabled) |
254 |
| - print(' %s' % inst.CHIP_NAME) |
255 |
| - return inst |
256 |
| - print('') |
| 246 | + try: |
| 247 | + print('Detecting chip type...', end='') |
| 248 | + sys.stdout.flush() |
| 249 | + date_reg = detect_port.read_reg(ESPLoader.UART_DATA_REG_ADDR) |
| 250 | + |
| 251 | + for cls in [ESP8266ROM, ESP32ROM]: |
| 252 | + if date_reg == cls.DATE_REG_VALUE: |
| 253 | + # don't connect a second time |
| 254 | + inst = cls(detect_port._port, baud, trace_enabled=trace_enabled) |
| 255 | + print(' %s' % inst.CHIP_NAME, end='') |
| 256 | + return inst |
| 257 | + finally: |
| 258 | + print('') # end line |
257 | 259 | raise FatalError("Unexpected UART datecode value 0x%08x. Failed to autodetect chip type." % date_reg)
|
258 | 260 |
|
259 | 261 | """ Read a SLIP packet from the serial port """
|
@@ -681,6 +683,8 @@ def read_flash(self, offset, length, progress_fn=None):
|
681 | 683 | while len(data) < length:
|
682 | 684 | p = self.read()
|
683 | 685 | data += p
|
| 686 | + if len(data) < length and len(p) < self.FLASH_SECTOR_SIZE: |
| 687 | + raise FatalError('Corrupt data, expected 0x%x bytes but received 0x%x bytes' % (self.FLASH_SECTOR_SIZE, len(p))) |
684 | 688 | self.write(struct.pack('<I', len(data)))
|
685 | 689 | if progress_fn and (len(data) % 1024 == 0 or len(data) == length):
|
686 | 690 | progress_fn(len(data), length)
|
@@ -1116,6 +1120,18 @@ def get_chip_features(self):
|
1116 | 1120 | if adc_vref:
|
1117 | 1121 | features += ["VRef calibration in efuse"]
|
1118 | 1122 |
|
| 1123 | + blk3_part_res = word3 >> 14 & 0x1 |
| 1124 | + if blk3_part_res: |
| 1125 | + features += ["BLK3 partially reserved"] |
| 1126 | + |
| 1127 | + word6 = self.read_efuse(6) |
| 1128 | + coding_scheme = word6 & 0x3 |
| 1129 | + features += ["Coding Scheme %s" % { |
| 1130 | + 0: "None", |
| 1131 | + 1: "3/4", |
| 1132 | + 2: "Repeat (UNSUPPORTED)", |
| 1133 | + 3: "Invalid"}[coding_scheme]] |
| 1134 | + |
1119 | 1135 | return features
|
1120 | 1136 |
|
1121 | 1137 | def read_efuse(self, n):
|
@@ -2549,7 +2565,7 @@ def add_spi_flash_subparsers(parent, is_elf2image):
|
2549 | 2565 | esp = chip_class(each_port, initial_baud, args.trace)
|
2550 | 2566 | esp.connect(args.before)
|
2551 | 2567 | break
|
2552 |
| - except FatalError as err: |
| 2568 | + except (FatalError, OSError) as err: |
2553 | 2569 | if args.port is not None:
|
2554 | 2570 | raise
|
2555 | 2571 | print("%s failed to connect: %s" % (each_port, err))
|
|
0 commit comments