Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 268595c

Browse filesBrowse files
authored
Various USB fixes (espressif#5422)
* Fix compile archive arguments for the new toolchain * Add menu to S2 for picking through which port to upload Internal USB CDC requires to reset and wait for the new port (because persistence is not yet stable) * USB CDC should also be started in main * Fix URL and USB version for WebUSB * Update vendor callback API * Update CDC::write to use TX_DONE semaphore * Update USB_Serial example
1 parent 4a0305a commit 268595c
Copy full SHA for 268595c

File tree

Expand file treeCollapse file tree

8 files changed

+106
-47
lines changed
Filter options
Expand file treeCollapse file tree

8 files changed

+106
-47
lines changed

‎boards.txt

Copy file name to clipboardExpand all lines: boards.txt
+10-2Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
menu.UploadSpeed=Upload Speed
22
menu.SerialMode=Serial Connected To
3+
menu.UploadMode=Upload Mode
34
menu.CPUFreq=CPU Frequency
45
menu.FlashFreq=Flash Frequency
56
menu.FlashMode=Flash Mode
@@ -158,8 +159,8 @@ esp32s2.upload.maximum_size=1310720
158159
esp32s2.upload.maximum_data_size=327680
159160
esp32s2.upload.flags=
160161
esp32s2.upload.extra_flags=
161-
esp32s2.upload.use_1200bps_touch=true
162-
esp32s2.upload.wait_for_upload_port=true
162+
esp32s2.upload.use_1200bps_touch=false
163+
esp32s2.upload.wait_for_upload_port=false
163164

164165
esp32s2.serial.disableDTR=false
165166
esp32s2.serial.disableRTS=false
@@ -186,6 +187,13 @@ esp32s2.menu.SerialMode.default.build.serial=0
186187
esp32s2.menu.SerialMode.cdc=USB CDC
187188
esp32s2.menu.SerialMode.cdc.build.serial=1
188189

190+
esp32s2.menu.UploadMode.default=UART0
191+
esp32s2.menu.UploadMode.default.upload.use_1200bps_touch=false
192+
esp32s2.menu.UploadMode.default.upload.wait_for_upload_port=false
193+
esp32s2.menu.UploadMode.cdc=Internal USB
194+
esp32s2.menu.UploadMode.cdc.upload.use_1200bps_touch=true
195+
esp32s2.menu.UploadMode.cdc.upload.wait_for_upload_port=true
196+
189197
esp32s2.menu.PSRAM.disabled=Disabled
190198
esp32s2.menu.PSRAM.disabled.build.defines=
191199
esp32s2.menu.PSRAM.enabled=Enabled

‎cores/esp32/USB.cpp

Copy file name to clipboardExpand all lines: cores/esp32/USB.cpp
+4-1Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ ESPUSB::ESPUSB(size_t task_stack_size, uint8_t event_task_priority)
121121
,usb_attributes(TUSB_DESC_CONFIG_ATT_SELF_POWERED)
122122
,usb_power_ma(500)
123123
,webusb_enabled(false)
124-
,webusb_url("espressif.github.io/arduino-esp32/webusb.html")
124+
,webusb_url("https://espressif.github.io/arduino-esp32/webusb.html")
125125
,_started(false)
126126
,_task_stack_size(task_stack_size)
127127
,_event_task_priority(event_task_priority)
@@ -282,6 +282,9 @@ uint8_t ESPUSB::usbAttributes(void){
282282
bool ESPUSB::webUSB(bool enabled){
283283
if(!_started){
284284
webusb_enabled = enabled;
285+
if(enabled && usb_version < 0x0210){
286+
usb_version = 0x0210;
287+
}
285288
}
286289
return !_started;
287290
}

‎cores/esp32/USBCDC.cpp

Copy file name to clipboardExpand all lines: cores/esp32/USBCDC.cpp
+34Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,27 +38,46 @@ static uint16_t load_cdc_descriptor(uint8_t * dst, uint8_t * itf)
3838
return TUD_CDC_DESC_LEN;
3939
}
4040

41+
// Invoked when line state DTR & RTS are changed via SET_CONTROL_LINE_STATE
4142
void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts)
4243
{
44+
//isr_log_v("itf: %u, dtr: %u, rts: %u", itf, dtr, rts);
4345
if(itf < MAX_USB_CDC_DEVICES && devices[itf] != NULL){
4446
devices[itf]->_onLineState(dtr, rts);
4547
}
4648
}
4749

