From d7f800e0efd954b015bee131e04d3144e96423a5 Mon Sep 17 00:00:00 2001 From: Sergio Gasquez Arcos Date: Thu, 1 Feb 2024 12:40:04 +0100 Subject: [PATCH] Windows: Set RTS before DTR to avoid issues (#562) * windows usb serial workaround: set dtr after rts * feat: Set rts before dtr for UsbJtagSerialReset * docs: Update changelog --------- Co-authored-by: Hailey Somerville --- CHANGELOG.md | 1 + espflash/src/connection/reset.rs | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1588956..c7e1705a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Use partition table instead of hard-coded values for the location of partitions (#516) - Fixed a missed `flush` call that may be causing communication errors (#521) - Fix "SHA-256 comparison failed: [...] attempting to boot anyway..." (#567) +- Windows: Update RST/DTR order to avoid issues. ### Changed - Created `FlashData`, `FlashDataBuilder` and `FlashSettings` structs to reduce number of input arguments in some functions (#512, #566) diff --git a/espflash/src/connection/reset.rs b/espflash/src/connection/reset.rs index 28bf3260..7992febf 100644 --- a/espflash/src/connection/reset.rs +++ b/espflash/src/connection/reset.rs @@ -101,24 +101,24 @@ impl ResetStrategy for ClassicReset { "Using Classic reset strategy with delay of {}ms", self.delay ); - self.set_dtr(interface, false)?; self.set_rts(interface, false)?; + self.set_dtr(interface, false)?; - self.set_dtr(interface, true)?; self.set_rts(interface, true)?; + self.set_dtr(interface, true)?; - self.set_dtr(interface, false)?; // IO0 = HIGH self.set_rts(interface, true)?; // EN = LOW, chip in reset + self.set_dtr(interface, false)?; // IO0 = HIGH sleep(Duration::from_millis(100)); - self.set_dtr(interface, true)?; // IO0 = LOW self.set_rts(interface, false)?; // EN = HIGH, chip out of reset + self.set_dtr(interface, true)?; // IO0 = LOW sleep(Duration::from_millis(self.delay)); - self.set_dtr(interface, false)?; // IO0 = HIGH, done self.set_rts(interface, false)?; + self.set_dtr(interface, false)?; // IO0 = HIGH, done Ok(()) } @@ -179,13 +179,13 @@ impl ResetStrategy for UsbJtagSerialReset { fn reset(&self, interface: &mut Interface) -> Result<(), Error> { debug!("Using UsbJtagSerial reset strategy"); - self.set_dtr(interface, false)?; // Idle self.set_rts(interface, false)?; + self.set_dtr(interface, false)?; // Idle sleep(Duration::from_millis(100)); - self.set_dtr(interface, true)?; // Set IO0 self.set_rts(interface, false)?; + self.set_dtr(interface, true)?; // Set IO0 sleep(Duration::from_millis(100)); @@ -195,8 +195,8 @@ impl ResetStrategy for UsbJtagSerialReset { sleep(Duration::from_millis(100)); - self.set_dtr(interface, false)?; self.set_rts(interface, false)?; + self.set_dtr(interface, false)?; Ok(()) }