Skip to content

Commit 8335f15

Browse files
committed
initial tinyusb lib port
1 parent 7dc0aa1 commit 8335f15

File tree

7 files changed

+86
-8
lines changed

7 files changed

+86
-8
lines changed

boards.txt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ menu.freq=CPU Speed
44
menu.dbgport=Debug Port
55
menu.dbglvl=Debug Level
66
menu.boot2=Boot Stage 2
7+
menu.usbstack=USB Stack
8+
79
rpipico.name=Raspberry Pi Pico
810
rpipico.vid.0=0x2e8a
911
rpipico.pid.0=0x000a
@@ -24,6 +26,8 @@ rpipico.build.core=rp2040
2426
rpipico.build.mcu=rp2040
2527
rpipico.build.ldscript=memmap_default.ld
2628
rpipico.build.boot2=boot2_w25q080_2_padded_checksum
29+
rpipico.build.vid=0x2e8a
30+
rpipico.build.pid=0x000a
2731
rpipico.menu.flash.2097152_0=2MB (no FS)
2832
rpipico.menu.flash.2097152_0.upload.maximum_size=2093056
2933
rpipico.menu.flash.2097152_0.build.flash_length=2093056
@@ -102,6 +106,11 @@ rpipico.menu.dbglvl.All=All
102106
rpipico.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE
103107
rpipico.menu.dbglvl.NDEBUG=NDEBUG
104108
rpipico.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
109+
rpipico.menu.usbstack.picosdk=Built-in
110+
rpipico.menu.usbstack.picosdk.build.flags.usbstack="-I{runtime.platform.path}/pico-sdk/lib/tinyusb/src/"
111+
rpipico.menu.usbstack.tinyusb=TinyUSB
112+
rpipico.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB"
113+
105114
rpipicopicoprobe.name=Raspberry Pi Pico (Picoprobe)
106115
rpipicopicoprobe.vid.0=0x2e8a
107116
rpipicopicoprobe.pid.0=0x0004
@@ -122,6 +131,8 @@ rpipicopicoprobe.build.core=rp2040
122131
rpipicopicoprobe.build.mcu=rp2040
123132
rpipicopicoprobe.build.ldscript=memmap_default.ld
124133
rpipicopicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
134+
rpipicopicoprobe.build.vid=0x2e8a
135+
rpipicopicoprobe.build.pid=0x000a
125136
rpipicopicoprobe.menu.flash.2097152_0=2MB (no FS)
126137
rpipicopicoprobe.menu.flash.2097152_0.upload.maximum_size=2093056
127138
rpipicopicoprobe.menu.flash.2097152_0.build.flash_length=2093056
@@ -200,6 +211,11 @@ rpipicopicoprobe.menu.dbglvl.All=All
200211
rpipicopicoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE
201212
rpipicopicoprobe.menu.dbglvl.NDEBUG=NDEBUG
202213
rpipicopicoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
214+
rpipicopicoprobe.menu.usbstack.picosdk=Built-in
215+
rpipicopicoprobe.menu.usbstack.picosdk.build.flags.usbstack="-I{runtime.platform.path}/pico-sdk/lib/tinyusb/src/"
216+
rpipicopicoprobe.menu.usbstack.tinyusb=TinyUSB
217+
rpipicopicoprobe.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB"
218+
203219
adafruitfeather.name=Adafruit Feather RP2040
204220
adafruitfeather.vid.0=0x2e8a
205221
adafruitfeather.pid.0=0x000b
@@ -220,6 +236,8 @@ adafruitfeather.build.core=rp2040
220236
adafruitfeather.build.mcu=rp2040
221237
adafruitfeather.build.ldscript=memmap_default.ld
222238
adafruitfeather.build.boot2=boot2_w25x10cl_4_padded_checksum
239+
adafruitfeather.build.vid=0x239a
240+
adafruitfeather.build.pid=0x80f1
223241
adafruitfeather.menu.flash.8388608_0=8MB (no FS)
224242
adafruitfeather.menu.flash.8388608_0.upload.maximum_size=8384512
225243
adafruitfeather.menu.flash.8388608_0.build.flash_length=8384512
@@ -334,6 +352,11 @@ adafruitfeather.menu.dbglvl.All=All
334352
adafruitfeather.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE
335353
adafruitfeather.menu.dbglvl.NDEBUG=NDEBUG
336354
adafruitfeather.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
355+
adafruitfeather.menu.usbstack.picosdk=Built-in
356+
adafruitfeather.menu.usbstack.picosdk.build.flags.usbstack="-I{runtime.platform.path}/pico-sdk/lib/tinyusb/src/"
357+
adafruitfeather.menu.usbstack.tinyusb=TinyUSB
358+
adafruitfeather.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB"
359+
337360
adafruitfeatherpicoprobe.name=Adafruit Feather RP2040 (Picoprobe)
338361
adafruitfeatherpicoprobe.vid.0=0x2e8a
339362
adafruitfeatherpicoprobe.pid.0=0x0004
@@ -354,6 +377,8 @@ adafruitfeatherpicoprobe.build.core=rp2040
354377
adafruitfeatherpicoprobe.build.mcu=rp2040
355378
adafruitfeatherpicoprobe.build.ldscript=memmap_default.ld
356379
adafruitfeatherpicoprobe.build.boot2=boot2_w25x10cl_4_padded_checksum
380+
adafruitfeatherpicoprobe.build.vid=0x239a
381+
adafruitfeatherpicoprobe.build.pid=0x80f1
357382
adafruitfeatherpicoprobe.menu.flash.8388608_0=8MB (no FS)
358383
adafruitfeatherpicoprobe.menu.flash.8388608_0.upload.maximum_size=8384512
359384
adafruitfeatherpicoprobe.menu.flash.8388608_0.build.flash_length=8384512
@@ -468,6 +493,11 @@ adafruitfeatherpicoprobe.menu.dbglvl.All=All
468493
adafruitfeatherpicoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE
469494
adafruitfeatherpicoprobe.menu.dbglvl.NDEBUG=NDEBUG
470495
adafruitfeatherpicoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
496+
adafruitfeatherpicoprobe.menu.usbstack.picosdk=Built-in
497+
adafruitfeatherpicoprobe.menu.usbstack.picosdk.build.flags.usbstack="-I{runtime.platform.path}/pico-sdk/lib/tinyusb/src/"
498+
adafruitfeatherpicoprobe.menu.usbstack.tinyusb=TinyUSB
499+
adafruitfeatherpicoprobe.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB"
500+
471501
generic.name=Generic RP2040
472502
generic.vid.0=0x2e8a
473503
generic.pid.0=0xf00a
@@ -488,6 +518,8 @@ generic.build.core=rp2040
488518
generic.build.mcu=rp2040
489519
generic.build.ldscript=memmap_default.ld
490520
generic.build.boot2=boot2_generic_03h_4_padded_checksum
521+
generic.build.vid=0x2e8a
522+
generic.build.pid=0xf00a
491523
generic.menu.flash.2097152_0=2MB (no FS)
492524
generic.menu.flash.2097152_0.upload.maximum_size=2093056
493525
generic.menu.flash.2097152_0.build.flash_length=2093056
@@ -594,6 +626,11 @@ generic.menu.boot2.boot2_w25x10cl_2_padded_checksum=W25X10CL QSPI /2
594626
generic.menu.boot2.boot2_w25x10cl_2_padded_checksum.build.boot2=boot2_w25x10cl_2_padded_checksum
595627
generic.menu.boot2.boot2_w25x10cl_4_padded_checksum=W25X10CL QSPI /4
596628
generic.menu.boot2.boot2_w25x10cl_4_padded_checksum.build.boot2=boot2_w25x10cl_4_padded_checksum
629+
generic.menu.usbstack.picosdk=Built-in
630+
generic.menu.usbstack.picosdk.build.flags.usbstack="-I{runtime.platform.path}/pico-sdk/lib/tinyusb/src/"
631+
generic.menu.usbstack.tinyusb=TinyUSB
632+
generic.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB"
633+
597634
genericpicoprobe.name=Generic RP2040 (Picoprobe)
598635
genericpicoprobe.vid.0=0x2e8a
599636
genericpicoprobe.pid.0=0x0004
@@ -614,6 +651,8 @@ genericpicoprobe.build.core=rp2040
614651
genericpicoprobe.build.mcu=rp2040
615652
genericpicoprobe.build.ldscript=memmap_default.ld
616653
genericpicoprobe.build.boot2=boot2_generic_03h_4_padded_checksum
654+
genericpicoprobe.build.vid=0x2e8a
655+
genericpicoprobe.build.pid=0xf00a
617656
genericpicoprobe.menu.flash.2097152_0=2MB (no FS)
618657
genericpicoprobe.menu.flash.2097152_0.upload.maximum_size=2093056
619658
genericpicoprobe.menu.flash.2097152_0.build.flash_length=2093056
@@ -720,3 +759,7 @@ genericpicoprobe.menu.boot2.boot2_w25x10cl_2_padded_checksum=W25X10CL QSPI /2
720759
genericpicoprobe.menu.boot2.boot2_w25x10cl_2_padded_checksum.build.boot2=boot2_w25x10cl_2_padded_checksum
721760
genericpicoprobe.menu.boot2.boot2_w25x10cl_4_padded_checksum=W25X10CL QSPI /4
722761
genericpicoprobe.menu.boot2.boot2_w25x10cl_4_padded_checksum.build.boot2=boot2_w25x10cl_4_padded_checksum
762+
genericpicoprobe.menu.usbstack.picosdk=Built-in
763+
genericpicoprobe.menu.usbstack.picosdk.build.flags.usbstack="-I{runtime.platform.path}/pico-sdk/lib/tinyusb/src/"
764+
genericpicoprobe.menu.usbstack.tinyusb=TinyUSB
765+
genericpicoprobe.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB"

