Skip to content

Commit 425619d

Browse files
committed
Fix upload over USB CDC (USB serial must be set to 0)
1 parent aeb4a13 commit 425619d

File tree

3 files changed

+34
-12
lines changed

3 files changed

+34
-12
lines changed

boards.txt

+14
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ esp32s2.upload.tool=esptool_py
2525
esp32s2.upload.maximum_size=1310720
2626
esp32s2.upload.maximum_data_size=327680
2727
esp32s2.upload.flags=
28+
esp32s2.upload.use_1200bps_touch=true
29+
esp32s2.upload.wait_for_upload_port=true
2830

2931
esp32s2.serial.disableDTR=false
3032
esp32s2.serial.disableRTS=false
@@ -684,6 +686,8 @@ feathers2.upload.tool=esptool_py
684686
feathers2.upload.maximum_size=1310720
685687
feathers2.upload.maximum_data_size=327680
686688
feathers2.upload.flags=
689+
feathers2.upload.use_1200bps_touch=true
690+
feathers2.upload.wait_for_upload_port=true
687691

688692
feathers2.serial.disableDTR=false
689693
feathers2.serial.disableRTS=false
@@ -805,6 +809,8 @@ pros2.upload.tool=esptool_py
805809
pros2.upload.maximum_size=1310720
806810
pros2.upload.maximum_data_size=327680
807811
pros2.upload.flags=
812+
pros2.upload.use_1200bps_touch=true
813+
pros2.upload.wait_for_upload_port=true
808814

809815
pros2.serial.disableDTR=false
810816
pros2.serial.disableRTS=false
@@ -982,6 +988,8 @@ micros2.upload.tool=esptool_py
982988
micros2.upload.maximum_size=1310720
983989
micros2.upload.maximum_data_size=327680
984990
micros2.upload.flags=
991+
micros2.upload.use_1200bps_touch=true
992+
micros2.upload.wait_for_upload_port=true
985993

986994
micros2.serial.disableDTR=false
987995
micros2.serial.disableRTS=false
@@ -1797,6 +1805,8 @@ sparkfun_esp32s2_thing_plus.upload.tool=esptool_py
17971805
sparkfun_esp32s2_thing_plus.upload.maximum_size=1310720
17981806
sparkfun_esp32s2_thing_plus.upload.maximum_data_size=327680
17991807
sparkfun_esp32s2_thing_plus.upload.flags=
1808+
sparkfun_esp32s2_thing_plus.upload.use_1200bps_touch=true
1809+
sparkfun_esp32s2_thing_plus.upload.wait_for_upload_port=true
18001810

18011811
sparkfun_esp32s2_thing_plus.serial.disableDTR=false
18021812
sparkfun_esp32s2_thing_plus.serial.disableRTS=false
@@ -3020,6 +3030,8 @@ adafruit_metro_esp32s2.upload.tool=esptool_py
30203030
adafruit_metro_esp32s2.upload.maximum_size=1310720
30213031
adafruit_metro_esp32s2.upload.maximum_data_size=327680
30223032
adafruit_metro_esp32s2.upload.flags=
3033+
adafruit_metro_esp32s2.upload.use_1200bps_touch=true
3034+
adafruit_metro_esp32s2.upload.wait_for_upload_port=true
30233035

30243036
adafruit_metro_esp32s2.serial.disableDTR=false
30253037
adafruit_metro_esp32s2.serial.disableRTS=false
@@ -3167,6 +3179,8 @@ adafruit_magtag29_esp32s2.upload.tool=esptool_py
31673179
adafruit_magtag29_esp32s2.upload.maximum_size=1310720
31683180
adafruit_magtag29_esp32s2.upload.maximum_data_size=327680
31693181
adafruit_magtag29_esp32s2.upload.flags=
3182+
adafruit_magtag29_esp32s2.upload.use_1200bps_touch=true
3183+
adafruit_magtag29_esp32s2.upload.wait_for_upload_port=true
31703184

