Skip to content

Commit 275e6ff

Browse files
committed
Add example ESP32-S2 USB-ONLY board
1 parent 934b646 commit 275e6ff

File tree

6 files changed

+217
-19
lines changed

6 files changed

+217
-19
lines changed

boards.txt

Lines changed: 98 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ esp32s2.build.dfu_on_boot=0
181181
esp32s2.build.f_cpu=240000000L
182182
esp32s2.build.flash_size=4MB
183183
esp32s2.build.flash_freq=80m
184-
esp32s2.build.flash_mode=qio
184+
esp32s2.build.flash_mode=dio
185185
esp32s2.build.boot=qio
186186
esp32s2.build.partitions=default
187187
esp32s2.build.defines=
@@ -649,6 +649,103 @@ pico32.menu.DebugLevel.verbose.build.code_debug=5
649649

650650
##############################################################
651651

652+
esp32s2usb.name=ESP32S2 Native USB
653+
esp32s2usb.vid.0=0x303a
654+
esp32s2usb.pid.0=0x0003
655+
656+
esp32s2usb.upload.tool=esptool_py
657+
esp32s2usb.upload.maximum_size=1310720
658+
esp32s2usb.upload.maximum_data_size=327680
659+
esp32s2usb.upload.flags=
660+
esp32s2usb.upload.extra_flags=
661+
esp32s2usb.upload.use_1200bps_touch=true
662+
esp32s2usb.upload.wait_for_upload_port=true
663+
esp32s2usb.upload.speed=921600
664+
665+
esp32s2usb.serial.disableDTR=false
666+
esp32s2usb.serial.disableRTS=false
667+
668+
esp32s2usb.build.tarch=xtensa
669+
esp32s2usb.build.bootloader_addr=0x1000
670+
esp32s2usb.build.target=esp32s2
671+
esp32s2usb.build.mcu=esp32s2
672+
esp32s2usb.build.core=esp32
673+
esp32s2usb.build.variant=esp32s2usb
674+
esp32s2usb.build.board=ESP32S2_USB
675+
676+
esp32s2usb.build.cdc_on_boot=1
677+
esp32s2usb.build.msc_on_boot=1
678+
esp32s2usb.build.dfu_on_boot=1
679+
esp32s2usb.build.f_cpu=240000000L
680+
esp32s2usb.build.flash_size=4MB
681+
esp32s2usb.build.flash_freq=80m
682+
esp32s2usb.build.flash_mode=dio
683+
esp32s2usb.build.boot=qio
684+
esp32s2usb.build.partitions=default
685+
esp32s2usb.build.defines=
686+
687+
esp32s2usb.menu.PSRAM.disabled=Disabled
688+
esp32s2usb.menu.PSRAM.disabled.build.defines=
689+
esp32s2usb.menu.PSRAM.enabled=Enabled
690+
esp32s2usb.menu.PSRAM.enabled.build.defines=-DBOARD_HAS_PSRAM
691+
692+
esp32s2usb.menu.FlashSize.4M=4MB (32Mb)
693+
esp32s2usb.menu.FlashSize.4M.build.flash_size=4MB
694+
esp32s2usb.menu.FlashSize.8M=8MB (64Mb)
695+
esp32s2usb.menu.FlashSize.8M.build.flash_size=8MB
696+
esp32s2usb.menu.FlashSize.8M.build.partitions=default_8MB
697+
esp32s2usb.menu.FlashSize.16M=16MB (128Mb)
698+
esp32s2usb.menu.FlashSize.16M.build.flash_size=16MB
699+
700+
esp32s2usb.menu.PartitionScheme.default=Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)
701+
esp32s2usb.menu.PartitionScheme.default.build.partitions=default
702+
esp32s2usb.menu.PartitionScheme.defaultffat=Default 4MB with ffat (1.2MB APP/1.5MB FATFS)
703+
esp32s2usb.menu.PartitionScheme.defaultffat.build.partitions=default_ffat
704+
esp32s2usb.menu.PartitionScheme.default_8MB=8M Flash (3MB APP/1.5MB FAT)
705+
esp32s2usb.menu.PartitionScheme.default_8MB.build.partitions=default_8MB
706+
esp32s2usb.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336
707+
esp32s2usb.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS)
708+
esp32s2usb.menu.PartitionScheme.minimal.build.partitions=minimal
709+
esp32s2usb.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS)
710+
esp32s2usb.menu.PartitionScheme.no_ota.build.partitions=no_ota
711+
esp32s2usb.menu.PartitionScheme.no_ota.upload.maximum_size=2097152
712+
esp32s2usb.menu.PartitionScheme.noota_3g=No OTA (1MB APP/3MB SPIFFS)
713+
esp32s2usb.menu.PartitionScheme.noota_3g.build.partitions=noota_3g
714+
esp32s2usb.menu.PartitionScheme.noota_3g.upload.maximum_size=1048576
715+
esp32s2usb.menu.PartitionScheme.noota_ffat=No OTA (2MB APP/2MB FATFS)
716+
esp32s2usb.menu.PartitionScheme.noota_ffat.build.partitions=noota_ffat
717+
esp32s2usb.menu.PartitionScheme.noota_ffat.upload.maximum_size=2097152
718+
esp32s2usb.menu.PartitionScheme.noota_3gffat=No OTA (1MB APP/3MB FATFS)
719+
esp32s2usb.menu.PartitionScheme.noota_3gffat.build.partitions=noota_3gffat
720+
esp32s2usb.menu.PartitionScheme.noota_3gffat.upload.maximum_size=1048576
721+
esp32s2usb.menu.PartitionScheme.huge_app=Huge APP (3MB No OTA/1MB SPIFFS)
722+
esp32s2usb.menu.PartitionScheme.huge_app.build.partitions=huge_app
723+
esp32s2usb.menu.PartitionScheme.huge_app.upload.maximum_size=3145728
724+
esp32s2usb.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS)
725+
esp32s2usb.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs
726+
esp32s2usb.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080
727+
esp32s2usb.menu.PartitionScheme.fatflash=16M Flash (2MB APP/12.5MB FAT)
728+
esp32s2usb.menu.PartitionScheme.fatflash.build.partitions=ffat
729+
esp32s2usb.menu.PartitionScheme.fatflash.upload.maximum_size=2097152
730+
esp32s2usb.menu.PartitionScheme.app3M_fat9M_16MB=16M Flash (3MB APP/9MB FATFS)
731+
esp32s2usb.menu.PartitionScheme.app3M_fat9M_16MB.build.partitions=app3M_fat9M_16MB
732+
esp32s2usb.menu.PartitionScheme.app3M_fat9M_16MB.upload.maximum_size=3145728
733+
734+
esp32s2usb.menu.DebugLevel.none=None
735+
esp32s2usb.menu.DebugLevel.none.build.code_debug=0
736+
esp32s2usb.menu.DebugLevel.error=Error
737+
esp32s2usb.menu.DebugLevel.error.build.code_debug=1
738+
esp32s2usb.menu.DebugLevel.warn=Warn
739+
esp32s2usb.menu.DebugLevel.warn.build.code_debug=2
740+
esp32s2usb.menu.DebugLevel.info=Info
741+
esp32s2usb.menu.DebugLevel.info.build.code_debug=3
742+
esp32s2usb.menu.DebugLevel.debug=Debug
743+
esp32s2usb.menu.DebugLevel.debug.build.code_debug=4
744+
esp32s2usb.menu.DebugLevel.verbose=Verbose
745+
esp32s2usb.menu.DebugLevel.verbose.build.code_debug=5
746+
747+
##############################################################
748+
652749
esp32wroverkit.name=ESP32 Wrover Kit (all versions)
653750
esp32wroverkit.upload.tool=esptool_py
654751
esp32wroverkit.upload.maximum_size=1310720