cores/rp2040/Arduino.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,14 @@ unsigned long millis();
9595
#define HAVE_HWSERIAL2
9696

9797
#ifdef __cplusplus
98-
#include "SerialUSB.h"
98+
99+
#ifdef USE_TINYUSB
100+
#include "Adafruit_USBD_Interface.h"
101+
#include "Adafruit_USBD_CDC.h"
102+
#else
103+
#include "SerialUSB.h"
104+
#endif
105+
99106
#include "SerialUART.h"
100107
#include "RP2040.h"
101108
#include "Bootsel.h"

cores/rp2040/SerialUSB.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
2121
*/
2222

23+
#ifndef USE_TINYUSB
24+
2325
#include <Arduino.h>
2426
#include "CoreMutex.h"
2527

@@ -189,3 +191,5 @@ void arduino::serialEventRun(void)
189191
serialEvent();
190192
}
191193
}
194+
195+
#endif

cores/rp2040/Stream.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
#include "api/String.h"
1+
#include "api/Stream.h"

cores/rp2040/delay.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,29 @@
2121
#include <pico.h>
2222
#include <pico/time.h>
2323

24+
extern "C"
25+
{
26+
27+
static void __empty(void) {
28+
// NOOP
29+
}
30+
31+
void yield(void) __attribute__ ((weak, alias("__empty")));
32+
}
33+
2434
extern "C" void delay( unsigned long ms ) {
2535
if (!ms) {
2636
return;
2737
}
2838

29-
sleep_ms(ms);
39+
// Call wfe/wfi while have pending USB event can starve the task.
40+
// If there is no alarm interrupt to help wake up MCU.
41+
// TODO better implementation later
42+
// More detail https://github.com/adafruit/circuitpython/pull/2956
43+
while (ms--) {
44+
yield();
45+
sleep_ms(1);
46+
}
3047
}
3148

