kopia lustrzana https://github.com/micropython/micropython
tools/pyboard.py: Fix ESPxx boards hanging in bootloader after reset.
This is a follow up to d263438a6e
, which
solved one problem (reset on disconnect) but introduced a second one (hang
in bootloader).
To solve both probles, False/False is needed for DTR/RTS for ESPxx, but
that would then block stm32 and others. Any unconditional combination of
DTR/RTS ends up blocking normal operation on some type of board or another.
A simple overview (for windows only):
DTR CTS ESP8266/ESP32 STM32/SAMD51/RP2040
unspecified unspecified Reset on disconnect OK
True False Hang in bootloader OK
False False OK No Repl
True True Reset on disconnect No Repl
False True Reset on disconnect No Repl
serial.manufacturer: wch.cn/Silicon Labs Microsoft
serial.description: USB-SERIAL CH340 / USB Serial Device
CP210x USB to UART
Bridge
The updated logic will only set the DTR/RTS signals for boards that do not
use standard Microsoft drivers (based on the manufacturer). It would also
be possible to check against a list of known driver manufactures (like
wch.cn or Silicon Labs) but this would require a list of known drivers for
all ports.
Signed-off-by: Jos Verlinde <jos_verlinde@hotmail.com>
pull/11076/head
rodzic
783ddfc264
commit
9f74ffb6eb
|
@ -287,11 +287,15 @@ class Pyboard:
|
|||
for attempt in range(wait + 1):
|
||||
try:
|
||||
if os.name == "nt":
|
||||
# Windows does not set DTR or RTS by default
|
||||
self.serial = serial.Serial(**serial_kwargs)
|
||||
self.serial.dtr = True
|
||||
self.serial.rts = False
|
||||
self.serial.port = device
|
||||
portinfo = list(serial.tools.list_ports.grep(device)) # type: ignore
|
||||
if portinfo and portinfo[0].manufacturer != "Microsoft":
|
||||
# ESP8266/ESP32 boards use RTS/CTS for flashing and boot mode selection.
|
||||
# DTR False: to avoid using the reset button will hang the MCU in bootloader mode
|
||||
# RTS False: to prevent pulses on rts on serial.close() that would POWERON_RESET an ESPxx
|
||||
self.serial.dtr = False # DTR False = gpio0 High = Normal boot
|
||||
self.serial.rts = False # RTS False = EN High = MCU enabled
|
||||
self.serial.open()
|
||||
else:
|
||||
self.serial = serial.Serial(device, **serial_kwargs)
|
||||
|
|
Ładowanie…
Reference in New Issue