cores/esp32/FirmwareMSC.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,27 @@
1717
#include "esp_partition.h"
1818
#include "esp_ota_ops.h"
1919
#include "esp32-hal.h"
20+
#include "pins_arduino.h"
2021
#include "firmware_msc_fat.h"
2122

2223
#if CONFIG_TINYUSB_MSC_ENABLED
24+
25+
#ifndef USB_FW_MSC_VENDOR_ID
26+
#define USB_FW_MSC_VENDOR_ID "ESP32" //max 8 chars
27+
#endif
28+
#ifndef USB_FW_MSC_PRODUCT_ID
29+
#define USB_FW_MSC_PRODUCT_ID "Firmware MSC"//max 16 chars
30+
#endif
31+
#ifndef USB_FW_MSC_PRODUCT_REVISION
32+
#define USB_FW_MSC_PRODUCT_REVISION "1.0" //max 4 chars
33+
#endif
34+
#ifndef USB_FW_MSC_VOLUME_NAME
35+
#define USB_FW_MSC_VOLUME_NAME "ESP32-FWMSC" //max 11 chars
36+
#endif
37+
#ifndef USB_FW_MSC_SERIAL_NUMBER
38+
#define USB_FW_MSC_SERIAL_NUMBER 0x00000000
39+
#endif
40+
2341
ESP_EVENT_DEFINE_BASE(ARDUINO_FIRMWARE_MSC_EVENTS);
2442
esp_err_t arduino_usb_event_post(esp_event_base_t event_base, int32_t event_id, void *event_data, size_t event_data_size, TickType_t ticks_to_wait);
2543
esp_err_t arduino_usb_event_handler_register_with(esp_event_base_t event_base, int32_t event_id, esp_event_handler_t event_handler, void *event_handler_arg);
@@ -334,7 +352,7 @@ FirmwareMSC::FirmwareMSC():msc(){}
334352
FirmwareMSC::~FirmwareMSC(){}
335353