50+
// Invoked when line coding is change via SET_LINE_CODING
4851
void tud_cdc_line_coding_cb(uint8_t itf, cdc_line_coding_t const* p_line_coding)
4952
{
53+
//isr_log_v("itf: %u, bit_rate: %u, data_bits: %u, stop_bits: %u, parity: %u", itf, p_line_coding->bit_rate, p_line_coding->data_bits, p_line_coding->stop_bits, p_line_coding->parity);
5054
if(itf < MAX_USB_CDC_DEVICES && devices[itf] != NULL){
5155
devices[itf]->_onLineCoding(p_line_coding->bit_rate, p_line_coding->stop_bits, p_line_coding->parity, p_line_coding->data_bits);
5256
}
5357
}
5458

59+
// Invoked when received new data
5560
void tud_cdc_rx_cb(uint8_t itf)
5661
{
62+
//isr_log_v("itf: %u", itf);
5763
if(itf < MAX_USB_CDC_DEVICES && devices[itf] != NULL){
5864
devices[itf]->_onRX();
5965
}
6066
}
6167

68+
// Invoked when received send break
69+
void tud_cdc_send_break_cb(uint8_t itf, uint16_t duration_ms){
70+
//isr_log_v("itf: %u, duration_ms: %u", itf, duration_ms);
71+
}
72+
73+
// Invoked when space becomes available in TX buffer
74+
void tud_cdc_tx_complete_cb(uint8_t itf){
75+
//isr_log_v("itf: %u", itf);
76+
if(itf < MAX_USB_CDC_DEVICES && devices[itf] != NULL){
77+
xSemaphoreGive(devices[itf]->tx_sem);
78+
devices[itf]->_onTX();
79+
}
80+
}
6281

