Compare commits

..
10 Commits
Author SHA1 Message Date
Earle F. Philhower, III c80c08d32c Update package.json 2021-12-28 08:27:34 -08:00
Earle F. Philhower, III ce7d337c5c Add SoftwareSerial-like PIO based UARTs (#391)
Adds support to the core for PIO-based, software-created UARTs, up to 8 (the number of PIO state machines) possible.

By using a custom program on the PIO state machines, it allows for very high bit rates and does not require CPU or interrupts.

Bit widths from 5- to 8-bits, 1 or 2 stop bits, and even/odd/none parity are supported.
2021-12-28 08:27:08 -08:00
Earle F. Philhower, III dc1198bd9c Use interrupts to capture Serial UART data, not polling (#393)
PR #379 was an ugly hack which works only if you poll the Serial port more
frequently than ~8 byte times.

This PR replaces the polling with an IRQ based lockless writer/reader queue
so that even if you only read every 32 byte times, the Serial1/2 port should
not lose data.  It also should use less CPU and allow for somewhat higher
throughput.
2021-12-28 08:21:03 -08:00
Earle F. Philhower, III f46d7cc84f Speed up SPI by not reinitting if the paramters are the same as before (#394)
Leave the SPI port initted after a transaction, and when a new one comes in
check if it is the same settings we're already running.  If so, do nothing.
If not, deinit and reinit.  In general the settings will be identical, so
this will speed things up massively.

Fixes #392
2021-12-27 12:25:12 -08:00
Earle F. Philhower, III 5ee764390e Update README.md 2021-12-26 05:29:10 -08:00
Limor "Ladyada" Fried 894a82f54f Add Adafruit KB2040 (#390) 2021-12-26 05:28:50 -08:00
Earle F. Philhower, III 5cc9835303 Add warning not to edit boards.txt (#383) 2021-12-23 08:09:59 -08:00
Earle F. Philhower, III 48877984b7 Remove redundant board.mcu in boards.txt, fix precompiled libs (#382)
* Remove redundant/wrong second board.mcu in boards.txt

Fixes #380

Boards.txt had the setting board.mcu twice.  The first one was correct,
while the second one wasn't and shouldn't have been there.  Remove it.

* Include fix from @rei-vilo in #381
2021-12-23 07:55:34 -08:00
Earle F. Philhower, III a58f49018a Add a poor-man's software FIFO for serial UART reads (#379)
Because the hardware FIFO is quite small and doesn't report the actual number
of bytes available, implement a software FIFO that will pull all available
bytes out of the HW FIFO on any Serial call.  It's not as efficient or as
bulletproof as an IRQ based method, but it is simpler to implement and can
help with issues like #378
2021-12-23 07:41:34 -08:00
Earle F. Philhower, III 7120a1508c Update to SDK version 1.3.0 (#371) 2021-12-14 18:59:24 -08:00
24 changed files with 1323 additions and 120 deletions
+1
View File
@@ -13,6 +13,7 @@ See https://arduino-pico.readthedocs.io/en/latest/ along with the examples for m
* Raspberry Pi Pico
* Adafruit Feather RP2040
* Adafruit ItsyBitsy RP2040
* Adafruit KB2040
* Adafruit Macropad RP2040
* Adafruit QTPy RP2040
* Adafruit STEMMA Friend RP2040
+491 -57
View File
@@ -1,3 +1,7 @@
# WARNING - DO NOT EDIT THIS FILE, IT IS MACHINE GENERATED
# To change something here, edit tools/makeboards.py and
# run 'python3 makeboards.py > ../boards.txt' to regenerate
menu.BoardModel=Model
menu.flash=Flash Size
menu.freq=CPU Speed
@@ -29,7 +33,6 @@ rpipico.serial.disableRTS=false
rpipico.build.f_cpu=125000000
rpipico.build.led=
rpipico.build.core=rp2040
rpipico.build.mcu=rp2040
rpipico.build.ldscript=memmap_default.ld
rpipico.build.ram_length=256k
rpipico.build.boot2=boot2_w25q080_2_padded_checksum
@@ -157,7 +160,6 @@ rpipicopicoprobe.serial.disableRTS=false
rpipicopicoprobe.build.f_cpu=125000000
rpipicopicoprobe.build.led=
rpipicopicoprobe.build.core=rp2040
rpipicopicoprobe.build.mcu=rp2040
rpipicopicoprobe.build.ldscript=memmap_default.ld
rpipicopicoprobe.build.ram_length=256k
rpipicopicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -285,7 +287,6 @@ rpipicopicodebug.serial.disableRTS=false
rpipicopicodebug.build.f_cpu=125000000
rpipicopicodebug.build.led=
rpipicopicodebug.build.core=rp2040
rpipicopicodebug.build.mcu=rp2040
rpipicopicodebug.build.ldscript=memmap_default.ld
rpipicopicodebug.build.ram_length=240k
rpipicopicodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -411,7 +412,6 @@ adafruit_feather.serial.disableRTS=false
adafruit_feather.build.f_cpu=125000000
adafruit_feather.build.led=
adafruit_feather.build.core=rp2040
adafruit_feather.build.mcu=rp2040
adafruit_feather.build.ldscript=memmap_default.ld
adafruit_feather.build.ram_length=256k
adafruit_feather.build.boot2=boot2_w25x10cl_4_padded_checksum
@@ -575,7 +575,6 @@ adafruit_featherpicoprobe.serial.disableRTS=false
adafruit_featherpicoprobe.build.f_cpu=125000000
adafruit_featherpicoprobe.build.led=
adafruit_featherpicoprobe.build.core=rp2040
adafruit_featherpicoprobe.build.mcu=rp2040
adafruit_featherpicoprobe.build.ldscript=memmap_default.ld
adafruit_featherpicoprobe.build.ram_length=256k
adafruit_featherpicoprobe.build.boot2=boot2_w25x10cl_4_padded_checksum
@@ -739,7 +738,6 @@ adafruit_featherpicodebug.serial.disableRTS=false
adafruit_featherpicodebug.build.f_cpu=125000000
adafruit_featherpicodebug.build.led=
adafruit_featherpicodebug.build.core=rp2040
adafruit_featherpicodebug.build.mcu=rp2040
adafruit_featherpicodebug.build.ldscript=memmap_default.ld
adafruit_featherpicodebug.build.ram_length=240k
adafruit_featherpicodebug.build.boot2=boot2_w25x10cl_4_padded_checksum
@@ -901,7 +899,6 @@ adafruit_itsybitsy.serial.disableRTS=false
adafruit_itsybitsy.build.f_cpu=125000000
adafruit_itsybitsy.build.led=
adafruit_itsybitsy.build.core=rp2040
adafruit_itsybitsy.build.mcu=rp2040
adafruit_itsybitsy.build.ldscript=memmap_default.ld
adafruit_itsybitsy.build.ram_length=256k
adafruit_itsybitsy.build.boot2=boot2_w25q080_2_padded_checksum
@@ -1065,7 +1062,6 @@ adafruit_itsybitsypicoprobe.serial.disableRTS=false
adafruit_itsybitsypicoprobe.build.f_cpu=125000000
adafruit_itsybitsypicoprobe.build.led=
adafruit_itsybitsypicoprobe.build.core=rp2040
adafruit_itsybitsypicoprobe.build.mcu=rp2040
adafruit_itsybitsypicoprobe.build.ldscript=memmap_default.ld
adafruit_itsybitsypicoprobe.build.ram_length=256k
adafruit_itsybitsypicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -1229,7 +1225,6 @@ adafruit_itsybitsypicodebug.serial.disableRTS=false
adafruit_itsybitsypicodebug.build.f_cpu=125000000
adafruit_itsybitsypicodebug.build.led=
adafruit_itsybitsypicodebug.build.core=rp2040
adafruit_itsybitsypicodebug.build.mcu=rp2040
adafruit_itsybitsypicodebug.build.ldscript=memmap_default.ld
adafruit_itsybitsypicodebug.build.ram_length=240k
adafruit_itsybitsypicodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -1391,7 +1386,6 @@ adafruit_qtpy.serial.disableRTS=false
adafruit_qtpy.build.f_cpu=125000000
adafruit_qtpy.build.led=
adafruit_qtpy.build.core=rp2040
adafruit_qtpy.build.mcu=rp2040
adafruit_qtpy.build.ldscript=memmap_default.ld
adafruit_qtpy.build.ram_length=256k
adafruit_qtpy.build.boot2=boot2_w25q080_2_padded_checksum
@@ -1555,7 +1549,6 @@ adafruit_qtpypicoprobe.serial.disableRTS=false
adafruit_qtpypicoprobe.build.f_cpu=125000000
adafruit_qtpypicoprobe.build.led=
adafruit_qtpypicoprobe.build.core=rp2040
adafruit_qtpypicoprobe.build.mcu=rp2040
adafruit_qtpypicoprobe.build.ldscript=memmap_default.ld
adafruit_qtpypicoprobe.build.ram_length=256k
adafruit_qtpypicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -1719,7 +1712,6 @@ adafruit_qtpypicodebug.serial.disableRTS=false
adafruit_qtpypicodebug.build.f_cpu=125000000
adafruit_qtpypicodebug.build.led=
adafruit_qtpypicodebug.build.core=rp2040
adafruit_qtpypicodebug.build.mcu=rp2040
adafruit_qtpypicodebug.build.ldscript=memmap_default.ld
adafruit_qtpypicodebug.build.ram_length=240k
adafruit_qtpypicodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -1881,7 +1873,6 @@ adafruit_stemmafriend.serial.disableRTS=false
adafruit_stemmafriend.build.f_cpu=125000000
adafruit_stemmafriend.build.led=
adafruit_stemmafriend.build.core=rp2040
adafruit_stemmafriend.build.mcu=rp2040
adafruit_stemmafriend.build.ldscript=memmap_default.ld
adafruit_stemmafriend.build.ram_length=256k
adafruit_stemmafriend.build.boot2=boot2_w25q080_2_padded_checksum
@@ -2045,7 +2036,6 @@ adafruit_stemmafriendpicoprobe.serial.disableRTS=false
adafruit_stemmafriendpicoprobe.build.f_cpu=125000000
adafruit_stemmafriendpicoprobe.build.led=
adafruit_stemmafriendpicoprobe.build.core=rp2040
adafruit_stemmafriendpicoprobe.build.mcu=rp2040
adafruit_stemmafriendpicoprobe.build.ldscript=memmap_default.ld
adafruit_stemmafriendpicoprobe.build.ram_length=256k
adafruit_stemmafriendpicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -2209,7 +2199,6 @@ adafruit_stemmafriendpicodebug.serial.disableRTS=false
adafruit_stemmafriendpicodebug.build.f_cpu=125000000
adafruit_stemmafriendpicodebug.build.led=
adafruit_stemmafriendpicodebug.build.core=rp2040
adafruit_stemmafriendpicodebug.build.mcu=rp2040
adafruit_stemmafriendpicodebug.build.ldscript=memmap_default.ld
adafruit_stemmafriendpicodebug.build.ram_length=240k
adafruit_stemmafriendpicodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -2371,7 +2360,6 @@ adafruit_trinkeyrp2040qt.serial.disableRTS=false
adafruit_trinkeyrp2040qt.build.f_cpu=125000000
adafruit_trinkeyrp2040qt.build.led=
adafruit_trinkeyrp2040qt.build.core=rp2040
adafruit_trinkeyrp2040qt.build.mcu=rp2040
adafruit_trinkeyrp2040qt.build.ldscript=memmap_default.ld
adafruit_trinkeyrp2040qt.build.ram_length=256k
adafruit_trinkeyrp2040qt.build.boot2=boot2_w25q080_2_padded_checksum
@@ -2535,7 +2523,6 @@ adafruit_trinkeyrp2040qtpicoprobe.serial.disableRTS=false
adafruit_trinkeyrp2040qtpicoprobe.build.f_cpu=125000000
adafruit_trinkeyrp2040qtpicoprobe.build.led=
adafruit_trinkeyrp2040qtpicoprobe.build.core=rp2040
adafruit_trinkeyrp2040qtpicoprobe.build.mcu=rp2040
adafruit_trinkeyrp2040qtpicoprobe.build.ldscript=memmap_default.ld
adafruit_trinkeyrp2040qtpicoprobe.build.ram_length=256k
adafruit_trinkeyrp2040qtpicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -2699,7 +2686,6 @@ adafruit_trinkeyrp2040qtpicodebug.serial.disableRTS=false
adafruit_trinkeyrp2040qtpicodebug.build.f_cpu=125000000
adafruit_trinkeyrp2040qtpicodebug.build.led=
adafruit_trinkeyrp2040qtpicodebug.build.core=rp2040
adafruit_trinkeyrp2040qtpicodebug.build.mcu=rp2040
adafruit_trinkeyrp2040qtpicodebug.build.ldscript=memmap_default.ld
adafruit_trinkeyrp2040qtpicodebug.build.ram_length=240k
adafruit_trinkeyrp2040qtpicodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -2861,7 +2847,6 @@ adafruit_macropad2040.serial.disableRTS=false
adafruit_macropad2040.build.f_cpu=125000000
adafruit_macropad2040.build.led=
adafruit_macropad2040.build.core=rp2040
adafruit_macropad2040.build.mcu=rp2040
adafruit_macropad2040.build.ldscript=memmap_default.ld
adafruit_macropad2040.build.ram_length=256k
adafruit_macropad2040.build.boot2=boot2_w25q080_2_padded_checksum
@@ -3025,7 +3010,6 @@ adafruit_macropad2040picoprobe.serial.disableRTS=false
adafruit_macropad2040picoprobe.build.f_cpu=125000000
adafruit_macropad2040picoprobe.build.led=
adafruit_macropad2040picoprobe.build.core=rp2040
adafruit_macropad2040picoprobe.build.mcu=rp2040
adafruit_macropad2040picoprobe.build.ldscript=memmap_default.ld
adafruit_macropad2040picoprobe.build.ram_length=256k
adafruit_macropad2040picoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -3189,7 +3173,6 @@ adafruit_macropad2040picodebug.serial.disableRTS=false
adafruit_macropad2040picodebug.build.f_cpu=125000000
adafruit_macropad2040picodebug.build.led=
adafruit_macropad2040picodebug.build.core=rp2040
adafruit_macropad2040picodebug.build.mcu=rp2040
adafruit_macropad2040picodebug.build.ldscript=memmap_default.ld
adafruit_macropad2040picodebug.build.ram_length=240k
adafruit_macropad2040picodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -3330,6 +3313,493 @@ adafruit_macropad2040picodebug.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_macropad2040picodebug.menu.usbstack.nousb=No USB
adafruit_macropad2040picodebug.menu.usbstack.nousb.build.usbstack_flags="-DNO_USB -DDISABLE_USB_SERIAL -I{runtime.platform.path}/tools/libpico"
# -----------------------------------
# Adafruit KB2040
# -----------------------------------
adafruit_kb2040.name=Adafruit KB2040
adafruit_kb2040.vid.0=0x239a
adafruit_kb2040.pid.0=0x8105
adafruit_kb2040.build.usbpid=-DSERIALUSB_PID=0x8105
adafruit_kb2040.build.usbpwr=-DUSBD_MAX_POWER_MA=250
adafruit_kb2040.build.board=ADAFRUIT_KB2040_RP2040
adafruit_kb2040.build.mcu=cortex-m0plus
adafruit_kb2040.build.variant=adafruit_kb2040
adafruit_kb2040.upload.tool=uf2conv
adafruit_kb2040.upload.maximum_size=8388608
adafruit_kb2040.upload.maximum_data_size=262144
adafruit_kb2040.upload.wait_for_upload_port=true
adafruit_kb2040.upload.erase_cmd=
adafruit_kb2040.serial.disableDTR=false
adafruit_kb2040.serial.disableRTS=false
adafruit_kb2040.build.f_cpu=125000000
adafruit_kb2040.build.led=
adafruit_kb2040.build.core=rp2040
adafruit_kb2040.build.ldscript=memmap_default.ld
adafruit_kb2040.build.ram_length=256k
adafruit_kb2040.build.boot2=boot2_w25q080_2_padded_checksum
adafruit_kb2040.build.vid=0x239a
adafruit_kb2040.build.pid=0x8105
adafruit_kb2040.build.usb_manufacturer="Adafruit"
adafruit_kb2040.build.usb_product="KB2040"
adafruit_kb2040.menu.flash.8388608_0=8MB (no FS)
adafruit_kb2040.menu.flash.8388608_0.upload.maximum_size=8384512
adafruit_kb2040.menu.flash.8388608_0.build.flash_length=8384512
adafruit_kb2040.menu.flash.8388608_0.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_0.build.fs_start=276819968
adafruit_kb2040.menu.flash.8388608_0.build.fs_end=276819968
adafruit_kb2040.menu.flash.8388608_65536=8MB (Sketch: 8128KB, FS: 64KB)
adafruit_kb2040.menu.flash.8388608_65536.upload.maximum_size=8318976
adafruit_kb2040.menu.flash.8388608_65536.build.flash_length=8318976
adafruit_kb2040.menu.flash.8388608_65536.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_65536.build.fs_start=276754432
adafruit_kb2040.menu.flash.8388608_65536.build.fs_end=276819968
adafruit_kb2040.menu.flash.8388608_131072=8MB (Sketch: 8064KB, FS: 128KB)
adafruit_kb2040.menu.flash.8388608_131072.upload.maximum_size=8253440
adafruit_kb2040.menu.flash.8388608_131072.build.flash_length=8253440
adafruit_kb2040.menu.flash.8388608_131072.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_131072.build.fs_start=276688896
adafruit_kb2040.menu.flash.8388608_131072.build.fs_end=276819968
adafruit_kb2040.menu.flash.8388608_262144=8MB (Sketch: 7936KB, FS: 256KB)
adafruit_kb2040.menu.flash.8388608_262144.upload.maximum_size=8122368
adafruit_kb2040.menu.flash.8388608_262144.build.flash_length=8122368
adafruit_kb2040.menu.flash.8388608_262144.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_262144.build.fs_start=276557824
adafruit_kb2040.menu.flash.8388608_262144.build.fs_end=276819968
adafruit_kb2040.menu.flash.8388608_524288=8MB (Sketch: 7680KB, FS: 512KB)
adafruit_kb2040.menu.flash.8388608_524288.upload.maximum_size=7860224
adafruit_kb2040.menu.flash.8388608_524288.build.flash_length=7860224
adafruit_kb2040.menu.flash.8388608_524288.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_524288.build.fs_start=276295680
adafruit_kb2040.menu.flash.8388608_524288.build.fs_end=276819968
adafruit_kb2040.menu.flash.8388608_1048576=8MB (Sketch: 7MB, FS: 1MB)
adafruit_kb2040.menu.flash.8388608_1048576.upload.maximum_size=7335936
adafruit_kb2040.menu.flash.8388608_1048576.build.flash_length=7335936
adafruit_kb2040.menu.flash.8388608_1048576.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_1048576.build.fs_start=275771392
adafruit_kb2040.menu.flash.8388608_1048576.build.fs_end=276819968
adafruit_kb2040.menu.flash.8388608_2097152=8MB (Sketch: 6MB, FS: 2MB)
adafruit_kb2040.menu.flash.8388608_2097152.upload.maximum_size=6287360
adafruit_kb2040.menu.flash.8388608_2097152.build.flash_length=6287360
adafruit_kb2040.menu.flash.8388608_2097152.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_2097152.build.fs_start=274722816
adafruit_kb2040.menu.flash.8388608_2097152.build.fs_end=276819968
adafruit_kb2040.menu.flash.8388608_3145728=8MB (Sketch: 5MB, FS: 3MB)
adafruit_kb2040.menu.flash.8388608_3145728.upload.maximum_size=5238784
adafruit_kb2040.menu.flash.8388608_3145728.build.flash_length=5238784
adafruit_kb2040.menu.flash.8388608_3145728.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_3145728.build.fs_start=273674240
adafruit_kb2040.menu.flash.8388608_3145728.build.fs_end=276819968
adafruit_kb2040.menu.flash.8388608_4194304=8MB (Sketch: 4MB, FS: 4MB)
adafruit_kb2040.menu.flash.8388608_4194304.upload.maximum_size=4190208
adafruit_kb2040.menu.flash.8388608_4194304.build.flash_length=4190208
adafruit_kb2040.menu.flash.8388608_4194304.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_4194304.build.fs_start=272625664
adafruit_kb2040.menu.flash.8388608_4194304.build.fs_end=276819968
adafruit_kb2040.menu.flash.8388608_5242880=8MB (Sketch: 3MB, FS: 5MB)
adafruit_kb2040.menu.flash.8388608_5242880.upload.maximum_size=3141632
adafruit_kb2040.menu.flash.8388608_5242880.build.flash_length=3141632
adafruit_kb2040.menu.flash.8388608_5242880.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_5242880.build.fs_start=271577088
adafruit_kb2040.menu.flash.8388608_5242880.build.fs_end=276819968
adafruit_kb2040.menu.flash.8388608_6291456=8MB (Sketch: 2MB, FS: 6MB)
adafruit_kb2040.menu.flash.8388608_6291456.upload.maximum_size=2093056
adafruit_kb2040.menu.flash.8388608_6291456.build.flash_length=2093056
adafruit_kb2040.menu.flash.8388608_6291456.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_6291456.build.fs_start=270528512
adafruit_kb2040.menu.flash.8388608_6291456.build.fs_end=276819968
adafruit_kb2040.menu.flash.8388608_7340032=8MB (Sketch: 1MB, FS: 7MB)
adafruit_kb2040.menu.flash.8388608_7340032.upload.maximum_size=1044480
adafruit_kb2040.menu.flash.8388608_7340032.build.flash_length=1044480
adafruit_kb2040.menu.flash.8388608_7340032.build.eeprom_start=276819968
adafruit_kb2040.menu.flash.8388608_7340032.build.fs_start=269479936
adafruit_kb2040.menu.flash.8388608_7340032.build.fs_end=276819968
adafruit_kb2040.menu.freq.125=125 MHz
adafruit_kb2040.menu.freq.125.build.f_cpu=125000000L
adafruit_kb2040.menu.freq.50=50 MHz
adafruit_kb2040.menu.freq.50.build.f_cpu=50000000L
adafruit_kb2040.menu.freq.100=100 MHz
adafruit_kb2040.menu.freq.100.build.f_cpu=100000000L
adafruit_kb2040.menu.freq.133=133 MHz
adafruit_kb2040.menu.freq.133.build.f_cpu=133000000L
adafruit_kb2040.menu.freq.150=150 MHz (Overclock)
adafruit_kb2040.menu.freq.150.build.f_cpu=150000000L
adafruit_kb2040.menu.freq.175=175 MHz (Overclock)
adafruit_kb2040.menu.freq.175.build.f_cpu=175000000L
adafruit_kb2040.menu.freq.200=200 MHz (Overclock)
adafruit_kb2040.menu.freq.200.build.f_cpu=200000000L
adafruit_kb2040.menu.freq.225=225 MHz (Overclock)
adafruit_kb2040.menu.freq.225.build.f_cpu=225000000L
adafruit_kb2040.menu.freq.250=250 MHz (Overclock)
adafruit_kb2040.menu.freq.250.build.f_cpu=250000000L
adafruit_kb2040.menu.freq.275=275 MHz (Overclock)
adafruit_kb2040.menu.freq.275.build.f_cpu=275000000L
adafruit_kb2040.menu.freq.300=300 MHz (Overclock)
adafruit_kb2040.menu.freq.300.build.f_cpu=300000000L
adafruit_kb2040.menu.opt.Small=Small (-Os) (standard)
adafruit_kb2040.menu.opt.Small.build.flags.optimize=-Os
adafruit_kb2040.menu.opt.Optimize=Optimize (-O)
adafruit_kb2040.menu.opt.Optimize.build.flags.optimize=-O
adafruit_kb2040.menu.opt.Optimize2=Optimize More (-O2)
adafruit_kb2040.menu.opt.Optimize2.build.flags.optimize=-O2
adafruit_kb2040.menu.opt.Optimize3=Optimize Even More (-O3)
adafruit_kb2040.menu.opt.Optimize3.build.flags.optimize=-O3
adafruit_kb2040.menu.opt.Fast=Fast (-Ofast) (maybe slower)
adafruit_kb2040.menu.opt.Fast.build.flags.optimize=-Ofast
adafruit_kb2040.menu.opt.Debug=Debug (-Og)
adafruit_kb2040.menu.opt.Debug.build.flags.optimize=-Og
adafruit_kb2040.menu.rtti.Disabled=Disabled
adafruit_kb2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti
adafruit_kb2040.menu.rtti.Enabled=Enabled
adafruit_kb2040.menu.rtti.Enabled.build.flags.rtti=
adafruit_kb2040.menu.dbgport.Disabled=Disabled
adafruit_kb2040.menu.dbgport.Disabled.build.debug_port=
adafruit_kb2040.menu.dbgport.Serial=Serial
adafruit_kb2040.menu.dbgport.Serial.build.debug_port=-DDEBUG_RP2040_PORT=Serial
adafruit_kb2040.menu.dbgport.Serial1=Serial1
adafruit_kb2040.menu.dbgport.Serial1.build.debug_port=-DDEBUG_RP2040_PORT=Serial1
adafruit_kb2040.menu.dbgport.Serial2=Serial2
adafruit_kb2040.menu.dbgport.Serial2.build.debug_port=-DDEBUG_RP2040_PORT=Serial2
adafruit_kb2040.menu.dbglvl.None=None
adafruit_kb2040.menu.dbglvl.None.build.debug_level=
adafruit_kb2040.menu.dbglvl.Core=Core
adafruit_kb2040.menu.dbglvl.Core.build.debug_level=-DDEBUG_RP2040_CORE
adafruit_kb2040.menu.dbglvl.SPI=SPI
adafruit_kb2040.menu.dbglvl.SPI.build.debug_level=-DDEBUG_RP2040_SPI
adafruit_kb2040.menu.dbglvl.Wire=Wire
adafruit_kb2040.menu.dbglvl.Wire.build.debug_level=-DDEBUG_RP2040_WIRE
adafruit_kb2040.menu.dbglvl.All=All
adafruit_kb2040.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE
adafruit_kb2040.menu.dbglvl.NDEBUG=NDEBUG
adafruit_kb2040.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_kb2040.menu.usbstack.picosdk=Pico SDK
adafruit_kb2040.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_kb2040.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_kb2040.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit KB2040 (Picoprobe)
# -----------------------------------
adafruit_kb2040picoprobe.name=Adafruit KB2040 (Picoprobe)
adafruit_kb2040picoprobe.vid.0=0x239a
adafruit_kb2040picoprobe.pid.0=0x0004
adafruit_kb2040picoprobe.build.usbpid=-DSERIALUSB_PID=0x8105
adafruit_kb2040picoprobe.build.usbpwr=-DUSBD_MAX_POWER_MA=250
adafruit_kb2040picoprobe.build.board=ADAFRUIT_KB2040_RP2040
adafruit_kb2040picoprobe.build.mcu=cortex-m0plus
adafruit_kb2040picoprobe.build.variant=adafruit_kb2040
adafruit_kb2040picoprobe.upload.tool=picoprobe
adafruit_kb2040picoprobe.upload.maximum_size=8388608
adafruit_kb2040picoprobe.upload.maximum_data_size=262144
adafruit_kb2040picoprobe.upload.wait_for_upload_port=true
adafruit_kb2040picoprobe.upload.erase_cmd=
adafruit_kb2040picoprobe.serial.disableDTR=false
adafruit_kb2040picoprobe.serial.disableRTS=false
adafruit_kb2040picoprobe.build.f_cpu=125000000
adafruit_kb2040picoprobe.build.led=
adafruit_kb2040picoprobe.build.core=rp2040
adafruit_kb2040picoprobe.build.ldscript=memmap_default.ld
adafruit_kb2040picoprobe.build.ram_length=256k
adafruit_kb2040picoprobe.build.boot2=boot2_w25q080_2_padded_checksum
adafruit_kb2040picoprobe.build.vid=0x239a
adafruit_kb2040picoprobe.build.pid=0x8105
adafruit_kb2040picoprobe.build.usb_manufacturer="Adafruit"
adafruit_kb2040picoprobe.build.usb_product="KB2040 (Picoprobe)"
adafruit_kb2040picoprobe.menu.flash.8388608_0=8MB (no FS)
adafruit_kb2040picoprobe.menu.flash.8388608_0.upload.maximum_size=8384512
adafruit_kb2040picoprobe.menu.flash.8388608_0.build.flash_length=8384512
adafruit_kb2040picoprobe.menu.flash.8388608_0.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_0.build.fs_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_0.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_65536=8MB (Sketch: 8128KB, FS: 64KB)
adafruit_kb2040picoprobe.menu.flash.8388608_65536.upload.maximum_size=8318976
adafruit_kb2040picoprobe.menu.flash.8388608_65536.build.flash_length=8318976
adafruit_kb2040picoprobe.menu.flash.8388608_65536.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_65536.build.fs_start=276754432
adafruit_kb2040picoprobe.menu.flash.8388608_65536.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_131072=8MB (Sketch: 8064KB, FS: 128KB)
adafruit_kb2040picoprobe.menu.flash.8388608_131072.upload.maximum_size=8253440
adafruit_kb2040picoprobe.menu.flash.8388608_131072.build.flash_length=8253440
adafruit_kb2040picoprobe.menu.flash.8388608_131072.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_131072.build.fs_start=276688896
adafruit_kb2040picoprobe.menu.flash.8388608_131072.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_262144=8MB (Sketch: 7936KB, FS: 256KB)
adafruit_kb2040picoprobe.menu.flash.8388608_262144.upload.maximum_size=8122368
adafruit_kb2040picoprobe.menu.flash.8388608_262144.build.flash_length=8122368
adafruit_kb2040picoprobe.menu.flash.8388608_262144.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_262144.build.fs_start=276557824
adafruit_kb2040picoprobe.menu.flash.8388608_262144.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_524288=8MB (Sketch: 7680KB, FS: 512KB)
adafruit_kb2040picoprobe.menu.flash.8388608_524288.upload.maximum_size=7860224
adafruit_kb2040picoprobe.menu.flash.8388608_524288.build.flash_length=7860224
adafruit_kb2040picoprobe.menu.flash.8388608_524288.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_524288.build.fs_start=276295680
adafruit_kb2040picoprobe.menu.flash.8388608_524288.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_1048576=8MB (Sketch: 7MB, FS: 1MB)
adafruit_kb2040picoprobe.menu.flash.8388608_1048576.upload.maximum_size=7335936
adafruit_kb2040picoprobe.menu.flash.8388608_1048576.build.flash_length=7335936
adafruit_kb2040picoprobe.menu.flash.8388608_1048576.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_1048576.build.fs_start=275771392
adafruit_kb2040picoprobe.menu.flash.8388608_1048576.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_2097152=8MB (Sketch: 6MB, FS: 2MB)
adafruit_kb2040picoprobe.menu.flash.8388608_2097152.upload.maximum_size=6287360
adafruit_kb2040picoprobe.menu.flash.8388608_2097152.build.flash_length=6287360
adafruit_kb2040picoprobe.menu.flash.8388608_2097152.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_2097152.build.fs_start=274722816
adafruit_kb2040picoprobe.menu.flash.8388608_2097152.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_3145728=8MB (Sketch: 5MB, FS: 3MB)
adafruit_kb2040picoprobe.menu.flash.8388608_3145728.upload.maximum_size=5238784
adafruit_kb2040picoprobe.menu.flash.8388608_3145728.build.flash_length=5238784
adafruit_kb2040picoprobe.menu.flash.8388608_3145728.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_3145728.build.fs_start=273674240
adafruit_kb2040picoprobe.menu.flash.8388608_3145728.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_4194304=8MB (Sketch: 4MB, FS: 4MB)
adafruit_kb2040picoprobe.menu.flash.8388608_4194304.upload.maximum_size=4190208
adafruit_kb2040picoprobe.menu.flash.8388608_4194304.build.flash_length=4190208
adafruit_kb2040picoprobe.menu.flash.8388608_4194304.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_4194304.build.fs_start=272625664
adafruit_kb2040picoprobe.menu.flash.8388608_4194304.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_5242880=8MB (Sketch: 3MB, FS: 5MB)
adafruit_kb2040picoprobe.menu.flash.8388608_5242880.upload.maximum_size=3141632
adafruit_kb2040picoprobe.menu.flash.8388608_5242880.build.flash_length=3141632
adafruit_kb2040picoprobe.menu.flash.8388608_5242880.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_5242880.build.fs_start=271577088
adafruit_kb2040picoprobe.menu.flash.8388608_5242880.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_6291456=8MB (Sketch: 2MB, FS: 6MB)
adafruit_kb2040picoprobe.menu.flash.8388608_6291456.upload.maximum_size=2093056
adafruit_kb2040picoprobe.menu.flash.8388608_6291456.build.flash_length=2093056
adafruit_kb2040picoprobe.menu.flash.8388608_6291456.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_6291456.build.fs_start=270528512
adafruit_kb2040picoprobe.menu.flash.8388608_6291456.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_7340032=8MB (Sketch: 1MB, FS: 7MB)
adafruit_kb2040picoprobe.menu.flash.8388608_7340032.upload.maximum_size=1044480
adafruit_kb2040picoprobe.menu.flash.8388608_7340032.build.flash_length=1044480
adafruit_kb2040picoprobe.menu.flash.8388608_7340032.build.eeprom_start=276819968
adafruit_kb2040picoprobe.menu.flash.8388608_7340032.build.fs_start=269479936
adafruit_kb2040picoprobe.menu.flash.8388608_7340032.build.fs_end=276819968
adafruit_kb2040picoprobe.menu.freq.125=125 MHz
adafruit_kb2040picoprobe.menu.freq.125.build.f_cpu=125000000L
adafruit_kb2040picoprobe.menu.freq.50=50 MHz
adafruit_kb2040picoprobe.menu.freq.50.build.f_cpu=50000000L
adafruit_kb2040picoprobe.menu.freq.100=100 MHz
adafruit_kb2040picoprobe.menu.freq.100.build.f_cpu=100000000L
adafruit_kb2040picoprobe.menu.freq.133=133 MHz
adafruit_kb2040picoprobe.menu.freq.133.build.f_cpu=133000000L
adafruit_kb2040picoprobe.menu.freq.150=150 MHz (Overclock)
adafruit_kb2040picoprobe.menu.freq.150.build.f_cpu=150000000L
adafruit_kb2040picoprobe.menu.freq.175=175 MHz (Overclock)
adafruit_kb2040picoprobe.menu.freq.175.build.f_cpu=175000000L
adafruit_kb2040picoprobe.menu.freq.200=200 MHz (Overclock)
adafruit_kb2040picoprobe.menu.freq.200.build.f_cpu=200000000L
adafruit_kb2040picoprobe.menu.freq.225=225 MHz (Overclock)
adafruit_kb2040picoprobe.menu.freq.225.build.f_cpu=225000000L
adafruit_kb2040picoprobe.menu.freq.250=250 MHz (Overclock)
adafruit_kb2040picoprobe.menu.freq.250.build.f_cpu=250000000L
adafruit_kb2040picoprobe.menu.freq.275=275 MHz (Overclock)
adafruit_kb2040picoprobe.menu.freq.275.build.f_cpu=275000000L
adafruit_kb2040picoprobe.menu.freq.300=300 MHz (Overclock)
adafruit_kb2040picoprobe.menu.freq.300.build.f_cpu=300000000L
adafruit_kb2040picoprobe.menu.opt.Small=Small (-Os) (standard)
adafruit_kb2040picoprobe.menu.opt.Small.build.flags.optimize=-Os
adafruit_kb2040picoprobe.menu.opt.Optimize=Optimize (-O)
adafruit_kb2040picoprobe.menu.opt.Optimize.build.flags.optimize=-O
adafruit_kb2040picoprobe.menu.opt.Optimize2=Optimize More (-O2)
adafruit_kb2040picoprobe.menu.opt.Optimize2.build.flags.optimize=-O2
adafruit_kb2040picoprobe.menu.opt.Optimize3=Optimize Even More (-O3)
adafruit_kb2040picoprobe.menu.opt.Optimize3.build.flags.optimize=-O3
adafruit_kb2040picoprobe.menu.opt.Fast=Fast (-Ofast) (maybe slower)
adafruit_kb2040picoprobe.menu.opt.Fast.build.flags.optimize=-Ofast
adafruit_kb2040picoprobe.menu.opt.Debug=Debug (-Og)
adafruit_kb2040picoprobe.menu.opt.Debug.build.flags.optimize=-Og
adafruit_kb2040picoprobe.menu.rtti.Disabled=Disabled
adafruit_kb2040picoprobe.menu.rtti.Disabled.build.flags.rtti=-fno-rtti
adafruit_kb2040picoprobe.menu.rtti.Enabled=Enabled
adafruit_kb2040picoprobe.menu.rtti.Enabled.build.flags.rtti=
adafruit_kb2040picoprobe.menu.dbgport.Disabled=Disabled
adafruit_kb2040picoprobe.menu.dbgport.Disabled.build.debug_port=
adafruit_kb2040picoprobe.menu.dbgport.Serial=Serial
adafruit_kb2040picoprobe.menu.dbgport.Serial.build.debug_port=-DDEBUG_RP2040_PORT=Serial
adafruit_kb2040picoprobe.menu.dbgport.Serial1=Serial1
adafruit_kb2040picoprobe.menu.dbgport.Serial1.build.debug_port=-DDEBUG_RP2040_PORT=Serial1
adafruit_kb2040picoprobe.menu.dbgport.Serial2=Serial2
adafruit_kb2040picoprobe.menu.dbgport.Serial2.build.debug_port=-DDEBUG_RP2040_PORT=Serial2
adafruit_kb2040picoprobe.menu.dbglvl.None=None
adafruit_kb2040picoprobe.menu.dbglvl.None.build.debug_level=
adafruit_kb2040picoprobe.menu.dbglvl.Core=Core
adafruit_kb2040picoprobe.menu.dbglvl.Core.build.debug_level=-DDEBUG_RP2040_CORE
adafruit_kb2040picoprobe.menu.dbglvl.SPI=SPI
adafruit_kb2040picoprobe.menu.dbglvl.SPI.build.debug_level=-DDEBUG_RP2040_SPI
adafruit_kb2040picoprobe.menu.dbglvl.Wire=Wire
adafruit_kb2040picoprobe.menu.dbglvl.Wire.build.debug_level=-DDEBUG_RP2040_WIRE
adafruit_kb2040picoprobe.menu.dbglvl.All=All
adafruit_kb2040picoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE
adafruit_kb2040picoprobe.menu.dbglvl.NDEBUG=NDEBUG
adafruit_kb2040picoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_kb2040picoprobe.menu.usbstack.picosdk=Pico SDK
adafruit_kb2040picoprobe.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_kb2040picoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_kb2040picoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit KB2040 (pico-debug)
# -----------------------------------
adafruit_kb2040picodebug.name=Adafruit KB2040 (pico-debug)
adafruit_kb2040picodebug.vid.0=0x1209
adafruit_kb2040picodebug.pid.0=0x2488
adafruit_kb2040picodebug.build.usbpid=-DSERIALUSB_PID=0x8105
adafruit_kb2040picodebug.build.usbpwr=-DUSBD_MAX_POWER_MA=250
adafruit_kb2040picodebug.build.board=ADAFRUIT_KB2040_RP2040
adafruit_kb2040picodebug.build.mcu=cortex-m0plus
adafruit_kb2040picodebug.build.variant=adafruit_kb2040
adafruit_kb2040picodebug.upload.tool=picodebug
adafruit_kb2040picodebug.upload.maximum_size=8388608
adafruit_kb2040picodebug.upload.maximum_data_size=245760
adafruit_kb2040picodebug.upload.wait_for_upload_port=true
adafruit_kb2040picodebug.upload.erase_cmd=
adafruit_kb2040picodebug.serial.disableDTR=false
adafruit_kb2040picodebug.serial.disableRTS=false
adafruit_kb2040picodebug.build.f_cpu=125000000
adafruit_kb2040picodebug.build.led=
adafruit_kb2040picodebug.build.core=rp2040
adafruit_kb2040picodebug.build.ldscript=memmap_default.ld
adafruit_kb2040picodebug.build.ram_length=240k
adafruit_kb2040picodebug.build.boot2=boot2_w25q080_2_padded_checksum
adafruit_kb2040picodebug.build.vid=0x239a
adafruit_kb2040picodebug.build.pid=0x8105
adafruit_kb2040picodebug.build.usb_manufacturer="Adafruit"
adafruit_kb2040picodebug.build.usb_product="KB2040 (pico-debug)"
adafruit_kb2040picodebug.menu.flash.8388608_0=8MB (no FS)
adafruit_kb2040picodebug.menu.flash.8388608_0.upload.maximum_size=8384512
adafruit_kb2040picodebug.menu.flash.8388608_0.build.flash_length=8384512
adafruit_kb2040picodebug.menu.flash.8388608_0.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_0.build.fs_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_0.build.fs_end=276819968
adafruit_kb2040picodebug.menu.flash.8388608_65536=8MB (Sketch: 8128KB, FS: 64KB)
adafruit_kb2040picodebug.menu.flash.8388608_65536.upload.maximum_size=8318976
adafruit_kb2040picodebug.menu.flash.8388608_65536.build.flash_length=8318976
adafruit_kb2040picodebug.menu.flash.8388608_65536.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_65536.build.fs_start=276754432
adafruit_kb2040picodebug.menu.flash.8388608_65536.build.fs_end=276819968
adafruit_kb2040picodebug.menu.flash.8388608_131072=8MB (Sketch: 8064KB, FS: 128KB)
adafruit_kb2040picodebug.menu.flash.8388608_131072.upload.maximum_size=8253440
adafruit_kb2040picodebug.menu.flash.8388608_131072.build.flash_length=8253440
adafruit_kb2040picodebug.menu.flash.8388608_131072.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_131072.build.fs_start=276688896
adafruit_kb2040picodebug.menu.flash.8388608_131072.build.fs_end=276819968
adafruit_kb2040picodebug.menu.flash.8388608_262144=8MB (Sketch: 7936KB, FS: 256KB)
adafruit_kb2040picodebug.menu.flash.8388608_262144.upload.maximum_size=8122368
adafruit_kb2040picodebug.menu.flash.8388608_262144.build.flash_length=8122368
adafruit_kb2040picodebug.menu.flash.8388608_262144.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_262144.build.fs_start=276557824
adafruit_kb2040picodebug.menu.flash.8388608_262144.build.fs_end=276819968
adafruit_kb2040picodebug.menu.flash.8388608_524288=8MB (Sketch: 7680KB, FS: 512KB)
adafruit_kb2040picodebug.menu.flash.8388608_524288.upload.maximum_size=7860224
adafruit_kb2040picodebug.menu.flash.8388608_524288.build.flash_length=7860224
adafruit_kb2040picodebug.menu.flash.8388608_524288.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_524288.build.fs_start=276295680
adafruit_kb2040picodebug.menu.flash.8388608_524288.build.fs_end=276819968
adafruit_kb2040picodebug.menu.flash.8388608_1048576=8MB (Sketch: 7MB, FS: 1MB)
adafruit_kb2040picodebug.menu.flash.8388608_1048576.upload.maximum_size=7335936
adafruit_kb2040picodebug.menu.flash.8388608_1048576.build.flash_length=7335936
adafruit_kb2040picodebug.menu.flash.8388608_1048576.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_1048576.build.fs_start=275771392
adafruit_kb2040picodebug.menu.flash.8388608_1048576.build.fs_end=276819968
adafruit_kb2040picodebug.menu.flash.8388608_2097152=8MB (Sketch: 6MB, FS: 2MB)
adafruit_kb2040picodebug.menu.flash.8388608_2097152.upload.maximum_size=6287360
adafruit_kb2040picodebug.menu.flash.8388608_2097152.build.flash_length=6287360
adafruit_kb2040picodebug.menu.flash.8388608_2097152.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_2097152.build.fs_start=274722816
adafruit_kb2040picodebug.menu.flash.8388608_2097152.build.fs_end=276819968
adafruit_kb2040picodebug.menu.flash.8388608_3145728=8MB (Sketch: 5MB, FS: 3MB)
adafruit_kb2040picodebug.menu.flash.8388608_3145728.upload.maximum_size=5238784
adafruit_kb2040picodebug.menu.flash.8388608_3145728.build.flash_length=5238784
adafruit_kb2040picodebug.menu.flash.8388608_3145728.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_3145728.build.fs_start=273674240
adafruit_kb2040picodebug.menu.flash.8388608_3145728.build.fs_end=276819968
adafruit_kb2040picodebug.menu.flash.8388608_4194304=8MB (Sketch: 4MB, FS: 4MB)
adafruit_kb2040picodebug.menu.flash.8388608_4194304.upload.maximum_size=4190208
adafruit_kb2040picodebug.menu.flash.8388608_4194304.build.flash_length=4190208
adafruit_kb2040picodebug.menu.flash.8388608_4194304.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_4194304.build.fs_start=272625664
adafruit_kb2040picodebug.menu.flash.8388608_4194304.build.fs_end=276819968
adafruit_kb2040picodebug.menu.flash.8388608_5242880=8MB (Sketch: 3MB, FS: 5MB)
adafruit_kb2040picodebug.menu.flash.8388608_5242880.upload.maximum_size=3141632
adafruit_kb2040picodebug.menu.flash.8388608_5242880.build.flash_length=3141632
adafruit_kb2040picodebug.menu.flash.8388608_5242880.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_5242880.build.fs_start=271577088
adafruit_kb2040picodebug.menu.flash.8388608_5242880.build.fs_end=276819968
adafruit_kb2040picodebug.menu.flash.8388608_6291456=8MB (Sketch: 2MB, FS: 6MB)
adafruit_kb2040picodebug.menu.flash.8388608_6291456.upload.maximum_size=2093056
adafruit_kb2040picodebug.menu.flash.8388608_6291456.build.flash_length=2093056
adafruit_kb2040picodebug.menu.flash.8388608_6291456.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_6291456.build.fs_start=270528512
adafruit_kb2040picodebug.menu.flash.8388608_6291456.build.fs_end=276819968
adafruit_kb2040picodebug.menu.flash.8388608_7340032=8MB (Sketch: 1MB, FS: 7MB)
adafruit_kb2040picodebug.menu.flash.8388608_7340032.upload.maximum_size=1044480
adafruit_kb2040picodebug.menu.flash.8388608_7340032.build.flash_length=1044480
adafruit_kb2040picodebug.menu.flash.8388608_7340032.build.eeprom_start=276819968
adafruit_kb2040picodebug.menu.flash.8388608_7340032.build.fs_start=269479936
adafruit_kb2040picodebug.menu.flash.8388608_7340032.build.fs_end=276819968
adafruit_kb2040picodebug.menu.freq.125=125 MHz
adafruit_kb2040picodebug.menu.freq.125.build.f_cpu=125000000L
adafruit_kb2040picodebug.menu.freq.50=50 MHz
adafruit_kb2040picodebug.menu.freq.50.build.f_cpu=50000000L
adafruit_kb2040picodebug.menu.freq.100=100 MHz
adafruit_kb2040picodebug.menu.freq.100.build.f_cpu=100000000L
adafruit_kb2040picodebug.menu.freq.133=133 MHz
adafruit_kb2040picodebug.menu.freq.133.build.f_cpu=133000000L
adafruit_kb2040picodebug.menu.freq.150=150 MHz (Overclock)
adafruit_kb2040picodebug.menu.freq.150.build.f_cpu=150000000L
adafruit_kb2040picodebug.menu.freq.175=175 MHz (Overclock)
adafruit_kb2040picodebug.menu.freq.175.build.f_cpu=175000000L
adafruit_kb2040picodebug.menu.freq.200=200 MHz (Overclock)
adafruit_kb2040picodebug.menu.freq.200.build.f_cpu=200000000L
adafruit_kb2040picodebug.menu.freq.225=225 MHz (Overclock)
adafruit_kb2040picodebug.menu.freq.225.build.f_cpu=225000000L
adafruit_kb2040picodebug.menu.freq.250=250 MHz (Overclock)
adafruit_kb2040picodebug.menu.freq.250.build.f_cpu=250000000L
adafruit_kb2040picodebug.menu.freq.275=275 MHz (Overclock)
adafruit_kb2040picodebug.menu.freq.275.build.f_cpu=275000000L
adafruit_kb2040picodebug.menu.freq.300=300 MHz (Overclock)
adafruit_kb2040picodebug.menu.freq.300.build.f_cpu=300000000L
adafruit_kb2040picodebug.menu.opt.Small=Small (-Os) (standard)
adafruit_kb2040picodebug.menu.opt.Small.build.flags.optimize=-Os
adafruit_kb2040picodebug.menu.opt.Optimize=Optimize (-O)
adafruit_kb2040picodebug.menu.opt.Optimize.build.flags.optimize=-O
adafruit_kb2040picodebug.menu.opt.Optimize2=Optimize More (-O2)
adafruit_kb2040picodebug.menu.opt.Optimize2.build.flags.optimize=-O2
adafruit_kb2040picodebug.menu.opt.Optimize3=Optimize Even More (-O3)
adafruit_kb2040picodebug.menu.opt.Optimize3.build.flags.optimize=-O3
adafruit_kb2040picodebug.menu.opt.Fast=Fast (-Ofast) (maybe slower)
adafruit_kb2040picodebug.menu.opt.Fast.build.flags.optimize=-Ofast
adafruit_kb2040picodebug.menu.opt.Debug=Debug (-Og)
adafruit_kb2040picodebug.menu.opt.Debug.build.flags.optimize=-Og
adafruit_kb2040picodebug.menu.rtti.Disabled=Disabled
adafruit_kb2040picodebug.menu.rtti.Disabled.build.flags.rtti=-fno-rtti
adafruit_kb2040picodebug.menu.rtti.Enabled=Enabled
adafruit_kb2040picodebug.menu.rtti.Enabled.build.flags.rtti=
adafruit_kb2040picodebug.menu.dbgport.Disabled=Disabled
adafruit_kb2040picodebug.menu.dbgport.Disabled.build.debug_port=
adafruit_kb2040picodebug.menu.dbgport.Serial=Serial
adafruit_kb2040picodebug.menu.dbgport.Serial.build.debug_port=-DDEBUG_RP2040_PORT=Serial
adafruit_kb2040picodebug.menu.dbgport.Serial1=Serial1
adafruit_kb2040picodebug.menu.dbgport.Serial1.build.debug_port=-DDEBUG_RP2040_PORT=Serial1
adafruit_kb2040picodebug.menu.dbgport.Serial2=Serial2
adafruit_kb2040picodebug.menu.dbgport.Serial2.build.debug_port=-DDEBUG_RP2040_PORT=Serial2
adafruit_kb2040picodebug.menu.dbglvl.None=None
adafruit_kb2040picodebug.menu.dbglvl.None.build.debug_level=
adafruit_kb2040picodebug.menu.dbglvl.Core=Core
adafruit_kb2040picodebug.menu.dbglvl.Core.build.debug_level=-DDEBUG_RP2040_CORE
adafruit_kb2040picodebug.menu.dbglvl.SPI=SPI
adafruit_kb2040picodebug.menu.dbglvl.SPI.build.debug_level=-DDEBUG_RP2040_SPI
adafruit_kb2040picodebug.menu.dbglvl.Wire=Wire
adafruit_kb2040picodebug.menu.dbglvl.Wire.build.debug_level=-DDEBUG_RP2040_WIRE
adafruit_kb2040picodebug.menu.dbglvl.All=All
adafruit_kb2040picodebug.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE
adafruit_kb2040picodebug.menu.dbglvl.NDEBUG=NDEBUG
adafruit_kb2040picodebug.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_kb2040picodebug.menu.usbstack.nousb=No USB
adafruit_kb2040picodebug.menu.usbstack.nousb.build.usbstack_flags="-DNO_USB -DDISABLE_USB_SERIAL -I{runtime.platform.path}/tools/libpico"
# -----------------------------------
# Arduino Nano RP2040 Connect
# -----------------------------------
@@ -3351,7 +3821,6 @@ arduino_nano_connect.serial.disableRTS=false
arduino_nano_connect.build.f_cpu=125000000
arduino_nano_connect.build.led=
arduino_nano_connect.build.core=rp2040
arduino_nano_connect.build.mcu=rp2040
arduino_nano_connect.build.ldscript=memmap_default.ld
arduino_nano_connect.build.ram_length=256k
arduino_nano_connect.build.boot2=boot2_w25q080_2_padded_checksum
@@ -3563,7 +4032,6 @@ arduino_nano_connectpicoprobe.serial.disableRTS=false
arduino_nano_connectpicoprobe.build.f_cpu=125000000
arduino_nano_connectpicoprobe.build.led=
arduino_nano_connectpicoprobe.build.core=rp2040
arduino_nano_connectpicoprobe.build.mcu=rp2040
arduino_nano_connectpicoprobe.build.ldscript=memmap_default.ld
arduino_nano_connectpicoprobe.build.ram_length=256k
arduino_nano_connectpicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -3775,7 +4243,6 @@ arduino_nano_connectpicodebug.serial.disableRTS=false
arduino_nano_connectpicodebug.build.f_cpu=125000000
arduino_nano_connectpicodebug.build.led=
arduino_nano_connectpicodebug.build.core=rp2040
arduino_nano_connectpicodebug.build.mcu=rp2040
arduino_nano_connectpicodebug.build.ldscript=memmap_default.ld
arduino_nano_connectpicodebug.build.ram_length=240k
arduino_nano_connectpicodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -3985,7 +4452,6 @@ cytron_maker_nano_rp2040.serial.disableRTS=false
cytron_maker_nano_rp2040.build.f_cpu=125000000
cytron_maker_nano_rp2040.build.led=
cytron_maker_nano_rp2040.build.core=rp2040
cytron_maker_nano_rp2040.build.mcu=rp2040
cytron_maker_nano_rp2040.build.ldscript=memmap_default.ld
cytron_maker_nano_rp2040.build.ram_length=256k
cytron_maker_nano_rp2040.build.boot2=boot2_w25q080_2_padded_checksum
@@ -4113,7 +4579,6 @@ cytron_maker_nano_rp2040picoprobe.serial.disableRTS=false
cytron_maker_nano_rp2040picoprobe.build.f_cpu=125000000
cytron_maker_nano_rp2040picoprobe.build.led=
cytron_maker_nano_rp2040picoprobe.build.core=rp2040
cytron_maker_nano_rp2040picoprobe.build.mcu=rp2040
cytron_maker_nano_rp2040picoprobe.build.ldscript=memmap_default.ld
cytron_maker_nano_rp2040picoprobe.build.ram_length=256k
cytron_maker_nano_rp2040picoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -4241,7 +4706,6 @@ cytron_maker_nano_rp2040picodebug.serial.disableRTS=false
cytron_maker_nano_rp2040picodebug.build.f_cpu=125000000
cytron_maker_nano_rp2040picodebug.build.led=
cytron_maker_nano_rp2040picodebug.build.core=rp2040
cytron_maker_nano_rp2040picodebug.build.mcu=rp2040
cytron_maker_nano_rp2040picodebug.build.ldscript=memmap_default.ld
cytron_maker_nano_rp2040picodebug.build.ram_length=240k
cytron_maker_nano_rp2040picodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -4367,7 +4831,6 @@ cytron_maker_pi_rp2040.serial.disableRTS=false
cytron_maker_pi_rp2040.build.f_cpu=125000000
cytron_maker_pi_rp2040.build.led=
cytron_maker_pi_rp2040.build.core=rp2040
cytron_maker_pi_rp2040.build.mcu=rp2040
cytron_maker_pi_rp2040.build.ldscript=memmap_default.ld
cytron_maker_pi_rp2040.build.ram_length=256k
cytron_maker_pi_rp2040.build.boot2=boot2_w25q080_2_padded_checksum
@@ -4495,7 +4958,6 @@ cytron_maker_pi_rp2040picoprobe.serial.disableRTS=false
cytron_maker_pi_rp2040picoprobe.build.f_cpu=125000000
cytron_maker_pi_rp2040picoprobe.build.led=
cytron_maker_pi_rp2040picoprobe.build.core=rp2040
cytron_maker_pi_rp2040picoprobe.build.mcu=rp2040
cytron_maker_pi_rp2040picoprobe.build.ldscript=memmap_default.ld
cytron_maker_pi_rp2040picoprobe.build.ram_length=256k
cytron_maker_pi_rp2040picoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -4623,7 +5085,6 @@ cytron_maker_pi_rp2040picodebug.serial.disableRTS=false
cytron_maker_pi_rp2040picodebug.build.f_cpu=125000000
cytron_maker_pi_rp2040picodebug.build.led=
cytron_maker_pi_rp2040picodebug.build.core=rp2040
cytron_maker_pi_rp2040picodebug.build.mcu=rp2040
cytron_maker_pi_rp2040picodebug.build.ldscript=memmap_default.ld
cytron_maker_pi_rp2040picodebug.build.ram_length=240k
cytron_maker_pi_rp2040picodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -4749,7 +5210,6 @@ sparkfun_promicrorp2040.serial.disableRTS=false
sparkfun_promicrorp2040.build.f_cpu=125000000
sparkfun_promicrorp2040.build.led=
sparkfun_promicrorp2040.build.core=rp2040
sparkfun_promicrorp2040.build.mcu=rp2040
sparkfun_promicrorp2040.build.ldscript=memmap_default.ld
sparkfun_promicrorp2040.build.ram_length=256k
sparkfun_promicrorp2040.build.boot2=boot2_generic_03h_4_padded_checksum
@@ -4961,7 +5421,6 @@ sparkfun_promicrorp2040picoprobe.serial.disableRTS=false
sparkfun_promicrorp2040picoprobe.build.f_cpu=125000000
sparkfun_promicrorp2040picoprobe.build.led=
sparkfun_promicrorp2040picoprobe.build.core=rp2040
sparkfun_promicrorp2040picoprobe.build.mcu=rp2040
sparkfun_promicrorp2040picoprobe.build.ldscript=memmap_default.ld
sparkfun_promicrorp2040picoprobe.build.ram_length=256k
sparkfun_promicrorp2040picoprobe.build.boot2=boot2_generic_03h_4_padded_checksum
@@ -5173,7 +5632,6 @@ sparkfun_promicrorp2040picodebug.serial.disableRTS=false
sparkfun_promicrorp2040picodebug.build.f_cpu=125000000
sparkfun_promicrorp2040picodebug.build.led=
sparkfun_promicrorp2040picodebug.build.core=rp2040
sparkfun_promicrorp2040picodebug.build.mcu=rp2040
sparkfun_promicrorp2040picodebug.build.ldscript=memmap_default.ld
sparkfun_promicrorp2040picodebug.build.ram_length=240k
sparkfun_promicrorp2040picodebug.build.boot2=boot2_generic_03h_4_padded_checksum
@@ -5383,7 +5841,6 @@ generic.serial.disableRTS=false
generic.build.f_cpu=125000000
generic.build.led=
generic.build.core=rp2040
generic.build.mcu=rp2040
generic.build.ldscript=memmap_default.ld
generic.build.ram_length=256k
generic.build.boot2=boot2_generic_03h_4_padded_checksum
@@ -5539,7 +5996,6 @@ genericpicoprobe.serial.disableRTS=false
genericpicoprobe.build.f_cpu=125000000
genericpicoprobe.build.led=
genericpicoprobe.build.core=rp2040
genericpicoprobe.build.mcu=rp2040
genericpicoprobe.build.ldscript=memmap_default.ld
genericpicoprobe.build.ram_length=256k
genericpicoprobe.build.boot2=boot2_generic_03h_4_padded_checksum
@@ -5695,7 +6151,6 @@ genericpicodebug.serial.disableRTS=false
genericpicodebug.build.f_cpu=125000000
genericpicodebug.build.led=
genericpicodebug.build.core=rp2040
genericpicodebug.build.mcu=rp2040
genericpicodebug.build.ldscript=memmap_default.ld
genericpicodebug.build.ram_length=240k
genericpicodebug.build.boot2=boot2_generic_03h_4_padded_checksum
@@ -5849,7 +6304,6 @@ challenger_2040_wifi.serial.disableRTS=false
challenger_2040_wifi.build.f_cpu=125000000
challenger_2040_wifi.build.led=
challenger_2040_wifi.build.core=rp2040
challenger_2040_wifi.build.mcu=rp2040
challenger_2040_wifi.build.ldscript=memmap_default.ld
challenger_2040_wifi.build.ram_length=256k
challenger_2040_wifi.build.boot2=boot2_w25q080_2_padded_checksum
@@ -6013,7 +6467,6 @@ challenger_2040_wifipicoprobe.serial.disableRTS=false
challenger_2040_wifipicoprobe.build.f_cpu=125000000
challenger_2040_wifipicoprobe.build.led=
challenger_2040_wifipicoprobe.build.core=rp2040
challenger_2040_wifipicoprobe.build.mcu=rp2040
challenger_2040_wifipicoprobe.build.ldscript=memmap_default.ld
challenger_2040_wifipicoprobe.build.ram_length=256k
challenger_2040_wifipicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -6177,7 +6630,6 @@ challenger_2040_wifipicodebug.serial.disableRTS=false
challenger_2040_wifipicodebug.build.f_cpu=125000000
challenger_2040_wifipicodebug.build.led=
challenger_2040_wifipicodebug.build.core=rp2040
challenger_2040_wifipicodebug.build.mcu=rp2040
challenger_2040_wifipicodebug.build.ldscript=memmap_default.ld
challenger_2040_wifipicodebug.build.ram_length=240k
challenger_2040_wifipicodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -6339,7 +6791,6 @@ challenger_2040_lte.serial.disableRTS=false
challenger_2040_lte.build.f_cpu=125000000
challenger_2040_lte.build.led=
challenger_2040_lte.build.core=rp2040
challenger_2040_lte.build.mcu=rp2040
challenger_2040_lte.build.ldscript=memmap_default.ld
challenger_2040_lte.build.ram_length=256k
challenger_2040_lte.build.boot2=boot2_w25q080_2_padded_checksum
@@ -6503,7 +6954,6 @@ challenger_2040_ltepicoprobe.serial.disableRTS=false
challenger_2040_ltepicoprobe.build.f_cpu=125000000
challenger_2040_ltepicoprobe.build.led=
challenger_2040_ltepicoprobe.build.core=rp2040
challenger_2040_ltepicoprobe.build.mcu=rp2040
challenger_2040_ltepicoprobe.build.ldscript=memmap_default.ld
challenger_2040_ltepicoprobe.build.ram_length=256k
challenger_2040_ltepicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -6667,7 +7117,6 @@ challenger_2040_ltepicodebug.serial.disableRTS=false
challenger_2040_ltepicodebug.build.f_cpu=125000000
challenger_2040_ltepicodebug.build.led=
challenger_2040_ltepicodebug.build.core=rp2040
challenger_2040_ltepicodebug.build.mcu=rp2040
challenger_2040_ltepicodebug.build.ldscript=memmap_default.ld
challenger_2040_ltepicodebug.build.ram_length=240k
challenger_2040_ltepicodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -6829,7 +7278,6 @@ challenger_nb_2040_wifi.serial.disableRTS=false
challenger_nb_2040_wifi.build.f_cpu=125000000
challenger_nb_2040_wifi.build.led=
challenger_nb_2040_wifi.build.core=rp2040
challenger_nb_2040_wifi.build.mcu=rp2040
challenger_nb_2040_wifi.build.ldscript=memmap_default.ld
challenger_nb_2040_wifi.build.ram_length=256k
challenger_nb_2040_wifi.build.boot2=boot2_w25q080_2_padded_checksum
@@ -6993,7 +7441,6 @@ challenger_nb_2040_wifipicoprobe.serial.disableRTS=false
challenger_nb_2040_wifipicoprobe.build.f_cpu=125000000
challenger_nb_2040_wifipicoprobe.build.led=
challenger_nb_2040_wifipicoprobe.build.core=rp2040
challenger_nb_2040_wifipicoprobe.build.mcu=rp2040
challenger_nb_2040_wifipicoprobe.build.ldscript=memmap_default.ld
challenger_nb_2040_wifipicoprobe.build.ram_length=256k
challenger_nb_2040_wifipicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -7157,7 +7604,6 @@ challenger_nb_2040_wifipicodebug.serial.disableRTS=false
challenger_nb_2040_wifipicodebug.build.f_cpu=125000000
challenger_nb_2040_wifipicodebug.build.led=
challenger_nb_2040_wifipicodebug.build.core=rp2040
challenger_nb_2040_wifipicodebug.build.mcu=rp2040
challenger_nb_2040_wifipicodebug.build.ldscript=memmap_default.ld
challenger_nb_2040_wifipicodebug.build.ram_length=240k
challenger_nb_2040_wifipicodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -7319,7 +7765,6 @@ ilabs_rpico32.serial.disableRTS=false
ilabs_rpico32.build.f_cpu=125000000
ilabs_rpico32.build.led=
ilabs_rpico32.build.core=rp2040
ilabs_rpico32.build.mcu=rp2040
ilabs_rpico32.build.ldscript=memmap_default.ld
ilabs_rpico32.build.ram_length=256k
ilabs_rpico32.build.boot2=boot2_w25q080_2_padded_checksum
@@ -7483,7 +7928,6 @@ ilabs_rpico32picoprobe.serial.disableRTS=false
ilabs_rpico32picoprobe.build.f_cpu=125000000
ilabs_rpico32picoprobe.build.led=
ilabs_rpico32picoprobe.build.core=rp2040
ilabs_rpico32picoprobe.build.mcu=rp2040
ilabs_rpico32picoprobe.build.ldscript=memmap_default.ld
ilabs_rpico32picoprobe.build.ram_length=256k
ilabs_rpico32picoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -7647,7 +8091,6 @@ ilabs_rpico32picodebug.serial.disableRTS=false
ilabs_rpico32picodebug.build.f_cpu=125000000
ilabs_rpico32picodebug.build.led=
ilabs_rpico32picodebug.build.core=rp2040
ilabs_rpico32picodebug.build.mcu=rp2040
ilabs_rpico32picodebug.build.ldscript=memmap_default.ld
ilabs_rpico32picodebug.build.ram_length=240k
ilabs_rpico32picodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -7809,7 +8252,6 @@ melopero_shake_rp2040.serial.disableRTS=false
melopero_shake_rp2040.build.f_cpu=125000000
melopero_shake_rp2040.build.led=
melopero_shake_rp2040.build.core=rp2040
melopero_shake_rp2040.build.mcu=rp2040
melopero_shake_rp2040.build.ldscript=memmap_default.ld
melopero_shake_rp2040.build.ram_length=256k
melopero_shake_rp2040.build.boot2=boot2_w25q080_2_padded_checksum
@@ -8021,7 +8463,6 @@ melopero_shake_rp2040picoprobe.serial.disableRTS=false
melopero_shake_rp2040picoprobe.build.f_cpu=125000000
melopero_shake_rp2040picoprobe.build.led=
melopero_shake_rp2040picoprobe.build.core=rp2040
melopero_shake_rp2040picoprobe.build.mcu=rp2040
melopero_shake_rp2040picoprobe.build.ldscript=memmap_default.ld
melopero_shake_rp2040picoprobe.build.ram_length=256k
melopero_shake_rp2040picoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -8233,7 +8674,6 @@ melopero_shake_rp2040picodebug.serial.disableRTS=false
melopero_shake_rp2040picodebug.build.f_cpu=125000000
melopero_shake_rp2040picodebug.build.led=
melopero_shake_rp2040picodebug.build.core=rp2040
melopero_shake_rp2040picodebug.build.mcu=rp2040
melopero_shake_rp2040picodebug.build.ldscript=memmap_default.ld
melopero_shake_rp2040picodebug.build.ram_length=240k
melopero_shake_rp2040picodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -8443,7 +8883,6 @@ upesy_rp2040_devkit.serial.disableRTS=false
upesy_rp2040_devkit.build.f_cpu=125000000
upesy_rp2040_devkit.build.led=
upesy_rp2040_devkit.build.core=rp2040
upesy_rp2040_devkit.build.mcu=rp2040
upesy_rp2040_devkit.build.ldscript=memmap_default.ld
upesy_rp2040_devkit.build.ram_length=256k
upesy_rp2040_devkit.build.boot2=boot2_w25q080_2_padded_checksum
@@ -8571,7 +9010,6 @@ upesy_rp2040_devkitpicoprobe.serial.disableRTS=false
upesy_rp2040_devkitpicoprobe.build.f_cpu=125000000
upesy_rp2040_devkitpicoprobe.build.led=
upesy_rp2040_devkitpicoprobe.build.core=rp2040
upesy_rp2040_devkitpicoprobe.build.mcu=rp2040
upesy_rp2040_devkitpicoprobe.build.ldscript=memmap_default.ld
upesy_rp2040_devkitpicoprobe.build.ram_length=256k
upesy_rp2040_devkitpicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -8699,7 +9137,6 @@ upesy_rp2040_devkitpicodebug.serial.disableRTS=false
upesy_rp2040_devkitpicodebug.build.f_cpu=125000000
upesy_rp2040_devkitpicodebug.build.led=
upesy_rp2040_devkitpicodebug.build.core=rp2040
upesy_rp2040_devkitpicodebug.build.mcu=rp2040
upesy_rp2040_devkitpicodebug.build.ldscript=memmap_default.ld
upesy_rp2040_devkitpicodebug.build.ram_length=240k
upesy_rp2040_devkitpicodebug.build.boot2=boot2_w25q080_2_padded_checksum
@@ -8825,7 +9262,6 @@ wiznet_5100s_evb_pico.serial.disableRTS=false
wiznet_5100s_evb_pico.build.f_cpu=125000000
wiznet_5100s_evb_pico.build.led=
wiznet_5100s_evb_pico.build.core=rp2040
wiznet_5100s_evb_pico.build.mcu=rp2040
wiznet_5100s_evb_pico.build.ldscript=memmap_default.ld
wiznet_5100s_evb_pico.build.ram_length=256k
wiznet_5100s_evb_pico.build.boot2=boot2_w25q080_2_padded_checksum
@@ -8953,7 +9389,6 @@ wiznet_5100s_evb_picopicoprobe.serial.disableRTS=false
wiznet_5100s_evb_picopicoprobe.build.f_cpu=125000000
wiznet_5100s_evb_picopicoprobe.build.led=
wiznet_5100s_evb_picopicoprobe.build.core=rp2040
wiznet_5100s_evb_picopicoprobe.build.mcu=rp2040
wiznet_5100s_evb_picopicoprobe.build.ldscript=memmap_default.ld
wiznet_5100s_evb_picopicoprobe.build.ram_length=256k
wiznet_5100s_evb_picopicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
@@ -9081,7 +9516,6 @@ wiznet_5100s_evb_picopicodebug.serial.disableRTS=false
wiznet_5100s_evb_picopicodebug.build.f_cpu=125000000
wiznet_5100s_evb_picopicodebug.build.led=
wiznet_5100s_evb_picopicodebug.build.core=rp2040
wiznet_5100s_evb_picopicodebug.build.mcu=rp2040
wiznet_5100s_evb_picopicodebug.build.ldscript=memmap_default.ld
wiznet_5100s_evb_picopicodebug.build.ram_length=240k
wiznet_5100s_evb_picopicodebug.build.boot2=boot2_w25q080_2_padded_checksum
+1
View File
@@ -97,6 +97,7 @@ void analogWriteResolution(int res);
#include "SerialUART.h"
#include "RP2040Support.h"
#include "SerialPIO.h"
#include "Bootsel.h"
// Template which will evaluate at *compile time* to a single 32b number
+331
View File
@@ -0,0 +1,331 @@
/*
Serial-over-PIO for the Raspberry Pi Pico RP2040
Copyright (c) 2021 Earle F. Philhower, III <earlephilhower@yahoo.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "SerialPIO.h"
#include "CoreMutex.h"
#include <hardware/gpio.h>
#include <map>
#include "pio_uart.pio.h"
// ------------------------------------------------------------------------
// -- Generates a unique program for differing bit lengths
static std::map<int, PIOProgram*> _txMap;
static std::map<int, PIOProgram*> _rxMap;
// Duplicate a program and replace the first insn with a "set x, repl"
static pio_program_t *pio_make_uart_prog(int repl, const pio_program_t *pg) {
pio_program_t *p = new pio_program_t;
p->length = pg->length;
p->origin = pg->origin;
uint16_t *insn = (uint16_t *)malloc(p->length * 2);
memcpy(insn, pg->instructions, p->length * 2);
insn[0] = pio_encode_set(pio_x, repl);
p->instructions = insn;
return p;
}
static PIOProgram *_getTxProgram(int bits) {
auto f = _txMap.find(bits);
if (f == _txMap.end()) {
pio_program_t * p = pio_make_uart_prog(bits, &pio_tx_program);
_txMap.insert({bits, new PIOProgram(p)});
f = _txMap.find(bits);
}
return f->second;
}
static PIOProgram *_getRxProgram(int bits) {
auto f = _rxMap.find(bits);
if (f == _rxMap.end()) {
pio_program_t * p = pio_make_uart_prog(bits, &pio_rx_program);
_rxMap.insert({bits, new PIOProgram(p)});
f = _rxMap.find(bits);
}
return f->second;
}
// ------------------------------------------------------------------------
// TODO - this works, but there must be a faster/better way...
static int _parity(int bits, int data) {
int p = 0;
for (int b = 0; b < bits; b++) {
p ^= (data & (1 << b)) ? 1 : 0;
}
return p;
}
// We need to cache generated SerialPIOs so we can add data to them from
// the shared handler
static SerialPIO *_pioSP[2][4];
static void __not_in_flash_func(_fifoIRQ)() {
for (int p = 0; p < 2; p++) {
for (int sm = 0; sm < 4; sm++) {
SerialPIO *s = _pioSP[p][sm];
if (s) {
s->_handleIRQ();
pio_interrupt_clear((p == 0) ? pio0 : pio1, sm);
}
}
}
}
void __not_in_flash_func(SerialPIO::_handleIRQ)() {
if (_rx == NOPIN) {
return;
}
while ((!pio_sm_is_rx_fifo_empty(_rxPIO, _rxSM)) && ((_writer + 1) % sizeof(_queue) != _reader)) {
uint32_t decode = _rxPIO->rxf[_rxSM];
decode >>= 32 - _rxBits;
uint32_t val = 0;
for (int b = 0; b < _bits + 1; b++) {
val |= (decode & (1 << (b * 2))) ? 1 << b : 0;
}
if (_parity == UART_PARITY_EVEN) {
int p = ::_parity(_bits, val);
int r = (val & (1 << _bits)) ? 1 : 0;
if (p != r) {
// TODO - parity error
continue;
}
} else if (_parity == UART_PARITY_ODD) {
int p = ::_parity(_bits, val);
int r = (val & (1 << _bits)) ? 1 : 0;
if (p == r) {
// TODO - parity error
continue;
}
}
_queue[_writer] = val & ((1 << _bits) - 1);
asm volatile("" ::: "memory"); // Ensure the queue is written before the written count advances
_writer = (_writer + 1) % sizeof(_queue);
}
}
SerialPIO::SerialPIO(pin_size_t tx, pin_size_t rx) {
_tx = tx;
_rx = rx;
mutex_init(&_mutex);
}
void SerialPIO::begin(unsigned long baud, uint16_t config) {
_baud = baud;
switch (config & SERIAL_PARITY_MASK) {
case SERIAL_PARITY_EVEN:
_parity = UART_PARITY_EVEN;
break;
case SERIAL_PARITY_ODD:
_parity = UART_PARITY_ODD;
break;
default:
_parity = UART_PARITY_NONE;
break;
}
switch (config & SERIAL_STOP_BIT_MASK) {
case SERIAL_STOP_BIT_1:
_stop = 1;
break;
default:
_stop = 2;
break;
}
switch (config & SERIAL_DATA_MASK) {
case SERIAL_DATA_5:
_bits = 5;
break;
case SERIAL_DATA_6:
_bits = 6;
break;
case SERIAL_DATA_7:
_bits = 7;
break;
default:
_bits = 8;
break;
}
if ((_tx == NOPIN) && (_rx == NOPIN)) {
DEBUGCORE("ERROR: No pins specified for SerialPIO\n");
return;
}
if (_tx != NOPIN) {
_txBits = _bits + _stop + (_parity != UART_PARITY_NONE ? 1 : 0) + 1/*start bit*/;
_txPgm = _getTxProgram(_txBits);
int off;
if (!_txPgm->prepare(&_txPIO, &_txSM, &off)) {
DEBUGCORE("ERROR: Unable to allocate PIO TX UART, out of PIO resources\n");
// ERROR, no free slots
return;
}
digitalWrite(_tx, HIGH);
pinMode(_tx, OUTPUT);
pio_tx_program_init(_txPIO, _txSM, off, _tx);
pio_sm_clear_fifos(_txPIO, _txSM); // Remove any existing data
// Put the divider into ISR w/o using up program space
pio_sm_put_blocking(_txPIO, _txSM, clock_get_hz(clk_sys) / _baud - 2);
pio_sm_exec(_txPIO, _txSM, pio_encode_pull(false, false));
pio_sm_exec(_txPIO, _txSM, pio_encode_mov(pio_isr, pio_osr));
// Start running!
pio_sm_set_enabled(_txPIO, _txSM, true);
}
if (_rx != NOPIN) {
_writer = 0;
_reader = 0;
_rxBits = 2 * (_bits + _stop + (_parity != UART_PARITY_NONE ? 1 : 0) + 1);
_rxPgm = _getRxProgram(_rxBits);
int off;
if (!_rxPgm->prepare(&_rxPIO, &_rxSM, &off)) {
DEBUGCORE("ERROR: Unable to allocate PIO RX UART, out of PIO resources\n");
return;
}
// Stash away the created RX port for the IRQ handler
_pioSP[pio_get_index(_rxPIO)][_rxSM] = this;
pinMode(_rx, INPUT);
pio_rx_program_init(_rxPIO, _rxSM, off, _rx);
pio_sm_clear_fifos(_rxPIO, _rxSM); // Remove any existing data
// Put phase divider into OSR w/o using add'l program memory
pio_sm_put_blocking(_rxPIO, _rxSM, clock_get_hz(clk_sys) / (_baud * 2) - 2);
pio_sm_exec(_rxPIO, _rxSM, pio_encode_pull(false, false));
// Enable interrupts on rxfifo
switch (_rxSM) {
case 0: pio_set_irq0_source_enabled(_rxPIO, pis_sm0_rx_fifo_not_empty, true); break;
case 1: pio_set_irq0_source_enabled(_rxPIO, pis_sm1_rx_fifo_not_empty, true); break;
case 2: pio_set_irq0_source_enabled(_rxPIO, pis_sm2_rx_fifo_not_empty, true); break;
case 3: pio_set_irq0_source_enabled(_rxPIO, pis_sm3_rx_fifo_not_empty, true); break;
}
irq_set_exclusive_handler(PIO0_IRQ_0, _fifoIRQ);
irq_set_enabled(PIO0_IRQ_0, true);
pio_sm_set_enabled(_rxPIO, _rxSM, true);
}
_running = true;
}
void SerialPIO::end() {
if (!_running) {
return;
}
// TODO: Deallocate PIO resources, stop them
_pioSP[pio_get_index(_rxPIO)][_rxSM] = nullptr;
_running = false;
}
int SerialPIO::peek() {
CoreMutex m(&_mutex);
if (!_running || !m || (_rx == NOPIN)) {
return -1;
}
// If there's something in the FIFO now, just peek at it
uint32_t start = millis();
uint32_t now = millis();
while ((now - start) < _timeout) {
if (_writer != _reader) {
return _queue[_reader];
}
delay(1);
now = millis();
}
return -1; // Nothing available before timeout
}
int SerialPIO::read() {
CoreMutex m(&_mutex);
if (!_running || !m || (_rx == NOPIN)) {
return -1;
}
uint32_t start = millis();
uint32_t now = millis();
while ((now - start) < _timeout) {
if (_writer != _reader) {
auto ret = _queue[_reader];
_reader = (_reader + 1) % sizeof(_queue);
return ret;
}
delay(1);
now = millis();
}
return -1; // Timeout
}
int SerialPIO::available() {
CoreMutex m(&_mutex);
if (!_running || !m || (_rx == NOPIN)) {
return 0;
}
return (_writer - _reader) % sizeof(_queue);
}
int SerialPIO::availableForWrite() {
CoreMutex m(&_mutex);
if (!_running || !m || (_tx == NOPIN)) {
return 0;
}
return 8 - pio_sm_get_tx_fifo_level(_txPIO, _txSM);
}
void SerialPIO::flush() {
CoreMutex m(&_mutex);
if (!_running || !m || (_tx == NOPIN)) {
return;
}
while (!pio_sm_is_tx_fifo_empty(_txPIO, _txSM)) {
delay(1); // Wait for all FIFO to be read
}
// Could have 1 byte being transmitted, so wait for bit times
delay((1000 * (_txBits + 1)) / _baud);
}
size_t SerialPIO::write(uint8_t c) {
CoreMutex m(&_mutex);
if (!_running || !m || (_tx == NOPIN)) {
return 0;
}
uint32_t val = c;
if (_parity == UART_PARITY_NONE) {
val |= 7 << _bits; // Set 2 stop bits, the HW will only transmit the required number
} else if (_parity == UART_PARITY_EVEN) {
val |= ::_parity(_bits, c) << _bits;
val |= 7 << (_bits + 1);
} else {
val |= (1 ^ ::_parity(_bits, c)) << _bits;
val |= 7 << (_bits + 1);
}
val <<= 1; // Start bit = low
pio_sm_put_blocking(_txPIO, _txSM, val);
return 1;
}
SerialPIO::operator bool() {
return _running;
}
+78
View File
@@ -0,0 +1,78 @@
/*
Serial-over-PIO for the Raspberry Pi Pico RP2040
Copyright (c) 2021 Earle F. Philhower, III <earlephilhower@yahoo.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#pragma once
#include <Arduino.h>
#include "api/HardwareSerial.h"
#include <stdarg.h>
#include <queue>
#include <hardware/uart.h>
#include "CoreMutex.h"
extern "C" typedef struct uart_inst uart_inst_t;
class SerialPIO : public HardwareSerial {
public:
static const pin_size_t NOPIN = 0xff; // Use in constructor to disable RX or TX unit
SerialPIO(pin_size_t tx, pin_size_t rx);
void begin(unsigned long baud = 115200) override {
begin(baud, SERIAL_8N1);
};
void begin(unsigned long baud, uint16_t config) override;
void end() override;
virtual int peek() override;
virtual int read() override;
virtual int available() override;
virtual int availableForWrite() override;
virtual void flush() override;
virtual size_t write(uint8_t c) override;
using Print::write;
operator bool() override;
// Not to be called by users, only from the IRQ handler. In public so that the C-language IQR callback can access it
void _handleIRQ();
private:
bool _running = false;
pin_size_t _tx, _rx;
int _baud;
int _bits;
uart_parity_t _parity;
int _stop;
mutex_t _mutex;
PIOProgram *_txPgm;
PIO _txPIO;
int _txSM;
int _txBits;
PIOProgram *_rxPgm;
PIO _rxPIO;
int _rxSM;
int _rxBits;
// Lockless, IRQ-handled circular queue
uint32_t _writer;
uint32_t _reader;
uint8_t _queue[32];
};
+85 -28
View File
@@ -72,37 +72,73 @@ SerialUART::SerialUART(uart_inst_t *uart, pin_size_t tx, pin_size_t rx) {
mutex_init(&_mutex);
}
static void _uart0IRQ();
static void _uart1IRQ();
void SerialUART::begin(unsigned long baud, uint16_t config) {
_baud = baud;
uart_init(_uart, baud);
int bits, stop;
uart_parity_t parity;
switch (config & SERIAL_PARITY_MASK) {
case SERIAL_PARITY_EVEN: parity = UART_PARITY_EVEN; break;
case SERIAL_PARITY_ODD: parity = UART_PARITY_ODD; break;
default: parity = UART_PARITY_NONE; break;
case SERIAL_PARITY_EVEN:
parity = UART_PARITY_EVEN;
break;
case SERIAL_PARITY_ODD:
parity = UART_PARITY_ODD;
break;
default:
parity = UART_PARITY_NONE;
break;
}
switch (config & SERIAL_STOP_BIT_MASK) {
case SERIAL_STOP_BIT_1: stop = 1; break;
default: stop = 2; break;
case SERIAL_STOP_BIT_1:
stop = 1;
break;
default:
stop = 2;
break;
}
switch (config & SERIAL_DATA_MASK) {
case SERIAL_DATA_5: bits = 5; break;
case SERIAL_DATA_6: bits = 6; break;
case SERIAL_DATA_7: bits = 7; break;
default: bits = 8; break;
case SERIAL_DATA_5:
bits = 5;
break;
case SERIAL_DATA_6:
bits = 6;
break;
case SERIAL_DATA_7:
bits = 7;
break;
default:
bits = 8;
break;
}
uart_set_format(_uart, bits, stop, parity);
gpio_set_function(_tx, GPIO_FUNC_UART);
gpio_set_function(_rx, GPIO_FUNC_UART);
_writer = 0;
_reader = 0;
if (_uart == uart0) {
irq_set_exclusive_handler(UART0_IRQ, _uart0IRQ);
irq_set_enabled(UART0_IRQ, true);
} else {
irq_set_exclusive_handler(UART1_IRQ, _uart1IRQ);
irq_set_enabled(UART1_IRQ, true);
}
uart_get_hw(_uart)->imsc |= UART_UARTIMSC_RXIM_BITS | UART_UARTIMSC_RTIM_BITS;
_running = true;
_peek = -1;
}
void SerialUART::end() {
if (!_running) {
return;
}
if (_uart == uart0) {
irq_set_enabled(UART0_IRQ, false);
} else {
irq_set_enabled(UART1_IRQ, false);
}
uart_deinit(_uart);
_running = false;
}
@@ -112,15 +148,16 @@ int SerialUART::peek() {
if (!_running || !m) {
return -1;
}
if (_peek >= 0) {
return _peek;
uint32_t start = millis();
uint32_t now = millis();
while ((now - start) < _timeout) {
if (_writer != _reader) {
return _queue[_reader];
}
delay(1);
now = millis();
}
if (uart_is_readable_within_us(_uart, _timeout * 1000)) {
_peek = uart_getc(_uart);
} else {
_peek = -1; // Timeout
}
return _peek;
return -1; // Nothing available before timeout
}
int SerialUART::read() {
@@ -128,16 +165,18 @@ int SerialUART::read() {
if (!_running || !m) {
return -1;
}
if (_peek >= 0) {
int ret = _peek;
_peek = -1;
return ret;
}
if (uart_is_readable_within_us(_uart, _timeout * 1000)) {
return uart_getc(_uart);
} else {
return -1; // Timeout
uint32_t start = millis();
uint32_t now = millis();
while ((now - start) < _timeout) {
if (_writer != _reader) {
auto ret = _queue[_reader];
_reader = (_reader + 1) % sizeof(_queue);
return ret;
}
delay(1);
now = millis();
}
return -1; // Timeout
}
int SerialUART::available() {
@@ -145,7 +184,7 @@ int SerialUART::available() {
if (!_running || !m) {
return 0;
}
return (uart_is_readable(_uart)) ? 1 : 0;
return (_writer - _reader) % sizeof(_queue);
}
int SerialUART::availableForWrite() {
@@ -205,3 +244,21 @@ void arduino::serialEvent2Run(void) {
serialEvent2();
}
}
// IRQ handler, called when FIFO > 1/4 full or when it had held unread data for >32 bit times
void __not_in_flash_func(SerialUART::_handleIRQ)() {
uart_get_hw(_uart)->icr |= UART_UARTICR_RTIC_BITS | UART_UARTICR_RXIC_BITS;
while ((uart_is_readable(_uart)) && ((_writer + 1) % sizeof(_queue) != _reader)) {
_queue[_writer] = uart_getc(_uart);
asm volatile("" ::: "memory"); // Ensure the queue is written before the written count advances
_writer = (_writer + 1) % sizeof(_queue);
}
}
static void __not_in_flash_func(_uart0IRQ)() {
Serial1._handleIRQ();
}
static void __not_in_flash_func(_uart1IRQ)() {
Serial2._handleIRQ();
}
+9 -1
View File
@@ -23,6 +23,7 @@
#include <Arduino.h>
#include "api/HardwareSerial.h"
#include <stdarg.h>
#include <queue>
#include "CoreMutex.h"
extern "C" typedef struct uart_inst uart_inst_t;
@@ -56,13 +57,20 @@ public:
using Print::write;
operator bool() override;
// Not to be called by users, only from the IRQ handler. In public so that the C-language IQR callback can access it
void _handleIRQ();
private:
bool _running = false;
uart_inst_t *_uart;
pin_size_t _tx, _rx;
int _baud;
int _peek;
mutex_t _mutex;
// Lockless, IRQ-handled circular queue
uint32_t _writer;
uint32_t _reader;
uint8_t _queue[32];
};
extern SerialUART Serial1; // HW UART 0
+109
View File
@@ -0,0 +1,109 @@
; pio_uart for the Raspberry Pi Pico RP2040
;
; Based loosely off of the uart_rx/_tx examples in the pico-examples repo,
; but heavily modified and optimized to not require changing the PIO
; clocks so that Tone and Servo won't be affected, and multiple different
; PIO ports can be run at different baud at the same time.
;
; Copyright (c) 2021 Earle F. Philhower, III <earlephilhower@yahoo.com>
;
; This library is free software; you can redistribute it and/or
; modify it under the terms of the GNU Lesser General Public
; License as published by the Free Software Foundation; either
; version 2.1 of the License, or (at your option) any later version.
;
; This library is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
; Lesser General Public License for more details.
;
; You should have received a copy of the GNU Lesser General Public
; License along with this library; if not, write to the Free Software
; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
.program pio_tx
.side_set 1 opt
; We shift out the start and stop bit as part of the FIFO
set x, 9
pull side 1 ; Force stop bit
; Send the bits
bitloop:
out pins, 1
mov y, isr ; ISR is loaded by the setup routine with the period-1 count
wait_bit:
jmp y-- wait_bit
jmp x-- bitloop
% c-sdk {
static inline void pio_tx_program_init(PIO pio, uint sm, uint offset, uint pin_tx) {
// Tell PIO to initially drive output-high on the selected pin, then map PIO
// onto that pin with the IO muxes.
pio_sm_set_pins_with_mask(pio, sm, 1u << pin_tx, 1u << pin_tx);
pio_sm_set_pindirs_with_mask(pio, sm, 1u << pin_tx, 1u << pin_tx);
pio_gpio_init(pio, pin_tx);
pio_sm_config c = pio_tx_program_get_default_config(offset);
// OUT shifts to right, no autopull
sm_config_set_out_shift(&c, true, false, 32);
// We are mapping both OUT and side-set to the same pin, because sometimes
// we need to assert user data onto the pin (with OUT) and sometimes
// assert constant values (start/stop bit)
sm_config_set_out_pins(&c, pin_tx, 1);
sm_config_set_sideset_pins(&c, pin_tx);
// We only need TX, so get an 8-deep FIFO!
sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
pio_sm_init(pio, sm, offset, &c);
}
%}
.program pio_rx
; IN pin 0 and JMP pin are both mapped to the GPIO used as UART RX.
start:
set x, 18 ; Preload bit counter...we'll shift in the start bit and stop bit, and each bit will be double-recorded (to be fixed by RP2040 code)
wait 0 pin 0 ; Stall until start bit is asserted
bitloop:
; Delay until 1/2 way into the bit time
mov y, osr
wait_half:
jmp y-- wait_half
; Read in the bit
in pins, 1 ; Shift data bit into ISR
jmp x-- bitloop ; Loop all bits
push ; Stuff it and wait for next start
% c-sdk {
static inline void pio_rx_program_init(PIO pio, uint sm, uint offset, uint pin) {
pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
pio_gpio_init(pio, pin);
gpio_pull_up(pin);
pio_sm_config c = pio_rx_program_get_default_config(offset);
sm_config_set_in_pins(&c, pin); // for WAIT, IN
sm_config_set_jmp_pin(&c, pin); // for JMP
// Shift to right, autopull disabled
sm_config_set_in_shift(&c, true, false, 32);
pio_sm_init(pio, sm, offset, &c);
}
%}
+107
View File
@@ -0,0 +1,107 @@
// -------------------------------------------------- //
// This file is autogenerated by pioasm; do not edit! //
// -------------------------------------------------- //
#if !PICO_NO_HARDWARE
#include "hardware/pio.h"
#endif
// ------ //
// pio_tx //
// ------ //
#define pio_tx_wrap_target 0
#define pio_tx_wrap 5
static const uint16_t pio_tx_program_instructions[] = {
// .wrap_target
0xe029, // 0: set x, 9
0x98a0, // 1: pull block side 1
0x6001, // 2: out pins, 1
0xa046, // 3: mov y, isr
0x0084, // 4: jmp y--, 4
0x0042, // 5: jmp x--, 2
// .wrap
};
#if !PICO_NO_HARDWARE
static const struct pio_program pio_tx_program = {
.instructions = pio_tx_program_instructions,
.length = 6,
.origin = -1,
};
static inline pio_sm_config pio_tx_program_get_default_config(uint offset) {
pio_sm_config c = pio_get_default_sm_config();
sm_config_set_wrap(&c, offset + pio_tx_wrap_target, offset + pio_tx_wrap);
sm_config_set_sideset(&c, 2, true, false);
return c;
}
static inline void pio_tx_program_init(PIO pio, uint sm, uint offset, uint pin_tx) {
// Tell PIO to initially drive output-high on the selected pin, then map PIO
// onto that pin with the IO muxes.
pio_sm_set_pins_with_mask(pio, sm, 1u << pin_tx, 1u << pin_tx);
pio_sm_set_pindirs_with_mask(pio, sm, 1u << pin_tx, 1u << pin_tx);
pio_gpio_init(pio, pin_tx);
pio_sm_config c = pio_tx_program_get_default_config(offset);
// OUT shifts to right, no autopull
sm_config_set_out_shift(&c, true, false, 32);
// We are mapping both OUT and side-set to the same pin, because sometimes
// we need to assert user data onto the pin (with OUT) and sometimes
// assert constant values (start/stop bit)
sm_config_set_out_pins(&c, pin_tx, 1);
sm_config_set_sideset_pins(&c, pin_tx);
// We only need TX, so get an 8-deep FIFO!
sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
pio_sm_init(pio, sm, offset, &c);
}
#endif
// ------ //
// pio_rx //
// ------ //
#define pio_rx_wrap_target 0
#define pio_rx_wrap 6
static const uint16_t pio_rx_program_instructions[] = {
// .wrap_target
0xe032, // 0: set x, 18
0x2020, // 1: wait 0 pin, 0
0xa047, // 2: mov y, osr
0x0083, // 3: jmp y--, 3
0x4001, // 4: in pins, 1
0x0042, // 5: jmp x--, 2
0x8020, // 6: push block
// .wrap
};
#if !PICO_NO_HARDWARE
static const struct pio_program pio_rx_program = {
.instructions = pio_rx_program_instructions,
.length = 7,
.origin = -1,
};
static inline pio_sm_config pio_rx_program_get_default_config(uint offset) {
pio_sm_config c = pio_get_default_sm_config();
sm_config_set_wrap(&c, offset + pio_rx_wrap_target, offset + pio_rx_wrap);
return c;
}
static inline void pio_rx_program_init(PIO pio, uint sm, uint offset, uint pin) {
pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
pio_gpio_init(pio, pin);
gpio_pull_up(pin);
pio_sm_config c = pio_rx_program_get_default_config(offset);
sm_config_set_in_pins(&c, pin); // for WAIT, IN
sm_config_set_jmp_pin(&c, pin); // for JMP
// Shift to right, autopull disabled
sm_config_set_in_shift(&c, true, false, 32);
pio_sm_init(pio, sm, offset, &c);
}
#endif
+1
View File
@@ -29,6 +29,7 @@ For the latest version, always check https://github.com/earlephilhower/arduino-p
EEPROM <eeprom>
I2S Audio <i2s>
Serial USB and UARTs <serial>
"Software Serial" PIO UART <piouart>
Servo <servo>
SPI <spi>
Wire(I2C) <wire>
+22
View File
@@ -0,0 +1,22 @@
"SoftwareSerial" PIO-based UART
================================
Equivalent to the Arduino SoftwareSerial library, an emulated UART using
one or two PIO state machines is included in the Arduino-Pico core. This
allows for up to 8 additional serial ports to be run from the RP2040 without
requiring additional CPU resources.
Instantiate a ``SerialPIO(txpin, rxpin)`` object in your sketch and then
use it the same as any other serial port. Even, odd, and no parity modes
are supported, as well as data sizes from 5- to 8-bits.
To instantiate only a serial transmit or receive unit, pass in
``SerialPIO::NOPIN`` as the ``txpin`` or ``rxpin``.
For example, to make a transmit-only port on GP16
.. code:: cpp
SerialPIO transmitter( 16, SerialPIO::NOPIN );
For detailed information about the Serial ports, see the
Arduino `Serial Reference <https://www.arduino.cc/reference/en/language/functions/communication/serial/>`_ .
+1
View File
@@ -33,3 +33,4 @@ resumeOtherCore KEYWORD2
PIOProgram KEYWORD2
prepare KEYWORD2
SerialPIO KEYWORD2
BIN
View File
Binary file not shown.
+2 -2
View File
@@ -12,8 +12,8 @@
#define _PICO_VERSION_H
#define PICO_SDK_VERSION_MAJOR 1
#define PICO_SDK_VERSION_MINOR 2
#define PICO_SDK_VERSION_MINOR 3
#define PICO_SDK_VERSION_REVISION 0
#define PICO_SDK_VERSION_STRING "1.2.0"
#define PICO_SDK_VERSION_STRING "1.3.0"
#endif
+16 -12
View File
@@ -179,23 +179,22 @@ void SPIClassRP2040::transfer(void *txbuf, void *rxbuf, size_t count) {
void SPIClassRP2040::beginTransaction(SPISettings settings) {
DEBUGSPI("SPI::beginTransaction(clk=%d, bo=%s\n", _spis.getClockFreq(), (_spis.getBitOrder() == MSBFIRST) ? "MSB" : "LSB");
_spis = settings;
if (_initted) {
DEBUGSPI("SPI: deinitting currently active SPI\n");
spi_deinit(_spi);
if (_initted && settings == _spis) {
DEBUGSPI("SPI: Reusing existing initted SPI\n");
} else {
_spis = settings;
if (_initted) {
DEBUGSPI("SPI: deinitting currently active SPI\n");
spi_deinit(_spi);
}
DEBUGSPI("SPI: initting SPI\n");
spi_init(_spi, _spis.getClockFreq());
_initted = true;
}
DEBUGSPI("SPI: initting SPI\n");
spi_init(_spi, _spis.getClockFreq());
_initted = true;
}
void SPIClassRP2040::endTransaction(void) {
DEBUGSPI("SPI::endTransaction()\n");
if (_initted) {
DEBUGSPI("SPI: deinitting currently active SPI\n");
spi_deinit(_spi);
}
_initted = false;
}
bool SPIClassRP2040::setRX(pin_size_t pin) {
@@ -281,6 +280,11 @@ void SPIClassRP2040::begin(bool hwCS) {
void SPIClassRP2040::end() {
DEBUGSPI("SPI::end()\n");
if (_initted) {
DEBUGSPI("SPI: deinitting currently active SPI\n");
_initted = false;
spi_deinit(_spi);
}
gpio_set_function(_RX, GPIO_FUNC_SIO);
if (_hwCS) {
gpio_set_function(_CS, GPIO_FUNC_SIO);
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "framework-arduinopico",
"version": "1.10905.0",
"version": "1.10910.0",
"description": "Arduino Wiring-based Framework (RPi Pico RP2040)",
"keywords": [
"framework",
+3 -1
View File
@@ -29,6 +29,8 @@ runtime.tools.pqt-elf2uf2.path={runtime.platform.path}/system/elf2uf2
compiler.path={runtime.tools.pqt-gcc.path}/bin/
compiler.libraries.ldflags=
# Compile variables
# -----------------
@@ -116,7 +118,7 @@ recipe.hooks.linking.prelink.1.pattern="{runtime.tools.pqt-python3.path}/python3
recipe.hooks.linking.prelink.2.pattern="{compiler.path}{compiler.S.cmd}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -c "{runtime.platform.path}/boot2/{build.boot2}.S" "-I{runtime.platform.path}/pico-sdk/src/rp2040/hardware_regs/include/" "-I{runtime.platform.path}/pico-sdk/src/common/pico_binary_info/include" -o "{build.path}/boot2.o"
## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" "-L{build.path}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} {compiler.ldflags} "-Wl,--script={build.path}/memmap_default.ld" "-Wl,-Map,{build.path}/{build.project_name}.map" -o "{build.path}/{build.project_name}.elf" -Wl,--start-group {object_files} "{build.path}/{archive_file}" "{build.path}/boot2.o" {compiler.libpico} -lm -lc {compiler.libstdcpp} -lc -Wl,--end-group
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" "-L{build.path}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} {compiler.ldflags} "-Wl,--script={build.path}/memmap_default.ld" "-Wl,-Map,{build.path}/{build.project_name}.map" -o "{build.path}/{build.project_name}.elf" -Wl,--start-group {object_files} "{build.path}/{archive_file}" "{build.path}/boot2.o" {compiler.libraries.ldflags} {compiler.libpico} -lm -lc {compiler.libstdcpp} -lc -Wl,--end-group
## Create output (UF2 file)
recipe.objcopy.uf2.pattern="{runtime.tools.pqt-elf2uf2.path}/elf2uf2" "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.uf2"
+1
View File
@@ -23,6 +23,7 @@ for type in boot2_generic_03h boot2_is25lp080 boot2_w25q080 boot2_w25x10cl; do
arm-none-eabi-gcc -march=armv6-m -mcpu=cortex-m0plus -mthumb -O3 \
-DNDEBUG -DPICO_FLASH_SPI_CLKDIV=$div \
-c "$PICO_SDK_PATH/src/rp2_common/boot_stage2/$type.S" \
-I "$PICO_SDK_PATH/src/boards/include/boards/" \
-I "$PICO_SDK_PATH/src/rp2040/hardware_regs/include/" \
-I "$PICO_SDK_PATH/src/rp2_common/pico_platform/include/" \
-I "$PICO_SDK_PATH/src/rp2_common/boot_stage2/asminclude/" \
+6 -6
View File
@@ -26,14 +26,14 @@ if (NOT PICO_EXTRAS_PATH)
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_EXTRAS_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
endif ()
FetchContent_Declare(
PICO_EXTRAS
pico_extras
GIT_REPOSITORY https://github.com/raspberrypi/pico-extras
GIT_TAG master
)
if (NOT PICO_EXTRAS)
message("Downloading PICO EXTRAS")
FetchContent_Populate(PICO_EXTRAS)
set(PICO_EXTRAS_PATH ${PICO_EXTRAS_SOURCE_DIR})
if (NOT pico_extras)
message("Downloading Raspberry Pi Pico Extras")
FetchContent_Populate(pico_extras)
set(PICO_EXTRAS_PATH ${pico_extras_SOURCE_DIR})
endif ()
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
else ()
@@ -59,4 +59,4 @@ endif ()
set(PICO_EXTRAS_PATH ${PICO_EXTRAS_PATH} CACHE PATH "Path to the PICO EXTRAS" FORCE)
add_subdirectory(${PICO_EXTRAS_PATH} pico_extras)
add_subdirectory(${PICO_EXTRAS_PATH} pico_extras)
+6 -8
View File
@@ -3,8 +3,6 @@
# This can be dropped into an external project to help locate this SDK
# It should be include()ed prior to project()
# todo document
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
@@ -20,8 +18,8 @@ if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_P
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
endif ()
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the PICO SDK")
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of PICO SDK from git if not otherwise locatable")
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
if (NOT PICO_SDK_PATH)
@@ -37,14 +35,14 @@ if (NOT PICO_SDK_PATH)
GIT_TAG master
)
if (NOT pico_sdk)
message("Downloading PICO SDK")
message("Downloading Raspberry Pi Pico SDK")
FetchContent_Populate(pico_sdk)
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
endif ()
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
else ()
message(FATAL_ERROR
"PICO SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
)
endif ()
endif ()
@@ -56,9 +54,9 @@ endif ()
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the PICO SDK")
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
endif ()
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the PICO SDK" FORCE)
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
include(${PICO_SDK_INIT_CMAKE_FILE})
+8 -2
View File
@@ -90,7 +90,6 @@ def BuildHeader(name, vendor_name, product_name, vidtouse, pidtouse, vid, pid, p
print("%s.build.f_cpu=125000000" % (name))
print("%s.build.led=" % (name))
print("%s.build.core=rp2040" % (name))
print("%s.build.mcu=rp2040" % (name))
print("%s.build.ldscript=memmap_default.ld" % (name))
print("%s.build.ram_length=%dk" % (name, ramsize / 1024))
print("%s.build.boot2=%s" % (name, boot2))
@@ -99,6 +98,12 @@ def BuildHeader(name, vendor_name, product_name, vidtouse, pidtouse, vid, pid, p
print('%s.build.usb_manufacturer="%s"' % (name, vendor_name))
print('%s.build.usb_product="%s"' % (name, product_name))
def WriteWarning():
print("# WARNING - DO NOT EDIT THIS FILE, IT IS MACHINE GENERATED")
print("# To change something here, edit tools/makeboards.py and")
print("# run 'python3 makeboards.py > ../boards.txt' to regenerate")
print()
def BuildGlobalMenuList():
print("menu.BoardModel=Model")
print("menu.flash=Flash Size")
@@ -148,7 +153,7 @@ def MakeBoard(name, vendor_name, product_name, vid, pid, pwr, boarddefine, flash
if name == "generic":
BuildBoot(n)
WriteWarning()
BuildGlobalMenuList()
MakeBoard("rpipico", "Raspberry Pi", "Pico", "0x2e8a", "0x000a", 250, "RASPBERRY_PI_PICO", 2, "boot2_w25q080_2_padded_checksum")
MakeBoard("adafruit_feather", "Adafruit", "Feather RP2040", "0x239a", "0x80f1", 250, "ADAFRUIT_FEATHER_RP2040", 8, "boot2_w25x10cl_4_padded_checksum")
@@ -157,6 +162,7 @@ MakeBoard("adafruit_qtpy", "Adafruit", "QT Py RP2040", "0x239a", "0x80f7", 250,
MakeBoard("adafruit_stemmafriend", "Adafruit", "STEMMA Friend RP2040", "0x239a", "0x80e3", 250, "ADAFRUIT_STEMMAFRIEND_RP2040", 8, "boot2_w25q080_2_padded_checksum")
MakeBoard("adafruit_trinkeyrp2040qt", "Adafruit", "Trinkey RP2040 QT", "0x239a", "0x8109", 250, "ADAFRUIT_TRINKEYQT_RP2040", 8, "boot2_w25q080_2_padded_checksum")
MakeBoard("adafruit_macropad2040", "Adafruit", "MacroPad RP2040", "0x239a", "0x8107", 250, "ADAFRUIT_MACROPAD_RP2040", 8, "boot2_w25q080_2_padded_checksum")
MakeBoard("adafruit_kb2040", "Adafruit", "KB2040", "0x239a", "0x8105", 250, "ADAFRUIT_KB2040_RP2040", 8, "boot2_w25q080_2_padded_checksum")
MakeBoard("arduino_nano_connect", "Arduino", "Nano RP2040 Connect", "0x2341", "0x0058", 250, "ARDUINO_NANO_RP2040_CONNECT", 16, "boot2_w25q080_2_padded_checksum")
MakeBoard("cytron_maker_nano_rp2040", "Cytron", "Maker Nano RP2040", "0x2e8a", "0x100f", 250, "CYTRON_MAKER_NANO_RP2040", 2, "boot2_w25q080_2_padded_checksum")
MakeBoard("cytron_maker_pi_rp2040", "Cytron", "Maker Pi RP2040", "0x2e8a", "0x1000", 250, "CYTRON_MAKER_PI_RP2040", 2, "boot2_w25q080_2_padded_checksum")
+42
View File
@@ -0,0 +1,42 @@
#pragma once
// Pin definitions taken from:
// https://learn.adafruit.com/assets/100337
// LEDs not pinned out
#define PIN_LED (31u)
// Serial
#define PIN_SERIAL1_TX (0u)
#define PIN_SERIAL1_RX (1u)
// Not pinned out
#define PIN_SERIAL2_TX (31u)
#define PIN_SERIAL2_RX (31u)
// SPI
#define PIN_SPI0_MISO (20u)
#define PIN_SPI0_MOSI (19u)
#define PIN_SPI0_SCK (18u)
#define PIN_SPI0_SS (31u) // not pinned out
// Not pinned out
#define PIN_SPI1_MISO (31u)
#define PIN_SPI1_MOSI (31u)
#define PIN_SPI1_SCK (31u)
#define PIN_SPI1_SS (31u)
// Wire is on the STEMMA QT port
#define PIN_WIRE0_SDA (12u)
#define PIN_WIRE0_SCL (13u)
// Wire1 is on the breakout pins
#define PIN_WIRE1_SDA (2u)
#define PIN_WIRE1_SCL (3u)
#define SERIAL_HOWMANY (1u)
#define SPI_HOWMANY (1u)
#define WIRE_HOWMANY (2u)
#define PIN_NEOPIXEL (17u)
#include "../generic/common.h"