3249
extern "C" void delayMicroseconds( unsigned int usec ) {
@@ -36,10 +53,6 @@ extern "C" void delayMicroseconds( unsigned int usec ) {
3653
sleep_us(usec);
3754
}
3855

39-
extern "C" void yield() {
40-
// NOOP
41-
}
42-
4356
extern "C" uint32_t millis() {
4457
return to_ms_since_boot(get_absolute_time());
4558
}

cores/rp2040/main.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ extern void loop();
3636
void initVariant() __attribute__((weak));
3737
void initVariant() { }
3838

39+
#ifdef USE_TINYUSB
40+
// Called by main.cpp to initialize usb device typically with CDC device for Serial
41+
void TinyUSB_Device_Init(uint8_t rhport) __attribute__((weak));
42+
#endif
43+
44+
3945

4046
// Optional 2nd core setup and loop
4147
extern void setup1() __attribute__((weak));
@@ -61,10 +67,14 @@ extern "C" int main() {
6167
initVariant();
6268
__USBStart();
6369

70+
#ifdef USE_TINYUSB
71+
TinyUSB_Device_Init(0);
72+
#else
6473
#ifndef DISABLE_USB_SERIAL
6574
// Enable serial port for reset/upload always
6675
Serial.begin();
6776
#endif
77+
#endif
6878

6979
#if defined DEBUG_RP2040_PORT
7080
DEBUG_RP2040_PORT.begin();

platform.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ compiler.warning_flags.default=
3838
compiler.warning_flags.more=-Wall
3939
compiler.warning_flags.all=-Wall -Wextra
4040

41-
compiler.defines={build.led}
41+
compiler.defines={build.led} {build.flags.usbstack} -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DUSB_VID={build.vid} -DUSB_PID={build.pid}
4242
compiler.includes="-iprefix{runtime.platform.path}/" "@{runtime.platform.path}/lib/platform_inc.txt"
4343
compiler.flags=-Os -march=armv6-m -mcpu=cortex-m0plus -mthumb -ffunction-sections -fdata-sections -fno-exceptions
4444
compiler.wrap="@{runtime.platform.path}/lib/platform_wrap.txt"
@@ -80,6 +80,7 @@ build.flash_length=
8080
build.eeprom_start=
8181
build.fs_start=
8282
build.fs_end=
83+
build.flags.usbstack=
8384

8485
build.boot2=boot2_generic_03h_4_padded_checksum
8586

0 commit comments

Comments
 (0)