31713185
adafruit_magtag29_esp32s2.serial.disableDTR=false
31723186
adafruit_magtag29_esp32s2.serial.disableRTS=false

cores/esp32/USBCDC.cpp

+14-10
Original file line numberDiff line numberDiff line change
@@ -198,16 +198,20 @@ void USBCDC::_onLineState(bool _dtr, bool _rts){
198198

199199
void USBCDC::_onLineCoding(uint32_t _bit_rate, uint8_t _stop_bits, uint8_t _parity, uint8_t _data_bits){
200200
if(bit_rate != _bit_rate || data_bits != _data_bits || stop_bits != _stop_bits || parity != _parity){
201-
bit_rate = _bit_rate;
202-
data_bits = _data_bits;
203-
stop_bits = _stop_bits;
204-
parity = _parity;
205-
arduino_usb_cdc_event_data_t p = {0};
206-
p.line_coding.bit_rate = bit_rate;
207-
p.line_coding.data_bits = data_bits;
208-
p.line_coding.stop_bits = stop_bits;
209-
p.line_coding.parity = parity;
210-
arduino_usb_event_post(ARDUINO_USB_CDC_EVENTS, ARDUINO_USB_CDC_LINE_CODING_EVENT, &p, sizeof(arduino_usb_cdc_event_data_t), portMAX_DELAY);
201+
if(bit_rate == 9600 && _bit_rate == 1200){
202+
usb_persist_restart(RESTART_BOOTLOADER);
203+
} else {
204+
bit_rate = _bit_rate;
205+
data_bits = _data_bits;
206+
stop_bits = _stop_bits;
207+
parity = _parity;
208+
arduino_usb_cdc_event_data_t p = {0};
209+
p.line_coding.bit_rate = bit_rate;
210+
p.line_coding.data_bits = data_bits;
211+
p.line_coding.stop_bits = stop_bits;
212+
p.line_coding.parity = parity;
213+
arduino_usb_event_post(ARDUINO_USB_CDC_EVENTS, ARDUINO_USB_CDC_LINE_CODING_EVENT, &p, sizeof(arduino_usb_cdc_event_data_t), portMAX_DELAY);
214+
}
211215
}
212216
}
213217

cores/esp32/esp32-hal-tinyusb.c

+6-2
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,9 @@ static void IRAM_ATTR usb_persist_shutdown_handler(void)
533533
//USB CDC Download
534534
if (usb_persist_enabled) {
535535
chip_usb_set_persist_flags(USBDC_PERSIST_ENA);
536+
} else {
537+
periph_module_reset(PERIPH_USB_MODULE);
538+
periph_module_enable(PERIPH_USB_MODULE);
536539
}
537540
REG_WRITE(RTC_CNTL_OPTION1_REG, RTC_CNTL_FORCE_DOWNLOAD_BOOT);
538541
} else if (usb_persist_mode == RESTART_BOOTLOADER_DFU) {
@@ -586,11 +589,12 @@ esp_err_t tinyusb_init(tinyusb_device_config_t *config) {
586589

587590
bool usb_did_persist = (USB_WRAP.date.val == USBDC_PERSIST_ENA);
588591

589-
if(usb_did_persist && usb_persist_enabled){
592+
//if(usb_did_persist && usb_persist_enabled){
590593
// Enable USB/IO_MUX peripheral reset, if coming from persistent reboot
591594
REG_CLR_BIT(RTC_CNTL_USB_CONF_REG, RTC_CNTL_IO_MUX_RESET_DISABLE);
592595
REG_CLR_BIT(RTC_CNTL_USB_CONF_REG, RTC_CNTL_USB_RESET_DISABLE);
593-
} else {
596+
//} else
597+
if(!usb_did_persist || !usb_persist_enabled){
594598
// Reset USB module
595599
periph_module_reset(PERIPH_USB_MODULE);
596600
periph_module_enable(PERIPH_USB_MODULE);

0 commit comments

Comments
 (0)