6382
static size_t tinyusb_cdc_write(uint8_t itf, const uint8_t *buffer, size_t size){
6483
if(itf >= MAX_USB_CDC_DEVICES){
@@ -84,6 +103,7 @@ static size_t tinyusb_cdc_write(uint8_t itf, const uint8_t *buffer, size_t size)
84103
sofar += sent;
85104
tosend -= sent;
86105
tud_cdc_n_write_flush(itf);
106+
xSemaphoreTake(devices[itf]->tx_sem, portMAX_DELAY);
87107
}
88108
return sofar;
89109
}
@@ -103,6 +123,7 @@ USBCDC::USBCDC(uint8_t itfn) : itf(itfn), bit_rate(0), stop_bits(0), parity(0),
103123
tinyusb_enable_interface(USB_INTERFACE_CDC, TUD_CDC_DESC_LEN, load_cdc_descriptor);
104124
if(itf < MAX_USB_CDC_DEVICES){
105125
devices[itf] = this;
126+
tx_sem = NULL;
106127
arduino_usb_event_handler_register_with(ARDUINO_USB_EVENTS, ARDUINO_USB_STOPPED_EVENT, usb_unplugged_cb, this);
107128
}
108129
}
@@ -128,10 +149,18 @@ size_t USBCDC::setRxBufferSize(size_t rx_queue_len){
128149
void USBCDC::begin(unsigned long baud)
129150
{
130151
setRxBufferSize(256);//default if not preset
152+
if(tx_sem == NULL){
153+
tx_sem = xSemaphoreCreateBinary();
154+
xSemaphoreTake(tx_sem, 0);
155+
}
131156
}
132157

133158
void USBCDC::end()
134159
{
160+
if (tx_sem != NULL) {
161+
vSemaphoreDelete(tx_sem);
162+
tx_sem = NULL;
163+
}
135164
}
136165

137166
void USBCDC::_onUnplugged(void){
@@ -228,6 +257,11 @@ void USBCDC::_onRX(){
228257
arduino_usb_event_post(ARDUINO_USB_CDC_EVENTS, ARDUINO_USB_CDC_RX_EVENT, &p, sizeof(arduino_usb_cdc_event_data_t), portMAX_DELAY);
229258
}
230259

260+
void USBCDC::_onTX(){
261+
arduino_usb_cdc_event_data_t p = {0};
262+
arduino_usb_event_post(ARDUINO_USB_CDC_EVENTS, ARDUINO_USB_CDC_TX_EVENT, &p, sizeof(arduino_usb_cdc_event_data_t), portMAX_DELAY);
263+
}
264+
231265
void USBCDC::enableReboot(bool enable){
232266
reboot_enable = enable;
233267
}

‎cores/esp32/USBCDC.h

Copy file name to clipboardExpand all lines: cores/esp32/USBCDC.h
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ typedef enum {
3030
ARDUINO_USB_CDC_LINE_STATE_EVENT,
3131
ARDUINO_USB_CDC_LINE_CODING_EVENT,
3232
ARDUINO_USB_CDC_RX_EVENT,
33+
ARDUINO_USB_CDC_TX_EVENT,
3334
ARDUINO_USB_CDC_MAX_EVENT,
3435
} arduino_usb_cdc_event_t;
3536

@@ -110,7 +111,9 @@ class USBCDC: public Stream
110111
void _onLineState(bool _dtr, bool _rts);
111112
void _onLineCoding(uint32_t _bit_rate, uint8_t _stop_bits, uint8_t _parity, uint8_t _data_bits);
112113
void _onRX(void);
114+
void _onTX(void);
113115
void _onUnplugged(void);
116+
xSemaphoreHandle tx_sem;
114117

115118
protected:
116119
uint8_t itf;

‎cores/esp32/esp32-hal-tinyusb.c

Copy file name to clipboardExpand all lines: cores/esp32/esp32-hal-tinyusb.c
+22-24Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ typedef struct TU_ATTR_PACKED {
228228
static tinyusb_desc_webusb_url_t tinyusb_url_descriptor = {
229229
.bLength = 3,
230230
.bDescriptorType = 3, // WEBUSB URL type
231-
.bScheme = 1, // URL Scheme Prefix: 0: "http://", 1: "https://", 255: ""
231+
.bScheme = 255, // URL Scheme Prefix: 0: "http://", 1: "https://", 255: ""
232232
.url = ""
233233
};
234234

@@ -317,12 +317,11 @@ uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid)
317317
*/
318318
uint8_t const * tud_descriptor_bos_cb(void)
319319
{
320-
//log_d("");
320+
//log_v("");
321321
return tinyusb_bos_descriptor;
322322
}
323323

324-
__attribute__ ((weak)) bool tinyusb_vendor_control_request_cb(uint8_t rhport, tusb_control_request_t const * request){ return false; }
325-
__attribute__ ((weak)) bool tinyusb_vendor_control_complete_cb(uint8_t rhport, tusb_control_request_t const * request){ return true; }
324+
__attribute__ ((weak)) bool tinyusb_vendor_control_request_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request){ return false; }
326325

327326
/**
328327
* @brief Handle WebUSB and Vendor requests.
@@ -331,30 +330,26 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_requ
331330
{
332331
if(WEBUSB_ENABLED && (request->bRequest == VENDOR_REQUEST_WEBUSB
333332
|| (request->bRequest == VENDOR_REQUEST_MICROSOFT && request->wIndex == 7))){
334-
if(request->bRequest == VENDOR_REQUEST_WEBUSB){
335-
// match vendor request in BOS descriptor
336-
// Get landing page url
337-
tinyusb_url_descriptor.bLength = 3 + strlen(WEBUSB_URL);
338-
snprintf(tinyusb_url_descriptor.url, 127, "%s", WEBUSB_URL);
339-
return tud_control_xfer(rhport, request, (void*) &tinyusb_url_descriptor, tinyusb_url_descriptor.bLength);
333+
// we only care for SETUP stage
334+
if (stage == CONTROL_STAGE_SETUP) {
335+
if(request->bRequest == VENDOR_REQUEST_WEBUSB){
336+
// match vendor request in BOS descriptor
337+
// Get landing page url
338+
tinyusb_url_descriptor.bLength = 3 + strlen(WEBUSB_URL);
339+
snprintf(tinyusb_url_descriptor.url, 127, "%s", WEBUSB_URL);
340+
return tud_control_xfer(rhport, request, (void*) &tinyusb_url_descriptor, tinyusb_url_descriptor.bLength);
341+
}
342+
// Get Microsoft OS 2.0 compatible descriptor
343+
uint16_t total_len;
344+
memcpy(&total_len, tinyusb_ms_os_20_descriptor + 8, 2);
345+
return tud_control_xfer(rhport, request, (void*) tinyusb_ms_os_20_descriptor, total_len);
340346
}
341-
// Get Microsoft OS 2.0 compatible descriptor
342-
uint16_t total_len;
343-
memcpy(&total_len, tinyusb_ms_os_20_descriptor + 8, 2);
344-
return tud_control_xfer(rhport, request, (void*) tinyusb_ms_os_20_descriptor, total_len);
347+
return true;
345348
}
346-
return tinyusb_vendor_control_request_cb(rhport, request);
349+
log_v("rhport: %u, stage: %u, type: 0x%x, request: 0x%x", rhport, stage, request->bmRequestType_bit.type, request->bRequest);
350+
return tinyusb_vendor_control_request_cb(rhport, stage, request);
347351
}
348352

349-
// bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_request_t const * request)
350-
// {
351-
// if(!WEBUSB_ENABLED || !(request->bRequest == VENDOR_REQUEST_WEBUSB
352-
// || (request->bRequest == VENDOR_REQUEST_MICROSOFT && request->wIndex == 7))){
353-
// return tinyusb_vendor_control_complete_cb(rhport, request);
354-
// }
355-
// return true;
356-
// }
357-
358353
/*
359354
* Required Callbacks
360355
* */
@@ -537,6 +532,9 @@ static void IRAM_ATTR usb_persist_shutdown_handler(void)
537532
REG_WRITE(RTC_CNTL_OPTION1_REG, RTC_CNTL_FORCE_DOWNLOAD_BOOT);
538533
} else if (usb_persist_mode == RESTART_BOOTLOADER_DFU) {
539534
//DFU Download
535+
// Reset USB Core
536+
USB0.grstctl |= USB_CSFTRST;
537+
while ((USB0.grstctl & USB_CSFTRST) == USB_CSFTRST){}
540538
chip_usb_set_persist_flags(USBDC_BOOT_DFU);
541539
REG_WRITE(RTC_CNTL_OPTION1_REG, RTC_CNTL_FORCE_DOWNLOAD_BOOT);
542540
} else if (usb_persist_enabled) {

‎cores/esp32/main.cpp

Copy file name to clipboardExpand all lines: cores/esp32/main.cpp
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ extern "C" void app_main()
4949
{
5050
#if ARDUINO_SERIAL_PORT //Serial used for USB CDC
5151
USB.begin();
52+
Serial.begin();
5253
#endif
5354
loopTaskWDTEnabled = false;
5455
initArduino();
+30-18Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
11
#include "USB.h"
2+
3+
#if ARDUINO_SERIAL_PORT
4+
#define HWSerial Serial0
5+
#define USBSerial Serial
6+
#else
7+
#define HWSerial Serial
28
USBCDC USBSerial;
9+
#endif
310

411
static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data){
512
if(event_base == ARDUINO_USB_EVENTS){
613
arduino_usb_event_data_t * data = (arduino_usb_event_data_t*)event_data;
714
switch (event_id){
815
case ARDUINO_USB_STARTED_EVENT:
9-
Serial.println("USB PLUGGED");
16+
HWSerial.println("USB PLUGGED");
1017
break;
1118
case ARDUINO_USB_STOPPED_EVENT:
12-
Serial.println("USB UNPLUGGED");
19+
HWSerial.println("USB UNPLUGGED");
1320
break;
1421
case ARDUINO_USB_SUSPEND_EVENT:
15-
Serial.printf("USB SUSPENDED: remote_wakeup_en: %u\n", data->suspend.remote_wakeup_en);
22+
HWSerial.printf("USB SUSPENDED: remote_wakeup_en: %u\n", data->suspend.remote_wakeup_en);
1623
break;
1724
case ARDUINO_USB_RESUME_EVENT:
18-
Serial.println("USB RESUMED");
25+
HWSerial.println("USB RESUMED");
1926
break;
2027

2128
default:
@@ -25,24 +32,25 @@ static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t eve
2532
arduino_usb_cdc_event_data_t * data = (arduino_usb_cdc_event_data_t*)event_data;
2633
switch (event_id){
2734
case ARDUINO_USB_CDC_CONNECTED_EVENT:
28-
Serial.println("CDC CONNECTED");
35+
HWSerial.println("CDC CONNECTED");
2936
break;
3037
case ARDUINO_USB_CDC_DISCONNECTED_EVENT:
31-
Serial.println("CDC DISCONNECTED");
38+
HWSerial.println("CDC DISCONNECTED");
3239
break;
3340
case ARDUINO_USB_CDC_LINE_STATE_EVENT:
34-
Serial.printf("CDC LINE STATE: dtr: %u, rts: %u\n", data->line_state.dtr, data->line_state.rts);
41+
HWSerial.printf("CDC LINE STATE: dtr: %u, rts: %u\n", data->line_state.dtr, data->line_state.rts);
3542
break;
3643
case ARDUINO_USB_CDC_LINE_CODING_EVENT:
37-
Serial.printf("CDC LINE CODING: bit_rate: %u, data_bits: %u, stop_bits: %u, parity: %u\n", data->line_coding.bit_rate, data->line_coding.data_bits, data->line_coding.stop_bits, data->line_coding.parity);
44+
HWSerial.printf("CDC LINE CODING: bit_rate: %u, data_bits: %u, stop_bits: %u, parity: %u\n", data->line_coding.bit_rate, data->line_coding.data_bits, data->line_coding.stop_bits, data->line_coding.parity);
3845
break;
3946
case ARDUINO_USB_CDC_RX_EVENT:
40-
Serial.printf("CDC RX: %u\n", data->rx.len);
47+
HWSerial.printf("CDC RX [%u]:", data->rx.len);
4148
{
4249
uint8_t buf[data->rx.len];
4350
size_t len = USBSerial.read(buf, data->rx.len);
44-
Serial.write(buf, len);
51+
HWSerial.write(buf, len);
4552
}
53+
HWSerial.println();
4654
break;
4755

4856
default:
@@ -51,24 +59,28 @@ static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t eve
5159
}
5260
}
5361

54-
5562
void setup() {
56-
Serial.begin(115200);
57-
Serial.setDebugOutput(true);
63+
HWSerial.begin(115200);
64+
HWSerial.setDebugOutput(true);
5865

5966
USB.onEvent(usbEventCallback);
67+
USBSerial.onEvent(usbEventCallback);
68+
69+
#if !ARDUINO_SERIAL_PORT
70+
USB.enableDFU();
71+
USB.webUSB(true);
72+
USB.webUSBURL("http://localhost/webusb");
6073
USB.productName("ESP32S2-USB");
6174
USB.begin();
62-
63-
USBSerial.onEvent(usbEventCallback);
6475
USBSerial.begin();
76+
#endif
6577
}
6678

6779
void loop() {
68-
while(Serial.available()){
69-
size_t l = Serial.available();
80+
while(HWSerial.available()){
81+
size_t l = HWSerial.available();
7082
uint8_t b[l];
71-
l = Serial.read(b, l);
83+
l = HWSerial.read(b, l);
7284
USBSerial.write(b, l);
7385
}
7486
}

‎platform.txt

Copy file name to clipboardExpand all lines: platform.txt
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ compiler.c.flags.esp32=-mlongcalls -Wno-frame-address -ffunction-sections -fdata
2929
compiler.cpp.flags.esp32=-mlongcalls -Wno-frame-address -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -O2 -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -std=gnu++11 -fexceptions -fno-rtti -MMD -c
3030
compiler.S.flags.esp32=-ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -O2 -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -x assembler-with-cpp -MMD -c
3131
compiler.c.elf.flags.esp32=-T esp32.rom.redefined.ld -T esp32.rom.ld -T esp32.rom.api.ld -T esp32.rom.libgcc.ld -T esp32.rom.newlib-data.ld -T esp32.rom.syscalls.ld -T esp32_out.ld -T esp32.project.ld -T esp32.peripherals.ld -mlongcalls -Wno-frame-address -Wl,--cref -Wl,--gc-sections -fno-rtti -fno-lto -u _Z5setupv -u _Z4loopv -Wl,--wrap=mbedtls_mpi_exp_mod -u esp_app_desc -u pthread_include_pthread_impl -u pthread_include_pthread_cond_impl -u pthread_include_pthread_local_storage_impl -u ld_include_panic_highint_hdl -u start_app -u start_app_other_cores -u __ubsan_include -Wl,--wrap=longjmp -u __assert_func -u vfs_include_syscalls_impl -u call_user_start_cpu0 -Wl,--undefined=uxTopUsedPriority -u app_main -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u __cxa_guard_dummy
32-
compiler.ar.flags.esp32=cru
32+
compiler.ar.flags.esp32=cr
3333
build.extra_flags.esp32=-DARDUINO_SERIAL_PORT=0
3434
#
3535
# ESP32 Support End
@@ -44,7 +44,7 @@ compiler.c.flags.esp32s2=-mlongcalls -ffunction-sections -fdata-sections -Wno-er
4444
compiler.cpp.flags.esp32s2=-mlongcalls -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -O2 -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -std=gnu++11 -fexceptions -fno-rtti -MMD -c
4545
compiler.S.flags.esp32s2=-ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -O2 -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -x assembler-with-cpp -MMD -c
4646
compiler.c.elf.flags.esp32s2=-T esp32s2.rom.ld -T esp32s2.rom.api.ld -T esp32s2.rom.libgcc.ld -T esp32s2.rom.newlib-funcs.ld -T esp32s2.rom.newlib-data.ld -T esp32s2.rom.spiflash.ld -T esp32s2_out.ld -T esp32s2.project.ld -T esp32s2.peripherals.ld -mlongcalls -Wl,--cref -Wl,--gc-sections -fno-rtti -fno-lto -u _Z5setupv -u _Z4loopv -u esp_app_desc -u pthread_include_pthread_impl -u pthread_include_pthread_cond_impl -u pthread_include_pthread_local_storage_impl -u ld_include_panic_highint_hdl -u start_app -u __ubsan_include -Wl,--wrap=longjmp -u __assert_func -u vfs_include_syscalls_impl -u call_user_start_cpu0 -Wl,--undefined=uxTopUsedPriority -u app_main -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u __cxa_guard_dummy
47-
compiler.ar.flags.esp32s2=cru
47+
compiler.ar.flags.esp32s2=cr
4848
build.extra_flags.esp32s2=-DARDUINO_SERIAL_PORT={build.serial}
4949
#
5050
# ESP32S2 Support End

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.