336354
bool FirmwareMSC::begin(){
337-
if(!msc_update_setup_disk("ESP32-FWMSC", 0x0)){
355+
if(!msc_update_setup_disk(USB_FW_MSC_VOLUME_NAME, USB_FW_MSC_SERIAL_NUMBER)){
338356
return false;
339357
}
340358

@@ -345,9 +363,9 @@ bool FirmwareMSC::begin(){
345363
}
346364
}
347365

348-
msc.vendorID("ESP32S2");//max 8 chars
349-
msc.productID("Firmware MSC");//max 16 chars
350-
msc.productRevision("1.0");//max 4 chars
366+
msc.vendorID(USB_FW_MSC_VENDOR_ID);
367+
msc.productID(USB_FW_MSC_PRODUCT_ID);
368+
msc.productRevision(USB_FW_MSC_PRODUCT_REVISION);
351369
msc.onStartStop(msc_start_stop);
352370
msc.onRead(msc_read);
353371
msc.onWrite(msc_write);

cores/esp32/USB.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@
3131
#ifndef USB_SERIAL
3232
#define USB_SERIAL "0"
3333
#endif
34+
#ifndef USB_WEBUSB_ENABLED
35+
#define USB_WEBUSB_ENABLED false
36+
#endif
37+
#ifndef USB_WEBUSB_URL
38+
#define USB_WEBUSB_URL "https://espressif.github.io/arduino-esp32/webusb.html"
39+
#endif
3440

3541
#if CFG_TUD_DFU_RUNTIME
3642
static uint16_t load_dfu_descriptor(uint8_t * dst, uint8_t * itf)
@@ -116,8 +122,8 @@ ESPUSB::ESPUSB(size_t task_stack_size, uint8_t event_task_priority)
116122
,usb_protocol(MISC_PROTOCOL_IAD)
117123
,usb_attributes(TUSB_DESC_CONFIG_ATT_SELF_POWERED)
118124
,usb_power_ma(500)
119-
,webusb_enabled(false)
120-
,webusb_url("https://espressif.github.io/arduino-esp32/webusb.html")
125+
,webusb_enabled(USB_WEBUSB_ENABLED)
126+
,webusb_url(USB_WEBUSB_URL)
121127
,_started(false)
122128
,_task_stack_size(task_stack_size)
123129
,_event_task_priority(event_task_priority)

cores/esp32/USBMSC.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ static void cplstr(void *dst, const void * src, size_t max_len){
6161
// Invoked when received GET_MAX_LUN request, required for multiple LUNs implementation
6262
uint8_t tud_msc_get_maxlun_cb(void)
6363
{
64-
log_v("");
64+
log_v("%u", MSC_ACTIVE_LUN);
6565
return MSC_ACTIVE_LUN;
6666
}
6767

cores/esp32/firmware_msc_fat.c

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,22 @@
1313
// limitations under the License.
1414

1515
#include "firmware_msc_fat.h"
16-
17-
static void cplstr(void *dst, const void * src, size_t max_len){
16+
//copy up to max_len chars from src to dst and do not terminate
17+
static size_t cplstr(void *dst, const void * src, size_t max_len){
1818
if(!src || !dst || !max_len){
19-
return;
19+
return 0;
2020
}
2121
size_t l = strlen((const char *)src);
2222
if(l > max_len){
2323
l = max_len;
2424
}
2525
memcpy(dst, src, l);
26+
return l;
2627
}
2728

29+
//copy up to max_len chars from src to dst, adding spaces up to max_len. do not terminate
2830
static void cplstrsp(void *dst, const void * src, size_t max_len){
29-
if(!src || !dst || !max_len){
30-
return;
31-
}
32-
size_t l = strlen((const char *)src);
33-
if(l > max_len){
34-
l = max_len;
35-
}
36-
memcpy(dst, src, l);
31+
size_t l = cplstr(dst, src, max_len);
3732
for(l; l < max_len; l++){
3833
((uint8_t*)dst)[l] = 0x20;
3934
}
@@ -89,6 +84,7 @@ static void fat16_set_table_index(uint8_t * table, uint16_t index, uint16_t valu
8984
*(uint16_t *)(table + offset) = value;
9085
}
9186

87+
//Interface
9288
const char * fat_file_system_type(bool fat16) {
9389
return ((fat16)?FAT16_FILE_SYSTEM_TYPE:FAT12_FILE_SYSTEM_TYPE);
9490
}

variants/esp32s2usb/pins_arduino.h

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#ifndef Pins_Arduino_h
2+
#define Pins_Arduino_h
3+
4+
#include <stdint.h>
5+
6+
// Default USB Settings
7+
#define USB_VID 0x303A
8+
#define USB_PID 0x0003
9+
#define USB_MANUFACTURER "Espressif Systems"
10+
#define USB_PRODUCT "ESP32-S2-USB"
11+
#define USB_SERIAL "0"
12+
#define USB_WEBUSB_ENABLED false
13+
#define USB_WEBUSB_URL "https://espressif.github.io/arduino-esp32/webusb.html"
14+
15+
// Default USB FirmwareMSC Settings
16+
#define USB_FW_MSC_VENDOR_ID "ESP32-S2" //max 8 chars
17+
#define USB_FW_MSC_PRODUCT_ID "Firmware MSC" //max 16 chars
18+
#define USB_FW_MSC_PRODUCT_REVISION "1.23" //max 4 chars
19+
#define USB_FW_MSC_VOLUME_NAME "S2-Firmware" //max 11 chars
20+
#define USB_FW_MSC_SERIAL_NUMBER 0x00000000
21+
22+
23+
#define EXTERNAL_NUM_INTERRUPTS 46
24+
#define NUM_DIGITAL_PINS 48
25+
#define NUM_ANALOG_INPUTS 20
26+
27+
#define analogInputToDigitalPin(p) (((p)<20)?(esp32_adc2gpio[(p)]):-1)
28+
#define digitalPinToInterrupt(p) (((p)<48)?(p):-1)
29+
#define digitalPinHasPWM(p) (p < 46)
30+
31+
static const uint8_t TX = 43;
32+
static const uint8_t RX = 44;
33+
34+
static const uint8_t SDA = 8;
35+
static const uint8_t SCL = 9;
36+
37+
static const uint8_t SS = 34;
38+
static const uint8_t MOSI = 35;
39+
static const uint8_t MISO = 37;
40+
static const uint8_t SCK = 36;
41+
42+
static const uint8_t A0 = 1;
43+
static const uint8_t A1 = 2;
44+
static const uint8_t A2 = 3;
45+
static const uint8_t A3 = 4;
46+
static const uint8_t A4 = 5;
47+
static const uint8_t A5 = 6;
48+
static const uint8_t A6 = 7;
49+
static const uint8_t A7 = 8;
50+
static const uint8_t A8 = 9;
51+
static const uint8_t A9 = 10;
52+
static const uint8_t A10 = 11;
53+
static const uint8_t A11 = 12;
54+
static const uint8_t A12 = 13;
55+
static const uint8_t A13 = 14;
56+
static const uint8_t A14 = 15;
57+
static const uint8_t A15 = 16;
58+
static const uint8_t A16 = 17;
59+
static const uint8_t A17 = 18;
60+
static const uint8_t A18 = 19;
61+
static const uint8_t A19 = 20;
62+
63+
static const uint8_t T1 = 1;
64+
static const uint8_t T2 = 2;
65+
static const uint8_t T3 = 3;
66+
static const uint8_t T4 = 4;
67+
static const uint8_t T5 = 5;
68+
static const uint8_t T6 = 6;
69+
static const uint8_t T7 = 7;
70+
static const uint8_t T8 = 8;
71+
static const uint8_t T9 = 9;
72+
static const uint8_t T10 = 10;
73+
static const uint8_t T11 = 11;
74+
static const uint8_t T12 = 12;
75+
static const uint8_t T13 = 13;
76+
static const uint8_t T14 = 14;
77+
78+
static const uint8_t DAC1 = 17;
79+
static const uint8_t DAC2 = 18;
80+
81+
#endif /* Pins_Arduino_h */

0 commit comments

Comments
 (0)