Add RISC-V support, GCC 14 move (#2491)

* Adds RISC-V compilation option to the IDE and Platform.IO.
* Build RP2350-RISCV libpico, libbearssl
* Fix RP2350 BearSSL library (was copied from RP2040, now built for M33)
* New GCC 14.2 toolchain is required (12.4 RISC-V support is borked)
* Newlib locking fixed prototypes
* Manually force all runtime init code into RP2350 binaries
* Add RISC-V to CI
* Remove RP2350 BOOT2.S files, binaries (not used)
* Clean up minor GCC 14.x warnings
* Add RP2350-RISCV OTA build, link
* Add RISC-V FreeRTOS files (configuration still not running, but builds)
* Add basic documentation
This commit is contained in:
Earle F. Philhower, III 2024-09-29 15:10:36 -07:00 committed by GitHub
parent f49d058477
commit f6973fc64d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
89 changed files with 11240 additions and 457 deletions

View file

@ -17,7 +17,7 @@ jobs:
with:
submodules: false
- name: Run codespell
uses: codespell-project/actions-codespell@master
uses: codespell-project/actions-codespell@v2
with:
skip: ./ArduinoCore-API,./libraries/ESP8266SdFat,./libraries/Adafruit_TinyUSB_Arduino,./libraries/LittleFS/lib,./tools/pyserial,./pico-sdk,./.github,./docs/i2s.rst,./cores/rp2040/api,./libraries/FreeRTOS,./tools/libbearssl/bearssl,./include,./libraries/WiFi/examples/BearSSL_Server,./ota/uzlib,./libraries/http-parser/lib,./libraries/WebServer/examples/HelloServerBearSSL/HelloServerBearSSL.ino,./libraries/HTTPUpdateServer/examples/SecureBearSSLUpdater/SecureBearSSLUpdater.ino,./.git,./libraries/FatFS/lib/fatfs,./libraries/FatFS/src/diskio.h,./libraries/FatFS/src/ff.cpp,./libraries/FatFS/src/ffconf.h,./libraries/FatFS/src/ffsystem.cpp,./libraries/FatFS/src/ff.h,./libraries/lwIP_WINC1500/src/driver,./libraries/lwIP_WINC1500/src/common,./libraries/lwIP_WINC1500/src/bus_wrapper,./libraries/lwIP_WINC1500/src/spi_flash
ignore_words_list: ser,dout,shiftIn,acount
@ -101,6 +101,37 @@ jobs:
cd ..
bash ./tests/build-rp2350.sh
# Build all rp2350-riscv examples on linux (core and Arduino IDE)
build-rp2350-riscv-linux:
name: Build RP2350-RISCV ${{ matrix.chunk }}
runs-on: ubuntu-latest
strategy:
matrix:
chunk: [0, 1, 2, 3, 4, 5]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Cache Linux toolchain
id: cache-linux
uses: actions/cache@v4
with:
path: ./tools/dist
key: ${{ runner.os }}-${{ hashFiles('package/package_pico_index.template.json', 'tests/common.sh') }}
- name: Build Sketches
env:
BUILD_PARITY: custom
mod: 6
rem: ${{ matrix.chunk }}
run: |
cd pico-sdk
git submodule update --init
cd ..
bash ./tests/build-rp2350-riscv.sh
# Build TinyUSB examples, requires custom build command line
build-tinyusb:
name: Build TinyUSB Examples

View file

@ -4,7 +4,7 @@
Raspberry Pi Pico Arduino core, for all RP2040 and RP2350 boards
This is a port of Arduino to the RP2040 (Raspberry Pi Pico processor) and RP2350 (Raspberry Pi Pico 2 processor). It uses the bare Raspberry Pi Pico SDK and a custom GCC 12.3/Newlib 4.0 toolchain.
This is a port of Arduino to the RP2040 (Raspberry Pi Pico processor) and RP2350 (Raspberry Pi Pico 2 processor). It uses the bare Raspberry Pi Pico SDK and a custom GCC 14.2/Newlib 4.3 toolchain and supports ARM and RISC-V cores.
# Documentation
See https://arduino-pico.readthedocs.io/en/latest/ along with the examples for more detailed usage information.
@ -126,6 +126,7 @@ Read the [Contributing Guide](https://github.com/earlephilhower/arduino-pico/blo
* Peripherals: SPI master/slave, Wire(I2C) master/slave, dual UART, emulated EEPROM, I2S audio input/output, Servo
* printf (i.e. debug) output over USB serial
* Transparent use of PSRAM globals and heap (RP2350 only)
* ARM or RISC-V (Hazard3) support for The RP2350
The RP2040 PIO state machines (SMs) are used to generate jitter-free:
* Servos

View file

@ -9,6 +9,7 @@ menu.psramcs=PSRAM CS
menu.psram=PSRAM Size
menu.psramfreq=PSRAM Speed
menu.freq=CPU Speed
menu.arch=CPU Architecture
menu.opt=Optimize
menu.rtti=RTTI
menu.stackprotect=Stack Protector
@ -598,10 +599,6 @@ rpipico2.build.usbvid=-DUSBD_VID=0x2e8a
rpipico2.build.usbpid=-DUSBD_PID=0x000f
rpipico2.build.usbpwr=-DUSBD_MAX_POWER_MA=250
rpipico2.build.board=RASPBERRY_PI_PICO_2
rpipico2.build.chip=rp2350
rpipico2.build.toolchain=arm-none-eabi
rpipico2.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
rpipico2.build.uf2family=--family rp2350-arm-s --abs-block
rpipico2.build.variant=rpipico2
rpipico2.upload.maximum_size=4194304
rpipico2.upload.wait_for_upload_port=true
@ -612,7 +609,7 @@ rpipico2.build.f_cpu=125000000
rpipico2.build.led=
rpipico2.build.core=rp2040
rpipico2.build.ldscript=memmap_default.ld
rpipico2.build.boot2=boot2_generic_03h_2_padded_checksum
rpipico2.build.boot2=none
rpipico2.build.usb_manufacturer="Raspberry Pi"
rpipico2.build.usb_product="Pico 2"
rpipico2.build.psram_length=0x000000
@ -672,6 +669,16 @@ rpipico2.menu.flash.4194304_3145728.build.flash_length=1040384
rpipico2.menu.flash.4194304_3145728.build.eeprom_start=272621568
rpipico2.menu.flash.4194304_3145728.build.fs_start=269475840
rpipico2.menu.flash.4194304_3145728.build.fs_end=272621568
rpipico2.menu.arch.arm=ARM
rpipico2.menu.arch.arm.build.chip=rp2350
rpipico2.menu.arch.arm.build.toolchain=arm-none-eabi
rpipico2.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
rpipico2.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
rpipico2.menu.arch.riscv=RISC-V
rpipico2.menu.arch.riscv.build.chip=rp2350-riscv
rpipico2.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
rpipico2.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
rpipico2.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
rpipico2.menu.freq.150=150 MHz
rpipico2.menu.freq.150.build.f_cpu=150000000L
rpipico2.menu.freq.50=50 MHz
@ -5199,10 +5206,6 @@ adafruit_feather_rp2350_hstx.build.usbvid=-DUSBD_VID=0x239a
adafruit_feather_rp2350_hstx.build.usbpid=-DUSBD_PID=0x814f
adafruit_feather_rp2350_hstx.build.usbpwr=-DUSBD_MAX_POWER_MA=250
adafruit_feather_rp2350_hstx.build.board=ADAFRUIT_FEATHER_RP2350_HSTX
adafruit_feather_rp2350_hstx.build.chip=rp2350
adafruit_feather_rp2350_hstx.build.toolchain=arm-none-eabi
adafruit_feather_rp2350_hstx.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
adafruit_feather_rp2350_hstx.build.uf2family=--family rp2350-arm-s --abs-block
adafruit_feather_rp2350_hstx.build.variant=adafruit_feather_rp2350_hstx
adafruit_feather_rp2350_hstx.upload.maximum_size=8388608
adafruit_feather_rp2350_hstx.upload.wait_for_upload_port=true
@ -5213,7 +5216,7 @@ adafruit_feather_rp2350_hstx.build.f_cpu=125000000
adafruit_feather_rp2350_hstx.build.led=
adafruit_feather_rp2350_hstx.build.core=rp2040
adafruit_feather_rp2350_hstx.build.ldscript=memmap_default.ld
adafruit_feather_rp2350_hstx.build.boot2=boot2_w25q080_2_padded_checksum
adafruit_feather_rp2350_hstx.build.boot2=none
adafruit_feather_rp2350_hstx.build.usb_manufacturer="Adafruit"
adafruit_feather_rp2350_hstx.build.usb_product="Feather RP2350 HSTX"
adafruit_feather_rp2350_hstx.build.psram_length=0x000000
@ -5301,6 +5304,16 @@ adafruit_feather_rp2350_hstx.menu.flash.8388608_7340032.build.flash_length=10403
adafruit_feather_rp2350_hstx.menu.flash.8388608_7340032.build.eeprom_start=276815872
adafruit_feather_rp2350_hstx.menu.flash.8388608_7340032.build.fs_start=269475840
adafruit_feather_rp2350_hstx.menu.flash.8388608_7340032.build.fs_end=276815872
adafruit_feather_rp2350_hstx.menu.arch.arm=ARM
adafruit_feather_rp2350_hstx.menu.arch.arm.build.chip=rp2350
adafruit_feather_rp2350_hstx.menu.arch.arm.build.toolchain=arm-none-eabi
adafruit_feather_rp2350_hstx.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
adafruit_feather_rp2350_hstx.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
adafruit_feather_rp2350_hstx.menu.arch.riscv=RISC-V
adafruit_feather_rp2350_hstx.menu.arch.riscv.build.chip=rp2350-riscv
adafruit_feather_rp2350_hstx.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
adafruit_feather_rp2350_hstx.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
adafruit_feather_rp2350_hstx.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
adafruit_feather_rp2350_hstx.menu.freq.150=150 MHz
adafruit_feather_rp2350_hstx.menu.freq.150.build.f_cpu=150000000L
adafruit_feather_rp2350_hstx.menu.freq.50=50 MHz
@ -5409,10 +5422,6 @@ adafruit_feather_rp2350_hstx.menu.ipbtstack.ipv4btcblebig.build.libpicowdefs=-DL
adafruit_feather_rp2350_hstx.menu.ipbtstack.ipv4ipv6btcblebig=IPv4 + IPv6 + Bluetooth - 32K
adafruit_feather_rp2350_hstx.menu.ipbtstack.ipv4ipv6btcblebig.build.libpicow=libipv4-ipv6-bt-big.a
adafruit_feather_rp2350_hstx.menu.ipbtstack.ipv4ipv6btcblebig.build.libpicowdefs=-DLWIP_IPV6=1 -DLWIP_IPV4=1 -DENABLE_CLASSIC=1 -DENABLE_BLE=1 -D__LWIP_MEMMULT=2
adafruit_feather_rp2350_hstx.menu.boot2.boot2_w25q080_2_padded_checksum=W25Q080 QSPI /2
adafruit_feather_rp2350_hstx.menu.boot2.boot2_w25q080_2_padded_checksum.build.boot2=boot2_w25q080_2_padded_checksum
adafruit_feather_rp2350_hstx.menu.boot2.boot2_w25q080_4_padded_checksum=W25Q080 QSPI /4
adafruit_feather_rp2350_hstx.menu.boot2.boot2_w25q080_4_padded_checksum.build.boot2=boot2_w25q080_4_padded_checksum
adafruit_feather_rp2350_hstx.menu.uploadmethod.default=Default (UF2)
adafruit_feather_rp2350_hstx.menu.uploadmethod.default.build.ram_length=512k
adafruit_feather_rp2350_hstx.menu.uploadmethod.default.build.debugscript=picoprobe_cmsis_dap.tcl
@ -9060,10 +9069,6 @@ cytron_iriv_io_controller.build.usbvid=-DUSBD_VID=0x2e8a
cytron_iriv_io_controller.build.usbpid=-DUSBD_PID=0x1093
cytron_iriv_io_controller.build.usbpwr=-DUSBD_MAX_POWER_MA=250
cytron_iriv_io_controller.build.board=CYTRON_IRIV_IO_CONTROLLER
cytron_iriv_io_controller.build.chip=rp2350
cytron_iriv_io_controller.build.toolchain=arm-none-eabi
cytron_iriv_io_controller.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
cytron_iriv_io_controller.build.uf2family=--family rp2350-arm-s --abs-block
cytron_iriv_io_controller.build.variant=cytron_iriv_io_controller
cytron_iriv_io_controller.upload.maximum_size=2097152
cytron_iriv_io_controller.upload.wait_for_upload_port=true
@ -9074,7 +9079,7 @@ cytron_iriv_io_controller.build.f_cpu=125000000
cytron_iriv_io_controller.build.led=
cytron_iriv_io_controller.build.core=rp2040
cytron_iriv_io_controller.build.ldscript=memmap_default.ld
cytron_iriv_io_controller.build.boot2=boot2_w25q080_2_padded_checksum
cytron_iriv_io_controller.build.boot2=none
cytron_iriv_io_controller.build.usb_manufacturer="Cytron"
cytron_iriv_io_controller.build.usb_product="IRIV IO Controller"
cytron_iriv_io_controller.build.psram_length=0x000000
@ -9120,6 +9125,16 @@ cytron_iriv_io_controller.menu.flash.2097152_1048576.build.flash_length=1040384
cytron_iriv_io_controller.menu.flash.2097152_1048576.build.eeprom_start=270524416
cytron_iriv_io_controller.menu.flash.2097152_1048576.build.fs_start=269475840
cytron_iriv_io_controller.menu.flash.2097152_1048576.build.fs_end=270524416
cytron_iriv_io_controller.menu.arch.arm=ARM
cytron_iriv_io_controller.menu.arch.arm.build.chip=rp2350
cytron_iriv_io_controller.menu.arch.arm.build.toolchain=arm-none-eabi
cytron_iriv_io_controller.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
cytron_iriv_io_controller.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
cytron_iriv_io_controller.menu.arch.riscv=RISC-V
cytron_iriv_io_controller.menu.arch.riscv.build.chip=rp2350-riscv
cytron_iriv_io_controller.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
cytron_iriv_io_controller.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
cytron_iriv_io_controller.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
cytron_iriv_io_controller.menu.freq.150=150 MHz
cytron_iriv_io_controller.menu.freq.150.build.f_cpu=150000000L
cytron_iriv_io_controller.menu.freq.50=50 MHz
@ -9973,10 +9988,6 @@ cytron_motion_2350_pro.build.usbvid=-DUSBD_VID=0x2e8a
cytron_motion_2350_pro.build.usbpid=-DUSBD_PID=0x1096
cytron_motion_2350_pro.build.usbpwr=-DUSBD_MAX_POWER_MA=250
cytron_motion_2350_pro.build.board=CYTRON_MOTION_2350_PRO
cytron_motion_2350_pro.build.chip=rp2350
cytron_motion_2350_pro.build.toolchain=arm-none-eabi
cytron_motion_2350_pro.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
cytron_motion_2350_pro.build.uf2family=--family rp2350-arm-s --abs-block
cytron_motion_2350_pro.build.variant=cytron_motion_2350_pro
cytron_motion_2350_pro.upload.maximum_size=2097152
cytron_motion_2350_pro.upload.wait_for_upload_port=true
@ -9987,7 +9998,7 @@ cytron_motion_2350_pro.build.f_cpu=125000000
cytron_motion_2350_pro.build.led=
cytron_motion_2350_pro.build.core=rp2040
cytron_motion_2350_pro.build.ldscript=memmap_default.ld
cytron_motion_2350_pro.build.boot2=boot2_generic_03h_2_padded_checksum
cytron_motion_2350_pro.build.boot2=none
cytron_motion_2350_pro.build.usb_manufacturer="Cytron"
cytron_motion_2350_pro.build.usb_product="Motion 2350 Pro"
cytron_motion_2350_pro.build.psram_length=0x000000
@ -10033,6 +10044,16 @@ cytron_motion_2350_pro.menu.flash.2097152_1048576.build.flash_length=1040384
cytron_motion_2350_pro.menu.flash.2097152_1048576.build.eeprom_start=270524416
cytron_motion_2350_pro.menu.flash.2097152_1048576.build.fs_start=269475840
cytron_motion_2350_pro.menu.flash.2097152_1048576.build.fs_end=270524416
cytron_motion_2350_pro.menu.arch.arm=ARM
cytron_motion_2350_pro.menu.arch.arm.build.chip=rp2350
cytron_motion_2350_pro.menu.arch.arm.build.toolchain=arm-none-eabi
cytron_motion_2350_pro.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
cytron_motion_2350_pro.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
cytron_motion_2350_pro.menu.arch.riscv=RISC-V
cytron_motion_2350_pro.menu.arch.riscv.build.chip=rp2350-riscv
cytron_motion_2350_pro.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
cytron_motion_2350_pro.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
cytron_motion_2350_pro.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
cytron_motion_2350_pro.menu.freq.150=150 MHz
cytron_motion_2350_pro.menu.freq.150.build.f_cpu=150000000L
cytron_motion_2350_pro.menu.freq.50=50 MHz
@ -10430,10 +10451,6 @@ datanoisetv_picoadk_v2.build.usbvid=-DUSBD_VID=0x2e8a
datanoisetv_picoadk_v2.build.usbpid=-DUSBD_PID=0x10ae
datanoisetv_picoadk_v2.build.usbpwr=-DUSBD_MAX_POWER_MA=250
datanoisetv_picoadk_v2.build.board=DATANOISETV_PICOADK_V2
datanoisetv_picoadk_v2.build.chip=rp2350
datanoisetv_picoadk_v2.build.toolchain=arm-none-eabi
datanoisetv_picoadk_v2.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
datanoisetv_picoadk_v2.build.uf2family=--family rp2350-arm-s --abs-block
datanoisetv_picoadk_v2.build.variant=datanoisetv_picoadk_v2
datanoisetv_picoadk_v2.upload.maximum_size=4194304
datanoisetv_picoadk_v2.upload.wait_for_upload_port=true
@ -10444,7 +10461,7 @@ datanoisetv_picoadk_v2.build.f_cpu=125000000
datanoisetv_picoadk_v2.build.led=
datanoisetv_picoadk_v2.build.core=rp2040
datanoisetv_picoadk_v2.build.ldscript=memmap_default.ld
datanoisetv_picoadk_v2.build.boot2=boot2_w25q080_2_padded_checksum
datanoisetv_picoadk_v2.build.boot2=none
datanoisetv_picoadk_v2.build.usb_manufacturer="DatanoiseTV"
datanoisetv_picoadk_v2.build.usb_product="PicoADK v2"
datanoisetv_picoadk_v2.build.psram_length=0x000000
@ -10504,6 +10521,16 @@ datanoisetv_picoadk_v2.menu.flash.4194304_3145728.build.flash_length=1040384
datanoisetv_picoadk_v2.menu.flash.4194304_3145728.build.eeprom_start=272621568
datanoisetv_picoadk_v2.menu.flash.4194304_3145728.build.fs_start=269475840
datanoisetv_picoadk_v2.menu.flash.4194304_3145728.build.fs_end=272621568
datanoisetv_picoadk_v2.menu.arch.arm=ARM
datanoisetv_picoadk_v2.menu.arch.arm.build.chip=rp2350
datanoisetv_picoadk_v2.menu.arch.arm.build.toolchain=arm-none-eabi
datanoisetv_picoadk_v2.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
datanoisetv_picoadk_v2.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
datanoisetv_picoadk_v2.menu.arch.riscv=RISC-V
datanoisetv_picoadk_v2.menu.arch.riscv.build.chip=rp2350-riscv
datanoisetv_picoadk_v2.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
datanoisetv_picoadk_v2.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
datanoisetv_picoadk_v2.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
datanoisetv_picoadk_v2.menu.freq.150=150 MHz
datanoisetv_picoadk_v2.menu.freq.150.build.f_cpu=150000000L
datanoisetv_picoadk_v2.menu.freq.50=50 MHz
@ -16021,10 +16048,6 @@ challenger_2350_wifi6_ble5.build.usbvid=-DUSBD_VID=0x2e8a
challenger_2350_wifi6_ble5.build.usbpid=-DUSBD_PID=0x109a
challenger_2350_wifi6_ble5.build.usbpwr=-DUSBD_MAX_POWER_MA=500
challenger_2350_wifi6_ble5.build.board=CHALLENGER_2350_WIFI_BLE_RP2350
challenger_2350_wifi6_ble5.build.chip=rp2350
challenger_2350_wifi6_ble5.build.toolchain=arm-none-eabi
challenger_2350_wifi6_ble5.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
challenger_2350_wifi6_ble5.build.uf2family=--family rp2350-arm-s --abs-block
challenger_2350_wifi6_ble5.build.variant=challenger_2350_wifi6_ble5
challenger_2350_wifi6_ble5.upload.maximum_size=8388608
challenger_2350_wifi6_ble5.upload.wait_for_upload_port=true
@ -16035,7 +16058,7 @@ challenger_2350_wifi6_ble5.build.f_cpu=125000000
challenger_2350_wifi6_ble5.build.led=
challenger_2350_wifi6_ble5.build.core=rp2040
challenger_2350_wifi6_ble5.build.ldscript=memmap_default.ld
challenger_2350_wifi6_ble5.build.boot2=boot2_generic_03h_2_padded_checksum
challenger_2350_wifi6_ble5.build.boot2=none
challenger_2350_wifi6_ble5.build.usb_manufacturer="iLabs"
challenger_2350_wifi6_ble5.build.usb_product="Challenger 2350 WiFi/BLE"
challenger_2350_wifi6_ble5.build.psram_length=0x800000
@ -16224,6 +16247,16 @@ challenger_2350_wifi6_ble5.menu.flash.16777216_2097152.build.flash_length=146718
challenger_2350_wifi6_ble5.menu.flash.16777216_2097152.build.eeprom_start=285204480
challenger_2350_wifi6_ble5.menu.flash.16777216_2097152.build.fs_start=283107328
challenger_2350_wifi6_ble5.menu.flash.16777216_2097152.build.fs_end=285204480
challenger_2350_wifi6_ble5.menu.arch.arm=ARM
challenger_2350_wifi6_ble5.menu.arch.arm.build.chip=rp2350
challenger_2350_wifi6_ble5.menu.arch.arm.build.toolchain=arm-none-eabi
challenger_2350_wifi6_ble5.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
challenger_2350_wifi6_ble5.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
challenger_2350_wifi6_ble5.menu.arch.riscv=RISC-V
challenger_2350_wifi6_ble5.menu.arch.riscv.build.chip=rp2350-riscv
challenger_2350_wifi6_ble5.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
challenger_2350_wifi6_ble5.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
challenger_2350_wifi6_ble5.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
challenger_2350_wifi6_ble5.menu.freq.150=150 MHz
challenger_2350_wifi6_ble5.menu.freq.150.build.f_cpu=150000000L
challenger_2350_wifi6_ble5.menu.freq.50=50 MHz
@ -16393,10 +16426,6 @@ challenger_2350_bconnect.build.usbvid=-DUSBD_VID=0x2e8a
challenger_2350_bconnect.build.usbpid=-DUSBD_PID=0x109b
challenger_2350_bconnect.build.usbpwr=-DUSBD_MAX_POWER_MA=500
challenger_2350_bconnect.build.board=CHALLENGER_2350_BCONNECT_RP2350
challenger_2350_bconnect.build.chip=rp2350
challenger_2350_bconnect.build.toolchain=arm-none-eabi
challenger_2350_bconnect.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
challenger_2350_bconnect.build.uf2family=--family rp2350-arm-s --abs-block
challenger_2350_bconnect.build.variant=challenger_2350_bconnect
challenger_2350_bconnect.upload.maximum_size=8388608
challenger_2350_bconnect.upload.wait_for_upload_port=true
@ -16407,7 +16436,7 @@ challenger_2350_bconnect.build.f_cpu=125000000
challenger_2350_bconnect.build.led=
challenger_2350_bconnect.build.core=rp2040
challenger_2350_bconnect.build.ldscript=memmap_default.ld
challenger_2350_bconnect.build.boot2=boot2_generic_03h_2_padded_checksum
challenger_2350_bconnect.build.boot2=none
challenger_2350_bconnect.build.usb_manufacturer="iLabs"
challenger_2350_bconnect.build.usb_product="Challenger 2350 BConnect"
challenger_2350_bconnect.build.psram_length=0x800000
@ -16495,6 +16524,16 @@ challenger_2350_bconnect.menu.flash.8388608_7340032.build.flash_length=1040384
challenger_2350_bconnect.menu.flash.8388608_7340032.build.eeprom_start=276815872
challenger_2350_bconnect.menu.flash.8388608_7340032.build.fs_start=269475840
challenger_2350_bconnect.menu.flash.8388608_7340032.build.fs_end=276815872
challenger_2350_bconnect.menu.arch.arm=ARM
challenger_2350_bconnect.menu.arch.arm.build.chip=rp2350
challenger_2350_bconnect.menu.arch.arm.build.toolchain=arm-none-eabi
challenger_2350_bconnect.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
challenger_2350_bconnect.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
challenger_2350_bconnect.menu.arch.riscv=RISC-V
challenger_2350_bconnect.menu.arch.riscv.build.chip=rp2350-riscv
challenger_2350_bconnect.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
challenger_2350_bconnect.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
challenger_2350_bconnect.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
challenger_2350_bconnect.menu.freq.150=150 MHz
challenger_2350_bconnect.menu.freq.150.build.f_cpu=150000000L
challenger_2350_bconnect.menu.freq.50=50 MHz
@ -19071,10 +19110,6 @@ pimoroni_pga2350.build.usbvid=-DUSBD_VID=0x2e8a
pimoroni_pga2350.build.usbpid=-DUSBD_PID=0x1018
pimoroni_pga2350.build.usbpwr=-DUSBD_MAX_POWER_MA=250
pimoroni_pga2350.build.board=PIMORONI_PGA2350
pimoroni_pga2350.build.chip=rp2350
pimoroni_pga2350.build.toolchain=arm-none-eabi
pimoroni_pga2350.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
pimoroni_pga2350.build.uf2family=--family rp2350-arm-s --abs-block
pimoroni_pga2350.build.variant=pimoroni_pga2350
pimoroni_pga2350.upload.maximum_size=16777216
pimoroni_pga2350.upload.wait_for_upload_port=true
@ -19085,7 +19120,7 @@ pimoroni_pga2350.build.f_cpu=125000000
pimoroni_pga2350.build.led=
pimoroni_pga2350.build.core=rp2040
pimoroni_pga2350.build.ldscript=memmap_default.ld
pimoroni_pga2350.build.boot2=boot2_w25q080_4_padded_checksum
pimoroni_pga2350.build.boot2=none
pimoroni_pga2350.build.usb_manufacturer="Pimoroni"
pimoroni_pga2350.build.usb_product="PGA2350"
pimoroni_pga2350.build.psram_length=0x800000
@ -19229,6 +19264,16 @@ pimoroni_pga2350.menu.flash.16777216_15728640.build.flash_length=1040384
pimoroni_pga2350.menu.flash.16777216_15728640.build.eeprom_start=285204480
pimoroni_pga2350.menu.flash.16777216_15728640.build.fs_start=269475840
pimoroni_pga2350.menu.flash.16777216_15728640.build.fs_end=285204480
pimoroni_pga2350.menu.arch.arm=ARM
pimoroni_pga2350.menu.arch.arm.build.chip=rp2350
pimoroni_pga2350.menu.arch.arm.build.toolchain=arm-none-eabi
pimoroni_pga2350.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
pimoroni_pga2350.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
pimoroni_pga2350.menu.arch.riscv=RISC-V
pimoroni_pga2350.menu.arch.riscv.build.chip=rp2350-riscv
pimoroni_pga2350.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
pimoroni_pga2350.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
pimoroni_pga2350.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
pimoroni_pga2350.menu.freq.150=150 MHz
pimoroni_pga2350.menu.freq.150.build.f_cpu=150000000L
pimoroni_pga2350.menu.freq.50=50 MHz
@ -19398,10 +19443,6 @@ pimoroni_pico_plus_2.build.usbvid=-DUSBD_VID=0x2e8a
pimoroni_pico_plus_2.build.usbpid=-DUSBD_PID=0x100a
pimoroni_pico_plus_2.build.usbpwr=-DUSBD_MAX_POWER_MA=500
pimoroni_pico_plus_2.build.board=PIMORONI_PICO_PLUS_2
pimoroni_pico_plus_2.build.chip=rp2350
pimoroni_pico_plus_2.build.toolchain=arm-none-eabi
pimoroni_pico_plus_2.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
pimoroni_pico_plus_2.build.uf2family=--family rp2350-arm-s --abs-block
pimoroni_pico_plus_2.build.variant=pimoroni_pico_plus_2
pimoroni_pico_plus_2.upload.maximum_size=16777216
pimoroni_pico_plus_2.upload.wait_for_upload_port=true
@ -19412,7 +19453,7 @@ pimoroni_pico_plus_2.build.f_cpu=125000000
pimoroni_pico_plus_2.build.led=
pimoroni_pico_plus_2.build.core=rp2040
pimoroni_pico_plus_2.build.ldscript=memmap_default.ld
pimoroni_pico_plus_2.build.boot2=boot2_generic_03h_4_padded_checksum
pimoroni_pico_plus_2.build.boot2=none
pimoroni_pico_plus_2.build.usb_manufacturer="Pimoroni"
pimoroni_pico_plus_2.build.usb_product="PicoPlus2"
pimoroni_pico_plus_2.build.psram_length=0x800000
@ -19556,6 +19597,16 @@ pimoroni_pico_plus_2.menu.flash.16777216_15728640.build.flash_length=1040384
pimoroni_pico_plus_2.menu.flash.16777216_15728640.build.eeprom_start=285204480
pimoroni_pico_plus_2.menu.flash.16777216_15728640.build.fs_start=269475840
pimoroni_pico_plus_2.menu.flash.16777216_15728640.build.fs_end=285204480
pimoroni_pico_plus_2.menu.arch.arm=ARM
pimoroni_pico_plus_2.menu.arch.arm.build.chip=rp2350
pimoroni_pico_plus_2.menu.arch.arm.build.toolchain=arm-none-eabi
pimoroni_pico_plus_2.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
pimoroni_pico_plus_2.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
pimoroni_pico_plus_2.menu.arch.riscv=RISC-V
pimoroni_pico_plus_2.menu.arch.riscv.build.chip=rp2350-riscv
pimoroni_pico_plus_2.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
pimoroni_pico_plus_2.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
pimoroni_pico_plus_2.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
pimoroni_pico_plus_2.menu.freq.150=150 MHz
pimoroni_pico_plus_2.menu.freq.150.build.f_cpu=150000000L
pimoroni_pico_plus_2.menu.freq.50=50 MHz
@ -20209,10 +20260,6 @@ pimoroni_tiny2350.build.usbvid=-DUSBD_VID=0x2e8a
pimoroni_tiny2350.build.usbpid=-DUSBD_PID=0x100b
pimoroni_tiny2350.build.usbpwr=-DUSBD_MAX_POWER_MA=500
pimoroni_tiny2350.build.board=PIMORONI_TINY2350
pimoroni_tiny2350.build.chip=rp2350
pimoroni_tiny2350.build.toolchain=arm-none-eabi
pimoroni_tiny2350.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
pimoroni_tiny2350.build.uf2family=--family rp2350-arm-s --abs-block
pimoroni_tiny2350.build.variant=pimoroni_tiny2350
pimoroni_tiny2350.upload.maximum_size=4194304
pimoroni_tiny2350.upload.wait_for_upload_port=true
@ -20223,7 +20270,7 @@ pimoroni_tiny2350.build.f_cpu=125000000
pimoroni_tiny2350.build.led=
pimoroni_tiny2350.build.core=rp2040
pimoroni_tiny2350.build.ldscript=memmap_default.ld
pimoroni_tiny2350.build.boot2=boot2_w25q080_4_padded_checksum
pimoroni_tiny2350.build.boot2=none
pimoroni_tiny2350.build.usb_manufacturer="Pimoroni"
pimoroni_tiny2350.build.usb_product="Tiny2350"
pimoroni_tiny2350.build.psram_length=0x000000
@ -20283,6 +20330,16 @@ pimoroni_tiny2350.menu.flash.4194304_3145728.build.flash_length=1040384
pimoroni_tiny2350.menu.flash.4194304_3145728.build.eeprom_start=272621568
pimoroni_tiny2350.menu.flash.4194304_3145728.build.fs_start=269475840
pimoroni_tiny2350.menu.flash.4194304_3145728.build.fs_end=272621568
pimoroni_tiny2350.menu.arch.arm=ARM
pimoroni_tiny2350.menu.arch.arm.build.chip=rp2350
pimoroni_tiny2350.menu.arch.arm.build.toolchain=arm-none-eabi
pimoroni_tiny2350.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
pimoroni_tiny2350.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
pimoroni_tiny2350.menu.arch.riscv=RISC-V
pimoroni_tiny2350.menu.arch.riscv.build.chip=rp2350-riscv
pimoroni_tiny2350.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
pimoroni_tiny2350.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
pimoroni_tiny2350.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
pimoroni_tiny2350.menu.freq.150=150 MHz
pimoroni_tiny2350.menu.freq.150.build.f_cpu=150000000L
pimoroni_tiny2350.menu.freq.50=50 MHz
@ -22200,10 +22257,6 @@ solderparty_rp2350_stamp.build.usbvid=-DUSBD_VID=0x1209
solderparty_rp2350_stamp.build.usbpid=-DUSBD_PID=0xa183
solderparty_rp2350_stamp.build.usbpwr=-DUSBD_MAX_POWER_MA=500
solderparty_rp2350_stamp.build.board=SOLDERPARTY_RP2350_STAMP
solderparty_rp2350_stamp.build.chip=rp2350
solderparty_rp2350_stamp.build.toolchain=arm-none-eabi
solderparty_rp2350_stamp.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
solderparty_rp2350_stamp.build.uf2family=--family rp2350-arm-s --abs-block
solderparty_rp2350_stamp.build.variant=solderparty_rp2350_stamp
solderparty_rp2350_stamp.upload.maximum_size=16777216
solderparty_rp2350_stamp.upload.wait_for_upload_port=true
@ -22214,7 +22267,7 @@ solderparty_rp2350_stamp.build.f_cpu=125000000
solderparty_rp2350_stamp.build.led=
solderparty_rp2350_stamp.build.core=rp2040
solderparty_rp2350_stamp.build.ldscript=memmap_default.ld
solderparty_rp2350_stamp.build.boot2=boot2_generic_03h_2_padded_checksum
solderparty_rp2350_stamp.build.boot2=none
solderparty_rp2350_stamp.build.usb_manufacturer="Solder Party"
solderparty_rp2350_stamp.build.usb_product="RP2350 Stamp"
solderparty_rp2350_stamp.build.psram_length=0x000000
@ -22358,6 +22411,16 @@ solderparty_rp2350_stamp.menu.flash.16777216_15728640.build.flash_length=1040384
solderparty_rp2350_stamp.menu.flash.16777216_15728640.build.eeprom_start=285204480
solderparty_rp2350_stamp.menu.flash.16777216_15728640.build.fs_start=269475840
solderparty_rp2350_stamp.menu.flash.16777216_15728640.build.fs_end=285204480
solderparty_rp2350_stamp.menu.arch.arm=ARM
solderparty_rp2350_stamp.menu.arch.arm.build.chip=rp2350
solderparty_rp2350_stamp.menu.arch.arm.build.toolchain=arm-none-eabi
solderparty_rp2350_stamp.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
solderparty_rp2350_stamp.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
solderparty_rp2350_stamp.menu.arch.riscv=RISC-V
solderparty_rp2350_stamp.menu.arch.riscv.build.chip=rp2350-riscv
solderparty_rp2350_stamp.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
solderparty_rp2350_stamp.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
solderparty_rp2350_stamp.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
solderparty_rp2350_stamp.menu.freq.150=150 MHz
solderparty_rp2350_stamp.menu.freq.150.build.f_cpu=150000000L
solderparty_rp2350_stamp.menu.freq.50=50 MHz
@ -22503,10 +22566,6 @@ solderparty_rp2350_stamp_xl.build.usbvid=-DUSBD_VID=0x1209
solderparty_rp2350_stamp_xl.build.usbpid=-DUSBD_PID=0xa184
solderparty_rp2350_stamp_xl.build.usbpwr=-DUSBD_MAX_POWER_MA=500
solderparty_rp2350_stamp_xl.build.board=SOLDERPARTY_RP2350_STAMP_XL
solderparty_rp2350_stamp_xl.build.chip=rp2350
solderparty_rp2350_stamp_xl.build.toolchain=arm-none-eabi
solderparty_rp2350_stamp_xl.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
solderparty_rp2350_stamp_xl.build.uf2family=--family rp2350-arm-s --abs-block
solderparty_rp2350_stamp_xl.build.variant=solderparty_rp2350_stamp_xl
solderparty_rp2350_stamp_xl.upload.maximum_size=16777216
solderparty_rp2350_stamp_xl.upload.wait_for_upload_port=true
@ -22517,7 +22576,7 @@ solderparty_rp2350_stamp_xl.build.f_cpu=125000000
solderparty_rp2350_stamp_xl.build.led=
solderparty_rp2350_stamp_xl.build.core=rp2040
solderparty_rp2350_stamp_xl.build.ldscript=memmap_default.ld
solderparty_rp2350_stamp_xl.build.boot2=boot2_generic_03h_2_padded_checksum
solderparty_rp2350_stamp_xl.build.boot2=none
solderparty_rp2350_stamp_xl.build.usb_manufacturer="Solder Party"
solderparty_rp2350_stamp_xl.build.usb_product="RP2350 Stamp XL"
solderparty_rp2350_stamp_xl.build.psram_length=0x000000
@ -22661,6 +22720,16 @@ solderparty_rp2350_stamp_xl.menu.flash.16777216_15728640.build.flash_length=1040
solderparty_rp2350_stamp_xl.menu.flash.16777216_15728640.build.eeprom_start=285204480
solderparty_rp2350_stamp_xl.menu.flash.16777216_15728640.build.fs_start=269475840
solderparty_rp2350_stamp_xl.menu.flash.16777216_15728640.build.fs_end=285204480
solderparty_rp2350_stamp_xl.menu.arch.arm=ARM
solderparty_rp2350_stamp_xl.menu.arch.arm.build.chip=rp2350
solderparty_rp2350_stamp_xl.menu.arch.arm.build.toolchain=arm-none-eabi
solderparty_rp2350_stamp_xl.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
solderparty_rp2350_stamp_xl.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
solderparty_rp2350_stamp_xl.menu.arch.riscv=RISC-V
solderparty_rp2350_stamp_xl.menu.arch.riscv.build.chip=rp2350-riscv
solderparty_rp2350_stamp_xl.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
solderparty_rp2350_stamp_xl.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
solderparty_rp2350_stamp_xl.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
solderparty_rp2350_stamp_xl.menu.freq.150=150 MHz
solderparty_rp2350_stamp_xl.menu.freq.150.build.f_cpu=150000000L
solderparty_rp2350_stamp_xl.menu.freq.50=50 MHz
@ -23482,10 +23551,6 @@ sparkfun_promicrorp2350.build.usbvid=-DUSBD_VID=0x1b4f
sparkfun_promicrorp2350.build.usbpid=-DUSBD_PID=0x0026
sparkfun_promicrorp2350.build.usbpwr=-DUSBD_MAX_POWER_MA=250
sparkfun_promicrorp2350.build.board=SPARKFUN_PROMICRO_RP2350
sparkfun_promicrorp2350.build.chip=rp2350
sparkfun_promicrorp2350.build.toolchain=arm-none-eabi
sparkfun_promicrorp2350.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
sparkfun_promicrorp2350.build.uf2family=--family rp2350-arm-s --abs-block
sparkfun_promicrorp2350.build.variant=sparkfun_promicrorp2350
sparkfun_promicrorp2350.upload.maximum_size=16777216
sparkfun_promicrorp2350.upload.wait_for_upload_port=true
@ -23496,7 +23561,7 @@ sparkfun_promicrorp2350.build.f_cpu=125000000
sparkfun_promicrorp2350.build.led=
sparkfun_promicrorp2350.build.core=rp2040
sparkfun_promicrorp2350.build.ldscript=memmap_default.ld
sparkfun_promicrorp2350.build.boot2=boot2_w25q080_2_padded_checksum
sparkfun_promicrorp2350.build.boot2=none
sparkfun_promicrorp2350.build.usb_manufacturer="SparkFun"
sparkfun_promicrorp2350.build.usb_product="ProMicro RP2350"
sparkfun_promicrorp2350.build.psram_length=0x800000
@ -23640,6 +23705,16 @@ sparkfun_promicrorp2350.menu.flash.16777216_15728640.build.flash_length=1040384
sparkfun_promicrorp2350.menu.flash.16777216_15728640.build.eeprom_start=285204480
sparkfun_promicrorp2350.menu.flash.16777216_15728640.build.fs_start=269475840
sparkfun_promicrorp2350.menu.flash.16777216_15728640.build.fs_end=285204480
sparkfun_promicrorp2350.menu.arch.arm=ARM
sparkfun_promicrorp2350.menu.arch.arm.build.chip=rp2350
sparkfun_promicrorp2350.menu.arch.arm.build.toolchain=arm-none-eabi
sparkfun_promicrorp2350.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
sparkfun_promicrorp2350.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
sparkfun_promicrorp2350.menu.arch.riscv=RISC-V
sparkfun_promicrorp2350.menu.arch.riscv.build.chip=rp2350-riscv
sparkfun_promicrorp2350.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
sparkfun_promicrorp2350.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
sparkfun_promicrorp2350.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
sparkfun_promicrorp2350.menu.freq.150=150 MHz
sparkfun_promicrorp2350.menu.freq.150.build.f_cpu=150000000L
sparkfun_promicrorp2350.menu.freq.50=50 MHz
@ -28375,10 +28450,6 @@ generic_rp2350.build.usbvid=-DUSBD_VID=0x2e8a
generic_rp2350.build.usbpid=-DUSBD_PID=0xf00f
generic_rp2350.build.usbpwr=-DUSBD_MAX_POWER_MA=250
generic_rp2350.build.board=GENERIC_RP2350
generic_rp2350.build.chip=rp2350
generic_rp2350.build.toolchain=arm-none-eabi
generic_rp2350.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
generic_rp2350.build.uf2family=--family rp2350-arm-s --abs-block
generic_rp2350.build.variant=generic_rp2350
generic_rp2350.upload.maximum_size=16777216
generic_rp2350.upload.wait_for_upload_port=true
@ -28389,7 +28460,7 @@ generic_rp2350.build.f_cpu=125000000
generic_rp2350.build.led=
generic_rp2350.build.core=rp2040
generic_rp2350.build.ldscript=memmap_default.ld
generic_rp2350.build.boot2=boot2_generic_03h_4_padded_checksum
generic_rp2350.build.boot2=none
generic_rp2350.build.usb_manufacturer="Generic"
generic_rp2350.build.usb_product="RP2350"
generic_rp2350.menu.flash.2097152_0=2MB (no FS)
@ -28504,6 +28575,16 @@ generic_rp2350.menu.flash.16777216_2097152.build.flash_length=14671872
generic_rp2350.menu.flash.16777216_2097152.build.eeprom_start=285204480
generic_rp2350.menu.flash.16777216_2097152.build.fs_start=283107328
generic_rp2350.menu.flash.16777216_2097152.build.fs_end=285204480
generic_rp2350.menu.arch.arm=ARM
generic_rp2350.menu.arch.arm.build.chip=rp2350
generic_rp2350.menu.arch.arm.build.toolchain=arm-none-eabi
generic_rp2350.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
generic_rp2350.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
generic_rp2350.menu.arch.riscv=RISC-V
generic_rp2350.menu.arch.riscv.build.chip=rp2350-riscv
generic_rp2350.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
generic_rp2350.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
generic_rp2350.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
generic_rp2350.menu.freq.150=150 MHz
generic_rp2350.menu.freq.150.build.f_cpu=150000000L
generic_rp2350.menu.freq.50=50 MHz

View file

@ -0,0 +1,4 @@
.section .boot2, "ax"
.global __boot2_entry_point
__boot2_entry_point:

View file

@ -1,25 +0,0 @@
// Padded and checksummed version of: boot2_generic_03h.2.bin
.cpu cortex-m0plus
.thumb
.section .boot2, "ax"
.global __boot2_entry_point
__boot2_entry_point:
.byte 0x00, 0xb5, 0x05, 0x4b, 0x05, 0x48, 0xd8, 0x60, 0x4f, 0xf0, 0x03, 0x00, 0x58, 0x61, 0x4f, 0xf4
.byte 0x80, 0x50, 0x18, 0x61, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x40, 0x02, 0x01, 0x00, 0x40
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

View file

@ -1,25 +0,0 @@
// Padded and checksummed version of: boot2_generic_03h.4.bin
.cpu cortex-m0plus
.thumb
.section .boot2, "ax"
.global __boot2_entry_point
__boot2_entry_point:
.byte 0x00, 0xb5, 0x05, 0x4b, 0x05, 0x48, 0xd8, 0x60, 0x4f, 0xf0, 0x03, 0x00, 0x58, 0x61, 0x4f, 0xf4
.byte 0x80, 0x50, 0x18, 0x61, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x40, 0x04, 0x01, 0x00, 0x40
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

View file

@ -1,25 +0,0 @@
// Padded and checksummed version of: boot2_w25q080.2.bin
.cpu cortex-m0plus
.thumb
.section .boot2, "ax"
.global __boot2_entry_point
__boot2_entry_point:
.byte 0x00, 0xb5, 0x24, 0x4b, 0x21, 0x20, 0x58, 0x60, 0x13, 0xf5, 0x40, 0x53, 0x02, 0x20, 0x98, 0x60
.byte 0xd8, 0x60, 0x18, 0x61, 0x58, 0x61, 0x13, 0xf5, 0x0d, 0x23, 0x1f, 0x49, 0x19, 0x60, 0x18, 0x68
.byte 0x10, 0xf0, 0x02, 0x0f, 0xfb, 0xd1, 0x35, 0x20, 0x00, 0xf0, 0x2c, 0xf8, 0x02, 0x28, 0x14, 0xd0
.byte 0x06, 0x20, 0x58, 0x60, 0x00, 0xf0, 0x22, 0xf8, 0x98, 0x68, 0x01, 0x20, 0x58, 0x60, 0x00, 0x20
.byte 0x58, 0x60, 0x02, 0x20, 0x58, 0x60, 0x00, 0xf0, 0x19, 0xf8, 0x98, 0x68, 0x98, 0x68, 0x98, 0x68
.byte 0x05, 0x20, 0x00, 0xf0, 0x17, 0xf8, 0x40, 0x08, 0xfa, 0xd2, 0x31, 0xf0, 0x01, 0x01, 0x19, 0x60
.byte 0x0e, 0x48, 0xd8, 0x60, 0x4a, 0xf2, 0xeb, 0x00, 0x58, 0x61, 0x0d, 0x48, 0x18, 0x61, 0x4f, 0xf0
.byte 0xa0, 0x51, 0x09, 0x78, 0x20, 0xf4, 0x80, 0x50, 0x18, 0x61, 0x00, 0xbd, 0x18, 0x68, 0x80, 0x08
.byte 0xfc, 0xd2, 0x70, 0x47, 0x00, 0xb5, 0x58, 0x60, 0x58, 0x60, 0xff, 0xf7, 0xf7, 0xff, 0x98, 0x68
.byte 0x98, 0x68, 0x00, 0xbd, 0x00, 0x00, 0x04, 0x40, 0x41, 0x00, 0x80, 0x07, 0x02, 0x02, 0x00, 0x40
.byte 0xa8, 0x92, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

View file

@ -1,25 +0,0 @@
// Padded and checksummed version of: boot2_w25q080.4.bin
.cpu cortex-m0plus
.thumb
.section .boot2, "ax"
.global __boot2_entry_point
__boot2_entry_point:
.byte 0x00, 0xb5, 0x24, 0x4b, 0x21, 0x20, 0x58, 0x60, 0x13, 0xf5, 0x40, 0x53, 0x02, 0x20, 0x98, 0x60
.byte 0xd8, 0x60, 0x18, 0x61, 0x58, 0x61, 0x13, 0xf5, 0x0d, 0x23, 0x1f, 0x49, 0x19, 0x60, 0x18, 0x68
.byte 0x10, 0xf0, 0x02, 0x0f, 0xfb, 0xd1, 0x35, 0x20, 0x00, 0xf0, 0x2c, 0xf8, 0x02, 0x28, 0x14, 0xd0
.byte 0x06, 0x20, 0x58, 0x60, 0x00, 0xf0, 0x22, 0xf8, 0x98, 0x68, 0x01, 0x20, 0x58, 0x60, 0x00, 0x20
.byte 0x58, 0x60, 0x02, 0x20, 0x58, 0x60, 0x00, 0xf0, 0x19, 0xf8, 0x98, 0x68, 0x98, 0x68, 0x98, 0x68
.byte 0x05, 0x20, 0x00, 0xf0, 0x17, 0xf8, 0x40, 0x08, 0xfa, 0xd2, 0x31, 0xf0, 0x01, 0x01, 0x19, 0x60
.byte 0x0e, 0x48, 0xd8, 0x60, 0x4a, 0xf2, 0xeb, 0x00, 0x58, 0x61, 0x0d, 0x48, 0x18, 0x61, 0x4f, 0xf0
.byte 0xa0, 0x51, 0x09, 0x78, 0x20, 0xf4, 0x80, 0x50, 0x18, 0x61, 0x00, 0xbd, 0x18, 0x68, 0x80, 0x08
.byte 0xfc, 0xd2, 0x70, 0x47, 0x00, 0xb5, 0x58, 0x60, 0x58, 0x60, 0xff, 0xf7, 0xf7, 0xff, 0x98, 0x68
.byte 0x98, 0x68, 0x00, 0xbd, 0x00, 0x00, 0x04, 0x40, 0x41, 0x00, 0x80, 0x07, 0x04, 0x02, 0x00, 0x40
.byte 0xa8, 0x92, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

4
boot2/rp2350/none.S Normal file
View file

@ -0,0 +1,4 @@
.section .boot2, "ax"
.global __boot2_entry_point
__boot2_entry_point:

View file

@ -37,7 +37,7 @@
#ifdef abs
#undef abs
#endif // abs
#ifdef __cplusplus
#if defined(__cplusplus) && !defined(__riscv)
using std::abs;
using std::round;
#else

View file

@ -175,18 +175,22 @@ public:
void begin() {
_epoch = 0;
#if !defined(__riscv)
if (!__isFreeRTOS) {
// Enable SYSTICK exception
exception_set_exclusive_handler(SYSTICK_EXCEPTION, _SystickHandler);
systick_hw->csr = 0x7;
systick_hw->rvr = 0x00FFFFFF;
} else {
#endif
int off = 0;
_ccountPgm = new PIOProgram(&ccount_program);
_ccountPgm->prepare(&_pio, &_sm, &off);
ccount_program_init(_pio, _sm, off);
pio_sm_set_enabled(_pio, _sm, true);
#if !defined(__riscv)
}
#endif
}
// Convert from microseconds to PIO clock cycles
@ -208,6 +212,7 @@ public:
// Get CPU cycle count. Needs to do magic to extens 24b HW to something longer
volatile uint64_t _epoch = 0;
inline uint32_t getCycleCount() {
#if !defined(__riscv)
if (!__isFreeRTOS) {
uint32_t epoch;
uint32_t ctr;
@ -217,11 +222,15 @@ public:
} while (epoch != (uint32_t)_epoch);
return epoch + (1 << 24) - ctr; /* CTR counts down from 1<<24-1 */
} else {
#endif
return ccount_read(_pio, _sm);
#if !defined(__riscv)
}
#endif
}
inline uint64_t getCycleCount64() {
#if !defined(__riscv)
if (!__isFreeRTOS) {
uint64_t epoch;
uint64_t ctr;
@ -231,8 +240,11 @@ public:
} while (epoch != _epoch);
return epoch + (1LL << 24) - ctr;
} else {
#endif
return ccount_read(_pio, _sm);
#if !defined(__riscv)
}
#endif
}
inline int getFreeHeap() {

View file

@ -31,7 +31,7 @@ typedef struct {
static FMMap *_map = nullptr;
SemaphoreHandle_t __get_freertos_mutex_for_ptr(mutex_t *m, bool recursive) {
if (!_map) {
_map = (FMMap *)calloc(sizeof(FMMap), 16);
_map = (FMMap *)calloc(16, sizeof(FMMap));
}
// Pre-existing map
for (int i = 0; i < 16; i++) {

View file

@ -99,7 +99,7 @@ static SemaphoreHandle_t __getFreeRTOSRecursiveMutex(_LOCK_T lock) {
return __get_freertos_mutex_for_ptr((mutex_t *)l, true);
}
void __retarget_lock_init(_LOCK_T *lock) {
void __retarget_lock_init(_LOCK_T lock) {
if (__freeRTOSinitted) {
mutex_t *l = (mutex_t *)lock;
if ((l == &__lock___at_quick_exit_mutex) || (l == &__lock___tz_mutex) || (l == &__lock___dd_hash_mutex) || (l == &__lock___arc4random_mutex)) {
@ -113,7 +113,7 @@ void __retarget_lock_init(_LOCK_T *lock) {
}
}
void __retarget_lock_init_recursive(_LOCK_T *lock) {
void __retarget_lock_init_recursive(_LOCK_T lock) {
if (__freeRTOSinitted) {
recursive_mutex_t *l = (recursive_mutex_t *)lock;
if ((l == &__lock___sinit_recursive_mutex) || (l == &__lock___sfp_recursive_mutex) || (l == &__lock___atexit_recursive_mutex) || (l == &__lock___malloc_recursive_mutex) || (l == &__lock___env_recursive_mutex)) {

View file

@ -88,7 +88,7 @@ extern "C" int main() {
// Allocate impure_ptr (newlib temps) if there is a 2nd core running
if (!__isFreeRTOS && (setup1 || loop1)) {
_impure_ptr1 = (struct _reent*)calloc(sizeof(struct _reent), 1);
_impure_ptr1 = (struct _reent*)calloc(1, sizeof(struct _reent));
_REENT_INIT_PTR(_impure_ptr1);
}
@ -134,7 +134,6 @@ extern "C" int main() {
}
rp2040.fifo.registerCore();
}
if (!__isFreeRTOS) {
if (setup1 || loop1) {
delay(1); // Needed to make Picoprobe upload start 2nd core

View file

@ -7,7 +7,7 @@ RP2040 (Raspberry Pi Pico processor) and RP2350 (Raspberry Pi Pico 2
processor), intended to make it easier and more fun to use and
program the Raspberry Pi Pico / RP2040 / RP2350 based boards.
This Arduino core uses a custom toolset with GCC 12.3 and Newlib 4.0.0
This Arduino core uses a custom toolset with GCC 14.2 and Newlib 4.3
and doesn't require any system-installed prerequisites.
For the latest version, always check https://github.com/earlephilhower/arduino-pico

View file

@ -309,6 +309,19 @@ local copy of the core (with e.g. some modifications) on disk (`see documentatio
Note that this can only be done for versions that have the PlatformIO
builder script it in, so versions before 1.9.2 are not supported.
Selecting the CPU architecture
------------------------------
By default Platform.IO will build for the onboard ARM cores on the RP2350. To build RISC-V binaries
adjust the ``board_build.mcu`` option accordingly:
.. code:: ini
; RP2350 based (RISC-V)
[env:rpipico2-riscv]
board = rpipico2
board_build.mcu = rp2350-riscv
Examples
--------

View file

@ -6,7 +6,14 @@ is supported by the core with some minor caveats:
* PSRAM is supported via a new ``pmalloc`` call and ``PSRAM`` variable decorator.
* Both RP2350A and RP2350B (48 GPIOs) are supported.
* Only ARM mode is available. For RISC-V (Hazard3), please use the raw SDK.
ARM and RISC-V Modes
~~~~~~~~~~~~~~~~~~~~
Either set of cores can be used on the RP2350, ARM Cortex-M33 or RISC-V Hazard3.
Select the desired core from the IDE menus under ``Tools->CPU Architecture``.
As of the initial release, all libraries should work under the new RISC-V mode with
the exception of FreeRTOS. If not, patches are always welcome.
P2350-E9 Errata ("Increased leakage current on Bank 0 GPIO when pad input is enabled")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View file

@ -1,2 +1,2 @@
// Do not edit -- Automatically generated by tools/sdk/ssl/bearssl/Makefile
#define BEARSSL_GIT c2c9d9d
#define BEARSSL_GIT 5b7f3d5

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
lib/rp2350-riscv/libipv4.a Normal file

Binary file not shown.

BIN
lib/rp2350-riscv/libpico.a Normal file

Binary file not shown.

View file

@ -0,0 +1,336 @@
/* Based on GCC ARM embedded samples.
Defines the following symbols for use by code:
__exidx_start
__exidx_end
__etext
__data_start__
__preinit_array_start
__preinit_array_end
__init_array_start
__init_array_end
__fini_array_start
__fini_array_end
__data_end__
__bss_start__
__bss_end__
__end__
end
__HeapLimit
__StackLimit
__StackTop
__stack (== StackTop)
*/
MEMORY
{
FLASH(rx) : ORIGIN = 0x10000000, LENGTH = __FLASH_LENGTH__
PSRAM(rwx) : ORIGIN = 0x11000000, LENGTH = __PSRAM_LENGTH__
RAM(rwx) : ORIGIN = 0x20000000, LENGTH = __RAM_LENGTH__
SCRATCH_X(rwx) : ORIGIN = 0x20080000, LENGTH = 4k
SCRATCH_Y(rwx) : ORIGIN = 0x20081000, LENGTH = 4k
}
PROVIDE ( _EEPROM_start = __EEPROM_START__ );
PROVIDE ( _FS_start = __FS_START__ );
PROVIDE ( _FS_end = __FS_END__ );
ENTRY(_entry_point)
SECTIONS
{
.flash_begin : {
__flash_binary_start = .;
} > FLASH
.ota : {
/* Start image with OTA */
KEEP (*(.OTA))
*ota.o
} > FLASH
.partition : {
. = __flash_binary_start + 0x2ff0;
LONG(__FS_START__)
LONG(__FS_END__)
LONG(__EEPROM_START__)
LONG(__FLASH_LENGTH__)
} > FLASH
/* The bootrom will enter the image at the point indicated in your
IMAGE_DEF, which is usually the reset handler of your vector table.
The debugger will use the ELF entry point, which is the _entry_point
symbol, and in our case is *different from the bootrom's entry point.*
This is used to go back through the bootrom on debugger launches only,
to perform the same initial flash setup that would be performed on a
cold boot.
*/
.text : {
KEEP (*(.vectors))
__logical_binary_start = .;
KEEP (*(.binary_info_header))
__binary_info_header_end = .;
KEEP (*(.embedded_block))
__embedded_block_end = .;
KEEP (*(.reset))
/* TODO revisit this now memset/memcpy/float in ROM */
/* bit of a hack right now to exclude all floating point and time critical (e.g. memset, memcpy) code from
* FLASH ... we will include any thing excluded here in .data below by default */
*(.init)
*libgcc.a:cmse_nonsecure_call.o
*(EXCLUDE_FILE(*libgcc.a: *libc.a:*lib_a-mem*.o *libm.a:) .text*)
*(.fini)
/* Pull all c'tors into .text */
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
*(SORT(.ctors.*))
*(.ctors)
/* Followed by destructors */
*crtbegin.o(.dtors)
*crtbegin?.o(.dtors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
*(SORT(.dtors.*))
*(.dtors)
. = ALIGN(4);
/* preinit data */
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP(*(SORT(.preinit_array.*)))
KEEP(*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
. = ALIGN(4);
/* init data */
PROVIDE_HIDDEN (__init_array_start = .);
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
PROVIDE_HIDDEN (__init_array_end = .);
. = ALIGN(4);
/* finit data */
PROVIDE_HIDDEN (__fini_array_start = .);
*(SORT(.fini_array.*))
*(.fini_array)
PROVIDE_HIDDEN (__fini_array_end = .);
*(.eh_frame*)
. = ALIGN(4);
} > FLASH
/* Note the boot2 section is optional, and should be discarded if there is
no reference to it *inside* the binary, as it is not called by the
bootrom. (The bootrom performs a simple best-effort XIP setup and
leaves it to the binary to do anything more sophisticated.) However
there is still a size limit of 256 bytes, to ensure the boot2 can be
stored in boot RAM.
Really this is a "XIP setup function" -- the name boot2 is historic and
refers to its dual-purpose on RP2040, where it also handled vectoring
from the bootrom into the user image.
*/
/*
.boot2 : {
__boot2_start__ = .;
*(.boot2)
__boot2_end__ = .;
} > FLASH
ASSERT(__boot2_end__ - __boot2_start__ <= 256,
"ERROR: Pico second stage bootloader must be no more than 256 bytes in size")
*/
.rodata : {
*(EXCLUDE_FILE(*libgcc.a: *libc.a:*lib_a-mem*.o *libm.a:) .rodata*)
*(.srodata*)
. = ALIGN(4);
*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.flashdata*)))
. = ALIGN(4);
} > FLASH
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > FLASH
__exidx_end = .;
/* Machine inspectable binary information */
. = ALIGN(4);
__binary_info_start = .;
.binary_info :
{
KEEP(*(.binary_info.keep.*))
*(.binary_info.*)
} > FLASH
__binary_info_end = .;
. = ALIGN(4);
.ram_vector_table (NOLOAD): {
*(.ram_vector_table)
} > RAM
.uninitialized_data (NOLOAD): {
. = ALIGN(4);
*(.uninitialized_data*)
} > RAM
.data : {
__data_start__ = .;
*(vtable)
*(.time_critical*)
/* remaining .text and .rodata; i.e. stuff we exclude above because we want it in RAM */
*(.text*)
. = ALIGN(4);
*(.rodata*)
. = ALIGN(4);
*(.data*)
*(.sdata*)
. = ALIGN(4);
*(.after_data.*)
. = ALIGN(4);
/* preinit data */
PROVIDE_HIDDEN (__mutex_array_start = .);
KEEP(*(SORT(.mutex_array.*)))
KEEP(*(.mutex_array))
PROVIDE_HIDDEN (__mutex_array_end = .);
*(.jcr)
. = ALIGN(4);
} > RAM AT> FLASH
.tdata : {
. = ALIGN(4);
*(.tdata .tdata.* .gnu.linkonce.td.*)
/* All data end */
__tdata_end = .;
} > RAM AT> FLASH
PROVIDE(__data_end__ = .);
/* __etext is (for backwards compatibility) the name of the .data init source pointer (...) */
__etext = LOADADDR(.data);
.tbss (NOLOAD) : {
. = ALIGN(4);
__bss_start__ = .;
__tls_base = .;
*(.tbss .tbss.* .gnu.linkonce.tb.*)
*(.tcommon)
__tls_end = .;
} > RAM
.bss (NOLOAD) : {
. = ALIGN(4);
__tbss_end = .;
*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*)))
*(COMMON)
PROVIDE(__global_pointer$ = . + 2K);
*(.sbss*)
. = ALIGN(4);
__bss_end__ = .;
} > RAM
.heap (NOLOAD):
{
__end__ = .;
end = __end__;
KEEP(*(.heap*))
/* historically on GCC sbrk was growing past __HeapLimit to __StackLimit, however
to be more compatible, we now set __HeapLimit explicitly to where the end of the heap is */
. = ORIGIN(RAM) + LENGTH(RAM);
__HeapLimit = .;
} > RAM
/* Start and end symbols must be word-aligned */
.scratch_x : {
__scratch_x_start__ = .;
*(.scratch_x.*)
. = ALIGN(4);
__scratch_x_end__ = .;
} > SCRATCH_X AT > FLASH
__scratch_x_source__ = LOADADDR(.scratch_x);
.scratch_y : {
__scratch_y_start__ = .;
*(.scratch_y.*)
. = ALIGN(4);
__scratch_y_end__ = .;
} > SCRATCH_Y AT > FLASH
__scratch_y_source__ = LOADADDR(.scratch_y);
/* .stack*_dummy section doesn't contains any symbols. It is only
* used for linker to calculate size of stack sections, and assign
* values to stack symbols later
*
* stack1 section may be empty/missing if platform_launch_core1 is not used */
/* by default we put core 0 stack at the end of scratch Y, so that if core 1
* stack is not used then all of SCRATCH_X is free.
*/
.stack1_dummy (NOLOAD):
{
*(.stack1*)
} > SCRATCH_X
.stack_dummy (NOLOAD):
{
KEEP(*(.stack*))
} > SCRATCH_Y
.flash_end : {
KEEP(*(.embedded_end_block*))
PROVIDE(__flash_binary_end = .);
} > FLASH = 0xaa
.psram (NOLOAD) : {
__psram_start__ = .;
*(.psram*)
. = ALIGN(4096);
__psram_heap_start__ = .;
} > PSRAM
/* stack limit is poorly named, but historically is maximum heap ptr */
__StackLimit = ORIGIN(RAM) + LENGTH(RAM);
__StackOneTop = ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X);
__StackTop = ORIGIN(SCRATCH_Y) + LENGTH(SCRATCH_Y);
__StackOneBottom = __StackOneTop - SIZEOF(.stack1_dummy);
__StackBottom = __StackTop - SIZEOF(.stack_dummy);
PROVIDE(__stack = __StackTop);
/* picolibc and LLVM */
PROVIDE (__heap_start = __end__);
PROVIDE (__heap_end = __HeapLimit);
PROVIDE( __tls_align = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)) );
PROVIDE( __tls_size_align = (__tls_size + __tls_align - 1) & ~(__tls_align - 1));
PROVIDE( __arm32_tls_tcb_offset = MAX(8, __tls_align) );
/* TLSF */
PROVIDE (__psram_start = __psram_start__);
PROVIDE (__psram_heap_start = __psram_heap_start__);
/* llvm-libc */
PROVIDE (_end = __end__);
PROVIDE (__llvm_libc_heap_limit = __HeapLimit);
/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed")
ASSERT( __binary_info_header_end - __logical_binary_start <= 1024, "Binary info must be in first 1024 bytes of the binary")
ASSERT( __embedded_block_end - __logical_binary_start <= 4096, "Embedded block must be in first 4096 bytes of the binary")
/* todo assert on extra code */
}

BIN
lib/rp2350-riscv/ota.o Normal file

Binary file not shown.

View file

@ -0,0 +1,53 @@
-DCFG_TUSB_MCU=OPT_MCU_RP2040
-DCFG_TUSB_OS=OPT_OS_PICO
-DLIB_BOOT_STAGE2_HEADERS=1
-DLIB_PICO_ATOMIC=1
-DLIB_PICO_BIT_OPS=1
-DLIB_PICO_BIT_OPS_PICO=1
-DLIB_PICO_CLIB_INTERFACE=1
-DLIB_PICO_CRT0=1
-DLIB_PICO_CXX_OPTIONS=1
-DLIB_PICO_DIVIDER=1
-DLIB_PICO_DIVIDER_COMPILER=1
-DLIB_PICO_DOUBLE=1
-DLIB_PICO_DOUBLE_PICO=1
-DLIB_PICO_FIX_RP2040_USB_DEVICE_ENUMERATION=1
-DLIB_PICO_FLOAT=1
-DLIB_PICO_FLOAT_PICO=1
-DLIB_PICO_FLOAT_PICO_VFP=1
-DLIB_PICO_INT64_OPS=1
-DLIB_PICO_INT64_OPS_COMPILER=1
-DLIB_PICO_MEM_OPS=1
-DLIB_PICO_MEM_OPS_COMPILER=1
-DLIB_PICO_NEWLIB_INTERFACE=1
-DLIB_PICO_PLATFORM=1
-DLIB_PICO_PLATFORM_COMPILER=1
-DLIB_PICO_PLATFORM_PANIC=1
-DLIB_PICO_PLATFORM_SECTIONS=1
-DLIB_PICO_RUNTIME=1
-DLIB_PICO_RUNTIME_INIT=1
-DLIB_PICO_STANDARD_BINARY_INFO=1
-DLIB_PICO_STANDARD_LINK=1
-DLIB_PICO_SYNC=1
-DLIB_PICO_SYNC_CRITICAL_SECTION=1
-DLIB_PICO_SYNC_MUTEX=1
-DLIB_PICO_SYNC_SEM=1
-DLIB_PICO_TIME=1
-DLIB_PICO_TIME_ADAPTER=1
-DLIB_PICO_UNIQUE_ID=1
-DLIB_PICO_UTIL=1
-DLIB_TINYUSB_BOARD=1
-DLIB_TINYUSB_DEVICE=1
-DPICO_32BIT=1
-DPICO_BOARD=\"solderparty_rp2350_stamp_xl\"
-DPICO_BUILD=1
-DPICO_COPY_TO_RAM=0
-DPICO_CXX_ENABLE_EXCEPTIONS=0
-DPICO_NO_FLASH=0
-DPICO_NO_HARDWARE=0
-DPICO_ON_DEVICE=1
-DPICO_RP2040_USB_DEVICE_ENUMERATION_FIX=1
-DPICO_RP2040_USB_DEVICE_UFRAME_FIX=1
-DPICO_RP2350=1
-DPICO_RISCV=1
-DPICO_USE_BLOCKED_RAM=0

View file

@ -0,0 +1,10 @@
-iwithprefixbefore/include/rp2350
-iwithprefixbefore/include/rp2350/pico_base
-iwithprefixbefore/pico-sdk/src/rp2350/hardware_regs/include
-iwithprefixbefore/pico-sdk/src/rp2350/hardware_structs/include
-iwithprefixbefore/pico-sdk/src/rp2350/pico_platform/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_riscv/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_riscv_platform_timer/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_hazard3/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_sha256/include
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_sha256/include

View file

@ -0,0 +1 @@
-Wl,--wrap=__ctzdi2

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -133,7 +133,7 @@ SECTIONS
refers to its dual-purpose on RP2040, where it also handled vectoring
from the bootrom into the user image.
*/
/*
.boot2 : {
__boot2_start__ = .;
*(.boot2)
@ -142,7 +142,7 @@ SECTIONS
ASSERT(__boot2_end__ - __boot2_start__ <= 256,
"ERROR: Pico second stage bootloader must be no more than 256 bytes in size")
*/
.rodata : {
*(EXCLUDE_FILE(*libgcc.a: *libc.a:*lib_a-mem*.o *libm.a:) .rodata*)
*(.srodata*)

Binary file not shown.

View file

@ -39,7 +39,7 @@
-DLIB_TINYUSB_BOARD=1
-DLIB_TINYUSB_DEVICE=1
-DPICO_32BIT=1
-DPICO_BOARD=\"pico2\"
-DPICO_BOARD=\"solderparty_rp2350_stamp_xl\"
-DPICO_BUILD=1
-DPICO_COPY_TO_RAM=0
-DPICO_CXX_ENABLE_EXCEPTIONS=0

@ -1 +1 @@
Subproject commit c6b7f4a6fb57c55c04913c6667e956204990f828
Subproject commit 9e1457101ca47b9ace198086dbd8854efc573ccf

View file

@ -1,3 +1,5 @@
#ifdef PICO_RP2350
#ifndef __riscv
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2350_ARM_NTZ/non_secure/mpu_wrappers_v2_asm.c"
#endif
#endif

View file

@ -1,5 +1,9 @@
#ifdef PICO_RP2040
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2040/port.c"
#else
#ifndef __riscv
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2350_ARM_NTZ/non_secure/port.c"
#else
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2350_RISC-V/port.c"
#endif
#endif

View file

@ -0,0 +1,5 @@
#ifdef PICO_RP2350
#ifdef __riscv
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2350_RISC-V/portASM.S"
#endif
#endif

View file

@ -0,0 +1,6 @@
#ifdef PICO_RP2350
#ifdef __riscv
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2350_RISC-V/include/portContext.h"
#endif
#endif

View file

@ -1,3 +1,5 @@
#ifdef PICO_RP2350
#ifndef __riscv
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2350_ARM_NTZ/non_secure/portasm.c"
#endif
#endif

View file

@ -1,5 +1,9 @@
#ifdef PICO_RP2350
#ifndef __riscv
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2350_ARM_NTZ/non_secure/portmacro.h"
#else
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2350_RISC-V/include/portmacro.h"
#endif
#else
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2040/include/portmacro.h"
#endif

View file

@ -1,5 +1,9 @@
#ifdef PICO_RP2350
#ifndef __riscv
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2350_ARM_NTZ/non_secure//rp2040_config.h"
#else
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2350_RISC-V/include/rp2040_config.h"
#endif
#else
#include "../lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2040/include/rp2040_config.h"
#endif

View file

@ -119,7 +119,7 @@ bool PWMAudio::begin() {
if (_stereo && (_pin & 1)) {
// Illegal, need to have consecutive pins on the same PWM slice
Serial.printf("ERROR: PWMAudio stereo mode requires pin be even\n");
DEBUGV("ERROR: PWMAudio stereo mode requires pin be even\n");
return false;
}

View file

@ -11,6 +11,7 @@
#include <LittleFS.h>
#include "blink_100_1000_rp2040.h"
#include "blink_500_500_rp2350.h"
#include "blink_250_250_rp2350-riscv.h"
void setup() {
Serial.begin(115200);

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,5 @@
#ifdef PICO_RP2350
#ifndef __riscv
const unsigned char blink[] = {
0x00, 0x20, 0x08, 0x20, 0x49, 0x01, 0x00, 0x10, 0x13, 0x01, 0x00, 0x10,
0x15, 0x01, 0x00, 0x10, 0x11, 0x01, 0x00, 0x10, 0x11, 0x01, 0x00, 0x10,
@ -5682,3 +5683,4 @@ const unsigned char blink[] = {
0xfc, 0x26, 0xff, 0xff, 0x79, 0x35, 0x12, 0xab
};
#endif
#endif

View file

@ -9,12 +9,21 @@ if (${cpu} MATCHES "rp2040")
set(PICO_CYW43_SUPPORTED 0)
set(OBJARCH armv6-m)
set(WRAP -Wl,--wrap=clocks_init)
elseif(${cpu} MATCHES "rp2350")
set(TUPLE arm-none-eabi)
elseif(${cpu} MATCHES "rp2350$")
set(PICO_BOARD pico2)
set(PICO_PLATFORM rp2350)
set(PICO_CYW43_SUPPORTED 0)
set(OBJARCH armv8-m)
set(WRAP )
set(TUPLE arm-none-eabi)
elseif(${cpu} MATCHES "rp2350-riscv$")
set(PICO_BOARD pico2)
set(PICO_PLATFORM rp2350-riscv)
set(PICO_CYW43_SUPPORTED 0)
set(OBJARCH rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb)
set(WRAP )
set(TUPLE riscv32-unknown-elf)
else()
message(FATAL_ERROR "Unknown CPU, '${cpu}'")
endif()
@ -101,7 +110,7 @@ target_link_libraries(ota
)
add_custom_command(TARGET ota POST_BUILD
COMMAND ../../system/arm-none-eabi/bin/arm-none-eabi-ld -r -A ${OBJARCH} -b binary -o ota.o ota.bin
COMMAND ../../system/arm-none-eabi/bin/arm-none-eabi-objcopy --rename-section .data=.OTA ota.o ../../lib/${cpu}/ota.o
COMMAND ../../system/${TUPLE}/bin/${TUPLE}-ld -r -A ${OBJARCH} -b binary -o ota.o ota.bin
COMMAND ../../system/${TUPLE}/bin/${TUPLE}-objcopy --rename-section .data=.OTA ota.o ../../lib/${cpu}/ota.o
COMMAND cp ../ota_command.h ../../include/${cpu}/pico_base/pico/.
)

View file

@ -4,6 +4,7 @@ set -e # Exit on error
export PICO_SDK_PATH="$(cd ../pico-sdk/; pwd)"
export PATH="$(cd ../system/arm-none-eabi/bin; pwd):$PATH"
export PATH="$(cd ../system/riscv32-unknown-elf/bin; pwd):$PATH"
rm -rf build
mkdir build
@ -18,3 +19,10 @@ cd build-rp2350
CPU=rp2350 cmake .. -DPICO_RUNTIME_SKIP_INIT_DEFAULT_ALARM_POOL=1
CPU=rp2350 make -j # VERBOSE=1
cd ..
rm -rf build-rp2350-riscv
mkdir build-rp2350-riscv
cd build-rp2350-riscv
CPU=rp2350-riscv cmake .. -DPICO_RUNTIME_SKIP_INIT_DEFAULT_ALARM_POOL=1
CPU=rp2350-riscv make -j # VERBOSE=1
cd ..

View file

@ -0,0 +1,295 @@
/* Based on GCC ARM embedded samples.
Defines the following symbols for use by code:
__exidx_start
__exidx_end
__etext
__data_start__
__preinit_array_start
__preinit_array_end
__init_array_start
__init_array_end
__fini_array_start
__fini_array_end
__data_end__
__bss_start__
__bss_end__
__end__
end
__HeapLimit
__StackLimit
__StackTop
__stack (== StackTop)
*/
MEMORY
{
INCLUDE "pico_flash_region.ld"
RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 212k
GLOBALS(rwx) : ORIGIN = 0x20035000, LENGTH = 44k
SCRATCH_X(rwx) : ORIGIN = 0x20080000, LENGTH = 4k
SCRATCH_Y(rwx) : ORIGIN = 0x20081000, LENGTH = 4k
}
ENTRY(_entry_point)
SECTIONS
{
/* Second stage bootloader is prepended to the image. It must be 256 bytes big
and checksummed. It is usually built by the boot_stage2 target
in the Raspberry Pi Pico SDK
*/
/* Make sure the globals are not copied/etc. They're empty RAM we will init ourselves */
.globals (NOLOAD) : {
} > GLOBALS
.flash_begin : {
__flash_binary_start = .;
} > FLASH
/* The bootrom will enter the image at the point indicated in your
IMAGE_DEF, which is usually the reset handler of your vector table.
The debugger will use the ELF entry point, which is the _entry_point
symbol, and in our case is *different from the bootrom's entry point.*
This is used to go back through the bootrom on debugger launches only,
to perform the same initial flash setup that would be performed on a
cold boot.
*/
.flashtext : {
__logical_binary_start = .;
KEEP (*(.vectors))
KEEP (*(.binary_info_header))
__binary_info_header_end = .;
KEEP (*(.embedded_block))
__embedded_block_end = .;
KEEP (*(.reset))
. = ALIGN(4);
} > FLASH
.rodata : {
/* segments not marked as .flashdata are instead pulled into .data (in RAM) to avoid accidental flash accesses */
*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.flashdata*)))
. = ALIGN(4);
} > FLASH
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > FLASH
__exidx_end = .;
/* Machine inspectable binary information */
. = ALIGN(4);
__binary_info_start = .;
.binary_info :
{
KEEP(*(.binary_info.keep.*))
*(.binary_info.*)
} > FLASH
__binary_info_end = .;
. = ALIGN(4);
/* Vector table goes first in RAM, to avoid large alignment hole */
.ram_vector_table (NOLOAD): {
*(.ram_vector_table)
} > RAM
.uninitialized_data (NOLOAD): {
. = ALIGN(4);
*(.uninitialized_data*)
} > RAM
.text : {
__ram_text_start__ = .;
*(.init)
*(.text*)
*(.fini)
/* Pull all c'tors into .text */
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
*(SORT(.ctors.*))
*(.ctors)
/* Followed by destructors */
*crtbegin.o(.dtors)
*crtbegin?.o(.dtors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
*(SORT(.dtors.*))
*(.dtors)
*(.eh_frame*)
. = ALIGN(4);
__ram_text_end__ = .;
} > RAM AT> FLASH
__ram_text_source__ = LOADADDR(.text);
. = ALIGN(4);
.data : {
__data_start__ = .;
*(vtable)
*(.time_critical*)
. = ALIGN(4);
*(.rodata*)
*(.srodata*)
. = ALIGN(4);
*(.data*)
*(.sdata*)
. = ALIGN(4);
*(.after_data.*)
. = ALIGN(4);
/* preinit data */
PROVIDE_HIDDEN (__mutex_array_start = .);
KEEP(*(SORT(.mutex_array.*)))
KEEP(*(.mutex_array))
PROVIDE_HIDDEN (__mutex_array_end = .);
. = ALIGN(4);
/* preinit data */
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP(*(SORT(.preinit_array.*)))
KEEP(*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
. = ALIGN(4);
/* init data */
PROVIDE_HIDDEN (__init_array_start = .);
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
PROVIDE_HIDDEN (__init_array_end = .);
. = ALIGN(4);
/* finit data */
PROVIDE_HIDDEN (__fini_array_start = .);
*(SORT(.fini_array.*))
*(.fini_array)
PROVIDE_HIDDEN (__fini_array_end = .);
*(.jcr)
. = ALIGN(4);
} > RAM AT> FLASH
.tdata : {
. = ALIGN(4);
*(.tdata .tdata.* .gnu.linkonce.td.*)
/* All data end */
__tdata_end = .;
} > RAM AT> FLASH
PROVIDE(__data_end__ = .);
/* __etext is (for backwards compatibility) the name of the .data init source pointer (...) */
__etext = LOADADDR(.data);
.tbss (NOLOAD) : {
. = ALIGN(4);
__bss_start__ = .;
__tls_base = .;
*(.tbss .tbss.* .gnu.linkonce.tb.*)
*(.tcommon)
__tls_end = .;
} > RAM
.bss : {
. = ALIGN(4);
__tbss_end = .;
*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*)))
*(COMMON)
PROVIDE(__global_pointer$ = . + 2K);
*(.sbss*)
. = ALIGN(4);
__bss_end__ = .;
} > RAM
.heap (NOLOAD):
{
__end__ = .;
end = __end__;
KEEP(*(.heap*))
/* historically on GCC sbrk was growing past __HeapLimit to __StackLimit, however
to be more compatible, we now set __HeapLimit explicitly to where the end of the heap is */
. = ORIGIN(RAM) + LENGTH(RAM);
__HeapLimit = .;
} > RAM
/* Start and end symbols must be word-aligned */
.scratch_x : {
__scratch_x_start__ = .;
*(.scratch_x.*)
. = ALIGN(4);
__scratch_x_end__ = .;
} > SCRATCH_X AT > FLASH
__scratch_x_source__ = LOADADDR(.scratch_x);
.scratch_y : {
__scratch_y_start__ = .;
*(.scratch_y.*)
. = ALIGN(4);
__scratch_y_end__ = .;
} > SCRATCH_Y AT > FLASH
__scratch_y_source__ = LOADADDR(.scratch_y);
/* .stack*_dummy section doesn't contains any symbols. It is only
* used for linker to calculate size of stack sections, and assign
* values to stack symbols later
*
* stack1 section may be empty/missing if platform_launch_core1 is not used */
/* by default we put core 0 stack at the end of scratch Y, so that if core 1
* stack is not used then all of SCRATCH_X is free.
*/
.stack1_dummy (NOLOAD):
{
*(.stack1*)
} > SCRATCH_X
.stack_dummy (NOLOAD):
{
KEEP(*(.stack*))
} > SCRATCH_Y
.flash_end : {
KEEP(*(.embedded_end_block*))
PROVIDE(__flash_binary_end = .);
} > FLASH =0xaa
/* stack limit is poorly named, but historically is maximum heap ptr */
__StackLimit = ORIGIN(RAM) + LENGTH(RAM);
__StackOneTop = ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X);
__StackTop = ORIGIN(SCRATCH_Y) + LENGTH(SCRATCH_Y);
__StackOneBottom = __StackOneTop - SIZEOF(.stack1_dummy);
__StackBottom = __StackTop - SIZEOF(.stack_dummy);
PROVIDE(__stack = __StackTop);
/* picolibc and LLVM */
PROVIDE (__heap_start = __end__);
PROVIDE (__heap_end = __HeapLimit);
PROVIDE( __tls_align = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)) );
PROVIDE( __tls_size_align = (__tls_size + __tls_align - 1) & ~(__tls_align - 1));
PROVIDE( __arm32_tls_tcb_offset = MAX(8, __tls_align) );
/* llvm-libc */
PROVIDE (_end = __end__);
PROVIDE (__llvm_libc_heap_limit = __HeapLimit);
/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed")
ASSERT( __binary_info_header_end - __logical_binary_start <= 1024, "Binary info must be in first 1024 bytes of the binary")
ASSERT( __embedded_block_end - __logical_binary_start <= 4096, "Embedded block must be in first 4096 bytes of the binary")
/* todo assert on extra code */
PROVIDE(__mainapp = 0x10003022);
}

View file

@ -178,6 +178,13 @@ int main(int a, char **b) {
do_ota();
#ifdef __riscv
extern void __mainapp();
__mainapp();
// Should never get here!
return 0;
#else
// Reset the interrupt/etc. vectors to the real app. Will be copied to RAM in app's runtime_init
scb_hw->vtor = (uint32_t)0x10003000;
@ -190,6 +197,7 @@ int main(int a, char **b) {
// Should never get here!
return *sp;
#endif
}
#pragma GCC pop_options

View file

@ -333,17 +333,22 @@
"toolsDependencies": [
{
"packager": "rp2040",
"version": "2.3.0-dfd82b2",
"version": "4.0.1-8ec9d6f",
"name": "pqt-gcc"
},
{
"packager": "rp2040",
"version": "2.3.0-dfd82b2",
"version": "4.0.1-8ec9d6f",
"name": "pqt-gcc-riscv"
},
{
"packager": "rp2040",
"version": "4.0.1-8ec9d6f",
"name": "pqt-mklittlefs"
},
{
"packager": "rp2040",
"version": "2.3.0-dfd82b2",
"version": "4.0.1-8ec9d6f",
"name": "pqt-pioasm"
},
{
@ -353,12 +358,12 @@
},
{
"packager": "rp2040",
"version": "2.3.0-dfd82b2",
"version": "4.0.1-8ec9d6f",
"name": "pqt-openocd"
},
{
"packager": "rp2040",
"version": "2.3.0-dfd82b2",
"version": "4.0.1-8ec9d6f",
"name": "pqt-picotool"
}
],
@ -369,125 +374,187 @@
],
"tools": [
{
"version": "2.3.0-dfd82b2",
"version": "4.0.1-8ec9d6f",
"name": "pqt-gcc",
"systems": [
{
"host": "arm64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-apple-darwin20.4.arm-none-eabi-8ec9d6f.240929.tar.gz",
"archiveFileName": "aarch64-apple-darwin20.4.arm-none-eabi-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:cb84f473efda1b8147d552b5e42a20017654fb13ffa8fa6fabdca6b517f0eaa9",
"size": "106002809"
},
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-linux-gnu.arm-none-eabi-8ec9d6f.240929.tar.gz",
"archiveFileName": "aarch64-linux-gnu.arm-none-eabi-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:f80c0bacbb9e522666e2f41a35a8536dfe1b959532062e63dd052a576ba7f418",
"size": "114435949"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/arm-linux-gnueabihf.arm-none-eabi-8ec9d6f.240929.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.arm-none-eabi-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:736679d3aa55ba08ca2cfc4e88e1a71eff2bcba7c4d1aed2f9d3e325bf7f362d",
"size": "107960125"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-linux-gnu.arm-none-eabi-8ec9d6f.240929.tar.gz",
"archiveFileName": "i686-linux-gnu.arm-none-eabi-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:ba8bfadaa28da88777f95de0f28720d4bc6d24367bacc0751fe7f91fabec543d",
"size": "117654636"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-w64-mingw32.arm-none-eabi-8ec9d6f.240929.zip",
"archiveFileName": "i686-w64-mingw32.arm-none-eabi-8ec9d6f.240929.zip",
"checksum": "SHA-256:3b9672cbd4ebb32cd1510bfd7839ab0b59f6fac3ecd6151aa0d10047a1c2230a",
"size": "124363537"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-apple-darwin20.4.arm-none-eabi-8ec9d6f.240929.tar.gz",
"archiveFileName": "x86_64-apple-darwin20.4.arm-none-eabi-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:509820140252eed71cc4148f89c00318febddea08e500ffaa642cb7b7831ba59",
"size": "118604056"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-linux-gnu.arm-none-eabi-8ec9d6f.240929.tar.gz",
"archiveFileName": "x86_64-linux-gnu.arm-none-eabi-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:ae082491cc07d60c014ca928c406aed72c4b1ead4c33076216c77fd2d242f74d",
"size": "115607420"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-w64-mingw32.arm-none-eabi-8ec9d6f.240929.zip",
"archiveFileName": "x86_64-w64-mingw32.arm-none-eabi-8ec9d6f.240929.zip",
"checksum": "SHA-256:a1ac18cde856fa01aafc9985a719f3749abd3588ac6725d1781f02da94b84d54",
"size": "128268207"
}
]
},
{
"version": "4.0.1-8ec9d6f",
"name": "pqt-picotool",
"systems": [
{
"host": "arm64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/aarch64-apple-darwin20.4.picotool-8a9af99.240919.tar.gz",
"archiveFileName": "aarch64-apple-darwin20.4.picotool-8a9af99.240919.tar.gz",
"checksum": "SHA-256:3e20acb5e8c97448a5ffa316cfc74307df0fd887cf4364d787956ddc359608c1",
"size": "856203"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-apple-darwin20.4.picotool-8a9af99.240929.tar.gz",
"archiveFileName": "aarch64-apple-darwin20.4.picotool-8a9af99.240929.tar.gz",
"checksum": "SHA-256:71eb93270747c5910893f36f5552affd4c254f085b4a7850765b29eec28040ec",
"size": "856205"
},
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/aarch64-linux-gnu.picotool-8a9af99.240919.tar.gz",
"archiveFileName": "aarch64-linux-gnu.picotool-8a9af99.240919.tar.gz",
"checksum": "SHA-256:67a912dd712a1717bf850205aff9ee4b3f0a289c4d0a87ab62e9f71c433e6d38",
"size": "896504"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-linux-gnu.picotool-8a9af99.240929.tar.gz",
"archiveFileName": "aarch64-linux-gnu.picotool-8a9af99.240929.tar.gz",
"checksum": "SHA-256:1f73e2c6ce8c7503678dfacec3d2ea889e0f5a161912eff68b290cf405206094",
"size": "896502"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/arm-linux-gnueabihf.picotool-8a9af99.240919.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.picotool-8a9af99.240919.tar.gz",
"checksum": "SHA-256:2fa0a0a2affa8991b917c06b89cb3c4be597d120bd920b6258a4f7ce041c877b",
"size": "840245"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/arm-linux-gnueabihf.picotool-8a9af99.240929.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.picotool-8a9af99.240929.tar.gz",
"checksum": "SHA-256:6cd60632141f68e1bde7afef93dc5521e78dfff2be421ffddd2da76af5bb3eb1",
"size": "840254"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/i686-linux-gnu.picotool-8a9af99.240919.tar.gz",
"archiveFileName": "i686-linux-gnu.picotool-8a9af99.240919.tar.gz",
"checksum": "SHA-256:b0c8018a58c3d3b1e72698326a38f660c9dbc535a393179a92a009a24a22e90a",
"size": "984649"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-linux-gnu.picotool-8a9af99.240929.tar.gz",
"archiveFileName": "i686-linux-gnu.picotool-8a9af99.240929.tar.gz",
"checksum": "SHA-256:bd5acd7d7085ba01bff07fef6ce4a5ba067abd0b8914c33fae371ec87c846d83",
"size": "984652"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/i686-w64-mingw32.picotool-8a9af99.240919.zip",
"archiveFileName": "i686-w64-mingw32.picotool-8a9af99.240919.zip",
"checksum": "SHA-256:f23a2a4b3994b80f885e28050f5559a2875294a62de431d7e0d254a800caece2",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-w64-mingw32.picotool-8a9af99.240929.zip",
"archiveFileName": "i686-w64-mingw32.picotool-8a9af99.240929.zip",
"checksum": "SHA-256:9f7c90c4f05996f5156beb4dc06edfc7e0b36006edd6ad273daca0085ea19ac6",
"size": "1335369"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-apple-darwin20.4.picotool-8a9af99.240919.tar.gz",
"archiveFileName": "x86_64-apple-darwin20.4.picotool-8a9af99.240919.tar.gz",
"checksum": "SHA-256:86b55d51fc9e154ce209a067afac54116bce2bac823f5f3ec3687b7a021230a5",
"size": "829476"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-apple-darwin20.4.picotool-8a9af99.240929.tar.gz",
"archiveFileName": "x86_64-apple-darwin20.4.picotool-8a9af99.240929.tar.gz",
"checksum": "SHA-256:a8d30f63e421901000d2b2520f047d1dc586f827f41a3ef52056fd92272ff051",
"size": "829477"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-linux-gnu.picotool-8a9af99.240919.tar.gz",
"archiveFileName": "x86_64-linux-gnu.picotool-8a9af99.240919.tar.gz",
"checksum": "SHA-256:1192b43bcacfa33cc5b2d58e4686c7cbf3e4e77fd819d2fbf2cc797a3e174bb8",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-linux-gnu.picotool-8a9af99.240929.tar.gz",
"archiveFileName": "x86_64-linux-gnu.picotool-8a9af99.240929.tar.gz",
"checksum": "SHA-256:4c5b43afd1e9dba149753089c9715e110f2612cbd47fa005fb033adbe5237ad8",
"size": "926046"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-w64-mingw32.picotool-8a9af99.240919.zip",
"archiveFileName": "x86_64-w64-mingw32.picotool-8a9af99.240919.zip",
"checksum": "SHA-256:86a95cae6edfbefe1725f66fcea9ebe20d19bdc8708371d32a21473ca197967d",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-w64-mingw32.picotool-8a9af99.240929.zip",
"archiveFileName": "x86_64-w64-mingw32.picotool-8a9af99.240929.zip",
"checksum": "SHA-256:d4a43c8172f6b32de412a08e4deac4ef50218f5955c9cda85411b252fcecaea3",
"size": "1270392"
}
]
},
{
"version": "2.3.0-dfd82b2",
"version": "4.0.1-8ec9d6f",
"name": "pqt-openocd",
"systems": [
{
"host": "arm64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/aarch64-apple-darwin20.4.openocd-ebec9504d.240919.tar.gz",
"archiveFileName": "aarch64-apple-darwin20.4.openocd-ebec9504d.240919.tar.gz",
"checksum": "SHA-256:eb89c3fb9d797e6dadbc14a866d1cfe27b425689a32687773aef6bf3dbe8d855",
"size": "1981014"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-apple-darwin20.4.openocd-ebec9504d.240929.tar.gz",
"archiveFileName": "aarch64-apple-darwin20.4.openocd-ebec9504d.240929.tar.gz",
"checksum": "SHA-256:d2f2e615b45cb57dad5bf8cc8637dc047f0e2a2d6d07907b961f82fdc9d9dff1",
"size": "1981025"
},
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/aarch64-linux-gnu.openocd-ebec9504d.240919.tar.gz",
"archiveFileName": "aarch64-linux-gnu.openocd-ebec9504d.240919.tar.gz",
"checksum": "SHA-256:845e7a4918b8ee0fea7854b0d7b973009390b245560fc1699be71d0c5470ff71",
"size": "7440912"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-linux-gnu.openocd-ebec9504d.240929.tar.gz",
"archiveFileName": "aarch64-linux-gnu.openocd-ebec9504d.240929.tar.gz",
"checksum": "SHA-256:b9f98837bce6da1e7d2229d8e2a9a2736a433356b82cea678b8fc4e95c3cd30f",
"size": "7354446"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/arm-linux-gnueabihf.openocd-ebec9504d.240919.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.openocd-ebec9504d.240919.tar.gz",
"checksum": "SHA-256:4e9278e8777af01f90c51dc7fb9d5c8c912c11a9c3597a3d8b4f314d17f17ed4",
"size": "7296425"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/arm-linux-gnueabihf.openocd-ebec9504d.240929.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.openocd-ebec9504d.240929.tar.gz",
"checksum": "SHA-256:5a13e718029d5b86fef880f78e60e7521fcf1952911cd65b4cbfc8ef09a5d37c",
"size": "7209884"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/i686-linux-gnu.openocd-ebec9504d.240919.tar.gz",
"archiveFileName": "i686-linux-gnu.openocd-ebec9504d.240919.tar.gz",
"checksum": "SHA-256:ace2a6c14e7c1e89921b50e1e0735ac2999b193d8baf9e9d35fbdb2b6a870d20",
"size": "7031049"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-linux-gnu.openocd-ebec9504d.240929.tar.gz",
"archiveFileName": "i686-linux-gnu.openocd-ebec9504d.240929.tar.gz",
"checksum": "SHA-256:fa324ab0a8a20dab6335196e6b8ebb5fb0c083dc4d8017140287068bf85b3b5f",
"size": "6944581"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/i686-w64-mingw32.openocd-ebec9504d.240919.zip",
"archiveFileName": "i686-w64-mingw32.openocd-ebec9504d.240919.zip",
"checksum": "SHA-256:0082def9373e56608c584e94c8c199c44f8fd00153557878478edaf383d496a9",
"size": "2597198"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-w64-mingw32.openocd-ebec9504d.240929.zip",
"archiveFileName": "i686-w64-mingw32.openocd-ebec9504d.240929.zip",
"checksum": "SHA-256:f0d9cd099bb80d9f68b3554ef9233b2576c4959b4d2ce7444a9a5358d3bd40e0",
"size": "2597199"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-apple-darwin20.4.openocd-ebec9504d.240919.tar.gz",
"archiveFileName": "x86_64-apple-darwin20.4.openocd-ebec9504d.240919.tar.gz",
"checksum": "SHA-256:1e0fe05bed6ab8d4e41898496b45940893fe308d1b66c49448fefa9c67d41024",
"size": "3193799"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-apple-darwin20.4.openocd-ebec9504d.240929.tar.gz",
"archiveFileName": "x86_64-apple-darwin20.4.openocd-ebec9504d.240929.tar.gz",
"checksum": "SHA-256:e06283df22585bf6a83742d364d3594f7bcd724aa8be83de0446c3d1eaca7a58",
"size": "3193818"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-linux-gnu.openocd-ebec9504d.240919.tar.gz",
"archiveFileName": "x86_64-linux-gnu.openocd-ebec9504d.240919.tar.gz",
"checksum": "SHA-256:8ddae277a21f485636989903b2ae0dbf98e5ae8d58c80bf73782bef217cf151b",
"size": "7462299"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-linux-gnu.openocd-ebec9504d.240929.tar.gz",
"archiveFileName": "x86_64-linux-gnu.openocd-ebec9504d.240929.tar.gz",
"checksum": "SHA-256:d8dd0740e16414488de35f5ca1ddfcfe85763fe25d55a46cb9df8698ea83836d",
"size": "7375538"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-w64-mingw32.openocd-ebec9504d.240919.zip",
"archiveFileName": "x86_64-w64-mingw32.openocd-ebec9504d.240919.zip",
"checksum": "SHA-256:a5d27ca4f6fa1e05f55d287c2cfdb124c47b3c064bf10c4f660ddd97dda8ed23",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-w64-mingw32.openocd-ebec9504d.240929.zip",
"archiveFileName": "x86_64-w64-mingw32.openocd-ebec9504d.240929.zip",
"checksum": "SHA-256:4c6463c2818f7b9623d1c08c17c6e6036bd8d522631098d8befde5b66ab312f9",
"size": "2541780"
}
]
@ -562,188 +629,188 @@
]
},
{
"version": "2.3.0-dfd82b2",
"name": "pqt-gcc",
"version": "4.0.1-8ec9d6f",
"name": "pqt-gcc-riscv",
"systems": [
{
"host": "arm64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/aarch64-apple-darwin20.4.arm-none-eabi-dfd82b2.240919.tar.gz",
"archiveFileName": "aarch64-apple-darwin20.4.arm-none-eabi-dfd82b2.240919.tar.gz",
"checksum": "SHA-256:9a0bce8ae3d28489cdc2bf4d1d849b7b9c93f13b74f2449d07499f224801ed99",
"size": "96802517"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-apple-darwin20.4.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"archiveFileName": "aarch64-apple-darwin20.4.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:2dc5495acf7de48ce8e1c3f723e78102ad06add8e8e5dee86bf1dc05b25147ad",
"size": "139017383"
},
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/aarch64-linux-gnu.arm-none-eabi-dfd82b2.240919.tar.gz",
"archiveFileName": "aarch64-linux-gnu.arm-none-eabi-dfd82b2.240919.tar.gz",
"checksum": "SHA-256:04dfe507037553fb5b0844bfc674d7f39cb8fa30fedbd72739b4c5324b260e04",
"size": "103997060"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-linux-gnu.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"archiveFileName": "aarch64-linux-gnu.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:5d70f84ee56d68583ff61eff6461a4f3e2ecfcd445ffecdbb53e944dd229de5e",
"size": "148943445"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/arm-linux-gnueabihf.arm-none-eabi-dfd82b2.240919.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.arm-none-eabi-dfd82b2.240919.tar.gz",
"checksum": "SHA-256:365dd442d1d2cc284ddc7c1df7f96620e4b9169de268f4c2c2dd85f515724838",
"size": "97831453"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/arm-linux-gnueabihf.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:65a3cd450d1b2a18e4bb6192f375e98e82a9808545d517a21357900a931f83f2",
"size": "142237277"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/i686-linux-gnu.arm-none-eabi-dfd82b2.240919.tar.gz",
"archiveFileName": "i686-linux-gnu.arm-none-eabi-dfd82b2.240919.tar.gz",
"checksum": "SHA-256:8844d6c9f9040a673c0354b9fdc413faaa8f4075292f8b9fdefca020c0a7cd03",
"size": "106646523"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-linux-gnu.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"archiveFileName": "i686-linux-gnu.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:130a9d0e970609dd27f70a27d5d34ed927b6a270f956f52aec3b636a206d86f6",
"size": "153960388"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/i686-w64-mingw32.arm-none-eabi-dfd82b2.240919.zip",
"archiveFileName": "i686-w64-mingw32.arm-none-eabi-dfd82b2.240919.zip",
"checksum": "SHA-256:11ff0b24c557cf8334450c6f4826230ec2f25efbf0792f506c3009e2663205ea",
"size": "113765075"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-w64-mingw32.riscv32-unknown-elf-8ec9d6f.240929.zip",
"archiveFileName": "i686-w64-mingw32.riscv32-unknown-elf-8ec9d6f.240929.zip",
"checksum": "SHA-256:25f985cd7ff242fa93a808582911545529eeab2d84b16ac96509425c11249c36",
"size": "159523471"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-apple-darwin20.4.arm-none-eabi-dfd82b2.240919.tar.gz",
"archiveFileName": "x86_64-apple-darwin20.4.arm-none-eabi-dfd82b2.240919.tar.gz",
"checksum": "SHA-256:c11b7f19751a13ba2fb456eaf209472666d77dec8720d51ef44091b8a6fadfa9",
"size": "108052800"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-apple-darwin20.4.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"archiveFileName": "x86_64-apple-darwin20.4.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:4144abfef1c69cee272b6621dd995a5e88ff1e3cf646c8da30d64d9b1cd44b47",
"size": "153526986"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-linux-gnu.arm-none-eabi-dfd82b2.240919.tar.gz",
"archiveFileName": "x86_64-linux-gnu.arm-none-eabi-dfd82b2.240919.tar.gz",
"checksum": "SHA-256:1f37b78a9d371659e2a45b8c602046ec6a1c920f36959fc702db9c68cc2c778c",
"size": "106789920"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-linux-gnu.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"archiveFileName": "x86_64-linux-gnu.riscv32-unknown-elf-8ec9d6f.240929.tar.gz",
"checksum": "SHA-256:63ed149ba20ddc215479eaae5f1709a6bd882f4cd583a52ac2171f9096fda3a5",
"size": "151383989"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-w64-mingw32.arm-none-eabi-dfd82b2.240919.zip",
"archiveFileName": "x86_64-w64-mingw32.arm-none-eabi-dfd82b2.240919.zip",
"checksum": "SHA-256:ee3ed6354ccf71fcfdb2083859ffafc0e2dd6982906f14d3cdb501a85db6cbd8",
"size": "117655702"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-w64-mingw32.riscv32-unknown-elf-8ec9d6f.240929.zip",
"archiveFileName": "x86_64-w64-mingw32.riscv32-unknown-elf-8ec9d6f.240929.zip",
"checksum": "SHA-256:182b38d22b8a4447b8b335c1ce482d16bfb0720be51d6368b404c8628a372dd8",
"size": "163390255"
}
]
},
{
"version": "2.3.0-dfd82b2",
"version": "4.0.1-8ec9d6f",
"name": "pqt-pioasm",
"systems": [
{
"host": "arm64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/aarch64-apple-darwin20.4.pioasm-efe2103.240919.tar.gz",
"archiveFileName": "aarch64-apple-darwin20.4.pioasm-efe2103.240919.tar.gz",
"checksum": "SHA-256:7db03dddebe3f2d736fb88fd1435076b0874667a9be8cfc18a273acc75067a11",
"size": "267871"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-apple-darwin20.4.pioasm-efe2103.240929.tar.gz",
"archiveFileName": "aarch64-apple-darwin20.4.pioasm-efe2103.240929.tar.gz",
"checksum": "SHA-256:6afebe366be3aefd1caa268ec309bd486d7f1f98eedba033ba3b83a0653f1184",
"size": "267869"
},
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/aarch64-linux-gnu.pioasm-efe2103.240919.tar.gz",
"archiveFileName": "aarch64-linux-gnu.pioasm-efe2103.240919.tar.gz",
"checksum": "SHA-256:d71c165b8ac243c578c3615f7a74857a6131c235bbf623b55437f3716d0d3097",
"size": "644219"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-linux-gnu.pioasm-efe2103.240929.tar.gz",
"archiveFileName": "aarch64-linux-gnu.pioasm-efe2103.240929.tar.gz",
"checksum": "SHA-256:48ca0fe638bf8ccca654c0588678178c3d9c2f933892dbd67244fe5f5637eacb",
"size": "644212"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/arm-linux-gnueabihf.pioasm-efe2103.240919.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.pioasm-efe2103.240919.tar.gz",
"checksum": "SHA-256:c8bed422247870a1163fa0fa967b4c49432dbdb2bf4b4a058f6bcfa03eaba637",
"size": "576895"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/arm-linux-gnueabihf.pioasm-efe2103.240929.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.pioasm-efe2103.240929.tar.gz",
"checksum": "SHA-256:06001c3eaf5fbe29e94634218569d13c8d61d6007f7b8da0cca1e7f1fd9414cc",
"size": "576904"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/i686-linux-gnu.pioasm-efe2103.240919.tar.gz",
"archiveFileName": "i686-linux-gnu.pioasm-efe2103.240919.tar.gz",
"checksum": "SHA-256:12774501242f8d20d29a3d5461326ede3ab6906a98e55539aa908d9574994285",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-linux-gnu.pioasm-efe2103.240929.tar.gz",
"archiveFileName": "i686-linux-gnu.pioasm-efe2103.240929.tar.gz",
"checksum": "SHA-256:09c4db3bf797b2a9f5edc3db05717c32c2fdd045ebca12ffba1c3ba037759470",
"size": "703370"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/i686-w64-mingw32.pioasm-efe2103.240919.zip",
"archiveFileName": "i686-w64-mingw32.pioasm-efe2103.240919.zip",
"checksum": "SHA-256:be3705551828925cde12e59ee6ae54d9de4c0fea862f4def00f72d8ea4792c49",
"size": "797522"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-w64-mingw32.pioasm-efe2103.240929.zip",
"archiveFileName": "i686-w64-mingw32.pioasm-efe2103.240929.zip",
"checksum": "SHA-256:50ec452554c000c692e1f8ee6657a5bb47d99aae62ac10cbf2da3e97cdc45db1",
"size": "797527"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-apple-darwin20.4.pioasm-efe2103.240919.tar.gz",
"archiveFileName": "x86_64-apple-darwin20.4.pioasm-efe2103.240919.tar.gz",
"checksum": "SHA-256:c4f24d6cb591c3e9b9e9d99a3b207e941e8ed0d27810a322ce94da18554ea47c",
"size": "780427"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-apple-darwin20.4.pioasm-efe2103.240929.tar.gz",
"archiveFileName": "x86_64-apple-darwin20.4.pioasm-efe2103.240929.tar.gz",
"checksum": "SHA-256:9161b685fe394a6bbc19e3f14082d018d230a33941edd523d163d158f0480422",
"size": "780453"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-linux-gnu.pioasm-efe2103.240919.tar.gz",
"archiveFileName": "x86_64-linux-gnu.pioasm-efe2103.240919.tar.gz",
"checksum": "SHA-256:7827603f11dd3bcda23c92440913980ee7eff6e867f686aa8188de7dea7dbb6d",
"size": "649758"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-linux-gnu.pioasm-efe2103.240929.tar.gz",
"archiveFileName": "x86_64-linux-gnu.pioasm-efe2103.240929.tar.gz",
"checksum": "SHA-256:974481d6b9678c73cefc3c7df657647bc216f2d6c2bdef12236aa06542246973",
"size": "649767"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-w64-mingw32.pioasm-efe2103.240919.zip",
"archiveFileName": "x86_64-w64-mingw32.pioasm-efe2103.240919.zip",
"checksum": "SHA-256:ad047233dd4522474723e59e4b627d3f85ac3bdda75a32abd9797895f170909d",
"size": "929506"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-w64-mingw32.pioasm-efe2103.240929.zip",
"archiveFileName": "x86_64-w64-mingw32.pioasm-efe2103.240929.zip",
"checksum": "SHA-256:73cc318e0b1df84fcb661ae9322e22a52f49678f44d3766b4baa82b328b19822",
"size": "929510"
}
]
},
{
"version": "2.3.0-dfd82b2",
"version": "4.0.1-8ec9d6f",
"name": "pqt-mklittlefs",
"systems": [
{
"host": "arm64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/aarch64-apple-darwin20.4.mklittlefs-2f7654f.240919.tar.gz",
"archiveFileName": "aarch64-apple-darwin20.4.mklittlefs-2f7654f.240919.tar.gz",
"checksum": "SHA-256:fe35b65fd8d9c03dfcd754f10c3e1ca0c750e850ce9a86302ab1e141d1ea8709",
"size": "72514"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-apple-darwin20.4.mklittlefs-2f7654f.240929.tar.gz",
"archiveFileName": "aarch64-apple-darwin20.4.mklittlefs-2f7654f.240929.tar.gz",
"checksum": "SHA-256:09ddf3f856f2828e94c1e3599021265eb1e69ed84d659604a638af4a010f4f3d",
"size": "72517"
},
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/aarch64-linux-gnu.mklittlefs-2f7654f.240919.tar.gz",
"archiveFileName": "aarch64-linux-gnu.mklittlefs-2f7654f.240919.tar.gz",
"checksum": "SHA-256:bc97b86b60a1f03635a9f387f64c61a0ad2192a1f7fb4ade60d606921d6ab548",
"size": "684061"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/aarch64-linux-gnu.mklittlefs-2f7654f.240929.tar.gz",
"archiveFileName": "aarch64-linux-gnu.mklittlefs-2f7654f.240929.tar.gz",
"checksum": "SHA-256:47e276ee0707e78fa4b588ef4346187071ea4be194519d405b8a1da91d34e682",
"size": "684064"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/arm-linux-gnueabihf.mklittlefs-2f7654f.240919.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.mklittlefs-2f7654f.240919.tar.gz",
"checksum": "SHA-256:96fde072a3b5951a3539baaaf47d9c1a8520f2757b6377ef58b7f2c0da4abd2b",
"size": "632931"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/arm-linux-gnueabihf.mklittlefs-2f7654f.240929.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.mklittlefs-2f7654f.240929.tar.gz",
"checksum": "SHA-256:f4fb24a675de0bf3575ed6320ae1053d67355bbd3af116933bb1a90c1989bf57",
"size": "632936"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/i686-linux-gnu.mklittlefs-2f7654f.240919.tar.gz",
"archiveFileName": "i686-linux-gnu.mklittlefs-2f7654f.240919.tar.gz",
"checksum": "SHA-256:ea520bf89f4596c0d06d68c47f26a4ce0a181458f0845330f95e38c4e9772d4c",
"size": "665586"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-linux-gnu.mklittlefs-2f7654f.240929.tar.gz",
"archiveFileName": "i686-linux-gnu.mklittlefs-2f7654f.240929.tar.gz",
"checksum": "SHA-256:29df0ca122767357a7f14a2b5fb6e6d1f912789086dcb5e3c39b9df8d85f908a",
"size": "665594"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/i686-w64-mingw32.mklittlefs-2f7654f.240919.zip",
"archiveFileName": "i686-w64-mingw32.mklittlefs-2f7654f.240919.zip",
"checksum": "SHA-256:c5782c8cb3cdeb03abda4fd2fed1dd1655c422920d407845bd85ec007af9f4ef",
"size": "1232207"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/i686-w64-mingw32.mklittlefs-2f7654f.240929.zip",
"archiveFileName": "i686-w64-mingw32.mklittlefs-2f7654f.240929.zip",
"checksum": "SHA-256:fa9071ee8f806ca7bf1cc16e1cb2be5588908cff929ec91e007dafa33eb4be1c",
"size": "1232212"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-apple-darwin20.4.mklittlefs-2f7654f.240919.tar.gz",
"archiveFileName": "x86_64-apple-darwin20.4.mklittlefs-2f7654f.240919.tar.gz",
"checksum": "SHA-256:7c1732e98752f2b8a6d11f8f058c2a3cf426fa070d730e27d3c15d41bbde0376",
"size": "621579"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-apple-darwin20.4.mklittlefs-2f7654f.240929.tar.gz",
"archiveFileName": "x86_64-apple-darwin20.4.mklittlefs-2f7654f.240929.tar.gz",
"checksum": "SHA-256:50a932d7c0351a70c3ecfce725b2c7bd926ddfb086145c225bb1134ad1b1a5ff",
"size": "621594"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-linux-gnu.mklittlefs-2f7654f.240919.tar.gz",
"archiveFileName": "x86_64-linux-gnu.mklittlefs-2f7654f.240919.tar.gz",
"checksum": "SHA-256:e194f6c9d0b2e02c6b6cc326ad083581801ecf8f616da44d1755fbec5646b127",
"size": "690458"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-linux-gnu.mklittlefs-2f7654f.240929.tar.gz",
"archiveFileName": "x86_64-linux-gnu.mklittlefs-2f7654f.240929.tar.gz",
"checksum": "SHA-256:aec72ad65cec9a96afda0507605661dfd552d5e304dd654c1b1ebb2bcc9f2d76",
"size": "690461"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/2.3.0/x86_64-w64-mingw32.mklittlefs-2f7654f.240919.zip",
"archiveFileName": "x86_64-w64-mingw32.mklittlefs-2f7654f.240919.zip",
"checksum": "SHA-256:bd080b5b4ec7df84d444c72260010905a13744afca79f13e4017e658a56b4005",
"size": "1328982"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/4.0.1/x86_64-w64-mingw32.mklittlefs-2f7654f.240929.zip",
"archiveFileName": "x86_64-w64-mingw32.mklittlefs-2f7654f.240929.zip",
"checksum": "SHA-256:83f75c88e8e44fa1a38346ccff2e89756ffcfcda96b5d849f9e6563d996081eb",
"size": "1328984"
}
]
}

View file

@ -28,7 +28,7 @@ pluggable_discovery.required.0=builtin:serial-discovery
pluggable_discovery.required.1=builtin:mdns-discovery
pluggable_monitor.required.serial=builtin:serial-monitor
runtime.tools.pqt-gcc.path={runtime.platform.path}/system/arm-none-eabi
runtime.tools.pqt-gcc.path={runtime.platform.path}/system/{build.toolchain}
runtime.tools.pqt-python3.path={runtime.platform.path}/system/python3
runtime.tools.pqt-mklittlefs.path={runtime.platform.path}/system/mklittlefs
runtime.tools.pqt-pioasm.path={runtime.platform.path}/system/pioasm
@ -61,7 +61,7 @@ compiler.c.flags=-c {compiler.warning_flags} {compiler.defines} {compiler.flags}
compiler.c.elf.cmd={build.toolchain}-g++
compiler.c.elf.flags={compiler.warning_flags} {compiler.defines} {compiler.flags} {build.flags.optimize} -u _printf_float -u _scanf_float
compiler.S.cmd={build.toolchain}-gcc
compiler.S.flags=-c {compiler.warning_flags} {compiler.defines} -g -x assembler-with-cpp -MMD {compiler.includes} -g
compiler.S.flags=-c {compiler.warning_flags} {compiler.defines} -g -x assembler-with-cpp -MMD {compiler.includes} {build.toolchainopts} -g
compiler.cpp.cmd={build.toolchain}-g++
compiler.cpp.flags=-c {compiler.warning_flags} {compiler.defines} {compiler.flags} -MMD {compiler.includes} {build.flags.rtti} -std=gnu++17 -g -pipe
@ -72,7 +72,7 @@ compiler.objcopy.eep.flags=-O ihex -j .eeprom --set-section-flags=.eeprom=alloc,
compiler.elf2hex.bin.flags=-O binary
compiler.elf2hex.hex.flags=-O ihex -R .eeprom
compiler.elf2hex.cmd={build.toolchain}-objcopy
compiler.ldflags={compiler.wrap} -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--undefined=runtime_init_install_ram_vector_table
compiler.ldflags={compiler.wrap} -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--undefined=runtime_init_install_ram_vector_table -Wl,--undefined=__pre_init_runtime_init_clocks -Wl,--undefined=__pre_init_runtime_init_bootrom_reset -Wl,--undefined=__pre_init_runtime_init_early_resets -Wl,--undefined=__pre_init_runtime_init_usb_power_down -Wl,--undefined=__pre_init_runtime_init_clocks -Wl,--undefined=__pre_init_runtime_init_post_clock_resets -Wl,--undefined=__pre_init_runtime_init_spin_locks_reset -Wl,--undefined=__pre_init_runtime_init_boot_locks_reset -Wl,--undefined=__pre_init_runtime_init_bootrom_locking_enable -Wl,--undefined=__pre_init_runtime_init_mutex -Wl,--undefined=__pre_init_runtime_init_default_alarm_pool -Wl,--undefined=__pre_init_first_per_core_initializer -Wl,--undefined=__pre_init_runtime_init_per_core_bootrom_reset -Wl,--undefined=__pre_init_runtime_init_per_core_h3_irq_registers -Wl,--undefined=__pre_init_runtime_init_per_core_irq_priorities
compiler.size.cmd={build.toolchain}-size
compiler.define=-DARDUINO=
compiler.readelf.cmd={build.toolchain}-readelf

23
tests/build-rp2350-riscv.sh Executable file
View file

@ -0,0 +1,23 @@
#!/usr/bin/env bash
cache_dir=$(mktemp -d)
source "$GITHUB_WORKSPACE"/tests/common.sh
if [ -z "$BUILD_PARITY" ]; then
mod=1
rem=0
elif [ "$BUILD_PARITY" = "even" ]; then
mod=2
rem=0
elif [ "$BUILD_PARITY" = "odd" ]; then
mod=2
rem=1
fi
export FQBN=pico:rp2040:rpipico2:flash=4194304_0,arch=riscv,freq=150,opt=Small,rtti=Disabled,stackprotect=Disabled,exceptions=Disabled,dbgport=Disabled,dbglvl=None,usbstack=picosdk,ipbtstack=ipv4only,uploadmethod=default
export PICO_BOARD=rp2350
install_arduino nodebug
build_sketches_with_arduino "$mod" "$rem" ""
rm -rf "$cache_dir"

View file

@ -15,7 +15,7 @@ elif [ "$BUILD_PARITY" = "odd" ]; then
rem=1
fi
export FQBN=pico:rp2040:rpipico2:flash=4194304_0,freq=150,opt=Small,rtti=Disabled,stackprotect=Disabled,exceptions=Disabled,dbgport=Disabled,dbglvl=None,usbstack=picosdk,ipbtstack=ipv4only,uploadmethod=default
export FQBN=pico:rp2040:rpipico2:flash=4194304_0,arch=arm,freq=150,opt=Small,rtti=Disabled,stackprotect=Disabled,exceptions=Disabled,dbgport=Disabled,dbglvl=None,usbstack=picosdk,ipbtstack=ipv4only,uploadmethod=default
export PICO_BOARD=rp2350
install_arduino nodebug

View file

@ -234,7 +234,7 @@ function install_ide()
fi
# Set custom warnings for all builds (i.e. could add -Wextra at some point)
echo "compiler.c.extra_flags=-Wall -Wextra -Werror -Wno-ignored-qualifiers $debug_flags" > rp2040/platform.local.txt
echo "compiler.cpp.extra_flags=-Wall -Wextra -Werror -Wno-ignored-qualifiers $debug_flags" >> rp2040/platform.local.txt
echo "compiler.cpp.extra_flags=-Wall -Wextra -Werror -Wno-ignored-qualifiers -Wno-overloaded-virtual $debug_flags" >> rp2040/platform.local.txt
echo -e "\n----platform.local.txt----"
cat rp2040/platform.local.txt
echo -e "\n----\n"

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_w25q080_2_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x239A",
"usb_pid": "0x814F"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_generic_03h_2_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x2E8A",
"usb_pid": "0x109B"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_generic_03h_2_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x2E8A",
"usb_pid": "0x109A"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_w25q080_2_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x2E8A",
"usb_pid": "0x1093"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_generic_03h_2_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x2E8A",
"usb_pid": "0x1096"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_w25q080_2_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x2E8A",
"usb_pid": "0x10AE"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_generic_03h_4_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x2E8A",
"usb_pid": "0xF00F"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_w25q080_4_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x2E8A",
"usb_pid": "0x1018"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_generic_03h_4_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x2E8A",
"usb_pid": "0x100A"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_w25q080_4_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x2E8A",
"usb_pid": "0x100B"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_generic_03h_2_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x2E8A",
"usb_pid": "0x000F"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_generic_03h_2_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x1209",
"usb_pid": "0xA183"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_generic_03h_2_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x1209",
"usb_pid": "0xA184"
}

View file

@ -2,7 +2,7 @@
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_w25q080_2_padded_checksum.S",
"boot2_source": "none.S",
"usb_vid": "0x1B4F",
"usb_pid": "0x0026"
}

View file

@ -14,11 +14,17 @@ all2: bearssl/README.txt
PATH="$(PWD)/../../system/arm-none-eabi/bin/:$(PATH)" && arm-none-eabi-gcc --version && cd bearssl && $(MAKE) CONF=pico2 clean all
install2: all2 version-header
cp bearssl/pico/libbearssl.a ../../lib/rp2350/.
cp bearssl/pico2/libbearssl.a ../../lib/rp2350/.
ar d ../../lib/rp2350/libbearssl.a `ar t ../../lib/rp2350/libbearssl.a | egrep 'x86|sse|pwr8|i62|m32|m62|m64|ct64|ctmul64'` # Remove unneeded objects
cp bearssl/inc/bearssl*.h ../../include/bearssl/.
bearssl/README.txt:
all2rv: bearssl/README.txt
PATH="$(PWD)/../../system/riscv32-unknown-elf/bin/:$(PATH)" && riscv32-unknown-elf-gcc --version && cd bearssl && $(MAKE) CONF=pico2rv clean all
install2rv: all2rv version-header
cp bearssl/pico2rv/libbearssl.a ../../lib/rp2350-riscv/.
ar d ../../lib/rp2350-riscv/libbearssl.a `ar t ../../lib/rp2350-riscv/libbearssl.a | egrep 'x86|sse|pwr8|i62|m32|m62|m64|ct64|ctmul64'` # Remove unneeded objects
cp bearssl/inc/bearssl*.h ../../include/bearssl/.
bearssl/README.txt:
git submodule update --init --recursive bearssl

View file

@ -8,10 +8,15 @@ if (${cpu} MATCHES "rp2040")
set(PICO_BOARD pico_w)
set(PICO_PLATFORM rp2040)
set(PICO_CYW43_SUPPORTED 1)
elseif(${cpu} MATCHES "rp2350")
elseif(${cpu} MATCHES "rp2350$")
set(PICO_BOARD solderparty_rp2350_stamp_xl) # Pico2 sets to RP2350A which disables all code for RP2350B
set(PICO_PLATFORM rp2350)
set(PICO_CYW43_SUPPORTED 0)
elseif(${cpu} MATCHES "rp2350-riscv$")
message(INFO "Building RISCV")
set(PICO_BOARD solderparty_rp2350_stamp_xl) # Pico2 sets to RP2350A which disables all code for RP2350B
set(PICO_PLATFORM rp2350-riscv)
set(PICO_CYW43_SUPPORTED 0)
else()
message(FATAL_ERROR "Unknown CPU, '${cpu}'")
endif()
@ -28,6 +33,18 @@ pico_sdk_init()
add_library(common-${cpu} INTERFACE)
if (${cpu} MATCHES "rp2350$")
set(xcda
LIB_PICO_DOUBLE_PICO=1
LIB_PICO_FLOAT_PICO=1
LIB_PICO_FLOAT_PICO_VFP=1)
elseif (${cpu} MATCHES "rp2350-riscv$")
set(xcda
LIB_PICO_DOUBLE_COMPILER=1
LIB_PICO_FLOAT_COMPILER=1
PICO_RISCV=1)
endif()
if (${cpu} MATCHES "rp2040")
set(xcd
PICO_RP2040_B0_SUPPORTED=1
@ -39,9 +56,8 @@ if (${cpu} MATCHES "rp2040")
PICO_FLOAT_SUPPORT_ROM_V1=1
PICO_DOUBLE_SUPPORT_ROM_V1=1
PICO_RP2040=1
PICO_PLATFORM=rp2040
PICO_CYW43_SUPPORTED=1)
elseif(${cpu} MATCHES "rp2350")
elseif (${cpu} MATCHES "rp2350")
set(xcd
CFG_TUSB_DEBUG=0
CFG_TUSB_MCU=OPT_MCU_RP2040
@ -56,11 +72,8 @@ elseif(${cpu} MATCHES "rp2350")
LIB_PICO_DIVIDER=1
LIB_PICO_DIVIDER_COMPILER=1
LIB_PICO_DOUBLE=1
LIB_PICO_DOUBLE_PICO=1
LIB_PICO_FIX_RP2040_USB_DEVICE_ENUMERATION=1
LIB_PICO_FLOAT=1
LIB_PICO_FLOAT_PICO=1
LIB_PICO_FLOAT_PICO_VFP=1
LIB_PICO_INT64_OPS=1
LIB_PICO_INT64_OPS_COMPILER=1
LIB_PICO_MEM_OPS=1
@ -97,7 +110,15 @@ elseif(${cpu} MATCHES "rp2350")
PICO_RP2040_USB_DEVICE_UFRAME_FIX=1
PICO_RP2350=1
PICO_USE_BLOCKED_RAM=0
PICO_PLATFORM=rp2350)
${xcda})
endif()
if (${cpu} MATCHES "rp2040")
set(ppp PICO_PLATFORM=rp2040)
elseif(${cpu} MATCHES "rp2350$")
set(ppp PICO_PLATFORM=rp2350)
elseif(${cpu} MATCHES "rp2350-riscv$")
set(ppp PICO_PLATFORM=rp2350-riscv)
endif()
# Use a longer XOSC startup time, to accommodate Adafruit and other boards that may need it.
@ -110,6 +131,7 @@ target_compile_definitions(common-${cpu} INTERFACE
LWIP_IGMP=1
LWIP_CHECKSUM_CTRL_PER_NETIF=1
${xcd}
${ppp}
)

View file

@ -5,6 +5,7 @@ set -x
export PICO_SDK_PATH="$(cd ../../pico-sdk/; pwd)"
export PATH="$(cd ../../system/arm-none-eabi/bin; pwd):$PATH"
export PATH="$(cd ../../system/riscv32-unknown-elf/bin; pwd):$PATH"
rm -rf build-rp2040
mkdir build-rp2040
@ -53,39 +54,9 @@ cd build-rp2350
CPU=rp2350 cmake ..
make -j
rm -rf boot
mkdir boot
cd boot
mkdir -p pico
touch pico/config.h
# Some in the rp2350 boot2 directory don't compile(!?)
for type in boot2_generic_03h boot2_w25q080; do
for div in 2 4; do
arm-none-eabi-gcc -mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse -O3 \
-DNDEBUG -DPICO_FLASH_SPI_CLKDIV=$div \
-DPICO_RP2350 \
-c "$PICO_SDK_PATH/src/rp2350/boot_stage2/$type.S" \
-I "$PICO_SDK_PATH/src/boards/include/boards/" \
-I "$PICO_SDK_PATH/src/rp2350/hardware_regs/include/" \
-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/" \
-I "$PICO_SDK_PATH/src/rp2350/pico_platform/include/" \
-I "$PICO_SDK_PATH/src/rp2350/boot_stage2/asminclude/" \
-I .
arm-none-eabi-gcc -mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse -O3 \
-DNDEBUG -Wl,--build-id=none --specs=nosys.specs -nostartfiles \
-Wl,--script="$PICO_SDK_PATH/src/rp2350/boot_stage2/boot_stage2.ld" \
-Wl,-Map=$type.$div.elf.map $type.o -o $type.$div.elf
arm-none-eabi-objdump -h $type.$div.elf > $type.$div.dis
arm-none-eabi-objdump -d $type.$div.elf >> $type.$div.dis
arm-none-eabi-objcopy -Obinary $type.$div.elf $type.$div.bin
python3 "$PICO_SDK_PATH/src/rp2350/boot_stage2/pad_checksum" \
-s 0xffffffff $type.$div.bin ${type}_${div}_padded_checksum.S
done
done
mv *.S ../../../../boot2/rp2350/.
cd ..
rm -rf build-rp2350-riscv
mkdir build-rp2350-riscv
cd build-rp2350-riscv
CPU=rp2350-riscv cmake ..
make -j

View file

@ -48,6 +48,20 @@ def BuildFreq(name, defmhz):
print("%s.menu.freq.%s=%s MHz%s" % (name, f, f, warn))
print("%s.menu.freq.%s.build.f_cpu=%dL" % (name, f, f * 1000000))
def BuildArch(name):
# Cortex M-33
print("%s.menu.arch.arm=ARM" % (name))
print("%s.menu.arch.arm.build.chip=%s" % (name, "rp2350"))
print("%s.menu.arch.arm.build.toolchain=arm-none-eabi" % (name))
print("%s.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse" % (name))
print("%s.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block" % (name))
# RISC-V Hazard3
print("%s.menu.arch.riscv=RISC-V" % (name))
print("%s.menu.arch.riscv.build.chip=%s" % (name, "rp2350-riscv"))
print("%s.menu.arch.riscv.build.toolchain=riscv32-unknown-elf" % (name))
print("%s.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32" % (name))
print("%s.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block" % (name))
def BuildPSRAM(name):
for s in [ 0, 2, 4, 8]:
print("%s.menu.psram.%dmb=%dMByte PSRAM" % (name, s, s))
@ -222,14 +236,11 @@ def BuildHeader(name, chip, chaintuple, chipoptions, vendor_name, product_name,
print("%s.build.usbpwr=-DUSBD_MAX_POWER_MA=%s" % (name, pwr))
print("%s.build.board=%s" % (name, boarddefine))
# print("%s.build.mcu=cortex-m0plus" % (name))
if chip == "rp2040": # RP2350 has menu for this later on
print("%s.build.chip=%s" % (name, chip))
print("%s.build.toolchain=%s" % (name, chaintuple))
print("%s.build.toolchainopts=%s" % (name, chipoptions))
if chip == "rp2350":
uf2family = "--family rp2350-arm-s --abs-block"
elif chip == "rp2040":
uf2family = "--family rp2040"
print("%s.build.uf2family=%s" % (name, uf2family))
print("%s.build.uf2family=%s" % (name, "--family rp2040"))
print("%s.build.variant=%s" % (name, variant))
print("%s.upload.maximum_size=%d" % (name, flashsize))
print("%s.upload.wait_for_upload_port=true" % (name))
@ -243,7 +254,7 @@ def BuildHeader(name, chip, chaintuple, chipoptions, vendor_name, product_name,
print("%s.build.boot2=%s" % (name, boot2))
print('%s.build.usb_manufacturer="%s"' % (name, vendor_name))
print('%s.build.usb_product="%s"' % (name, product_name))
if (chip == "rp2350") and (name != "generic_rp2350"):
if ((chip == "rp2350") or (chip == "rp2350-riscv")) and (name != "generic_rp2350"):
print("%s.build.psram_length=0x%d00000" % (name, psramsize))
if extra != None:
m_extra = ''
@ -265,6 +276,7 @@ def BuildGlobalMenuList():
print("menu.psram=PSRAM Size")
print("menu.psramfreq=PSRAM Speed")
print("menu.freq=CPU Speed")
print("menu.arch=CPU Architecture")
print("menu.opt=Optimize")
print("menu.rtti=RTTI")
print("menu.stackprotect=Stack Protector")
@ -294,9 +306,9 @@ def MakeBoard(name, chip, vendor_name, product_name, vid, pid, pwr, boarddefine,
elif chip == "rp2350":
tup = "arm-none-eabi"
opts = "-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse"
elif chip == "rp2530rv":
tup = "riscv-none-eabi"
opts = "TBD"
elif chip == "rp2350-riscv":
tup = "riscv32-unknown-elf"
opts = "-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32"
else:
raise Exception("Unknown board type " + str(chip));
BuildHeader(name, chip, tup, opts, vendor_name, product_name, vid, pid, pwr, boarddefine, name, flashsizemb * 1024 * 1024, psramsize, boot2, extra)
@ -319,7 +331,8 @@ def MakeBoard(name, chip, vendor_name, product_name, vid, pid, pwr, boarddefine,
BuildFlashMenu(name, chip, 16*1024*1024, [0, 15*1024*1024, 14*1024*1024, 12*1024*1024, 8*1024*1024, 4*1024*1024, 2*1024*1024])
else:
BuildFlashMenu(name, chip, flashsizemb * 1024 * 1024, fssizelist)
if chip == "rp2350":
if (chip == "rp2350") or (chip == "rp2350-riscv"):
BuildArch(name)
BuildFreq(name, 150)
if name == "generic_rp2350":
BuildRP2350Variant(name)
@ -372,6 +385,11 @@ def MakeBoardJSON(name, chip, vendor_name, product_name, vid, pid, pwr, boarddef
ramsize = 512
jlink = "RP2350_0"
fcpu = "150000000L"
elif chip == "rp2350-riscv":
cpu = "riscv"
ramsize = 512
jlink = "RP2350_0"
fcpu = "150000000L"
j = {
"build": {
"arduino": {
@ -428,7 +446,7 @@ def MakeBoardJSON(name, chip, vendor_name, product_name, vid, pid, pwr, boarddef
"vendor": vendor_name,
}
# add nonzero PSRAM sizes of known boards (can still be overwritten in platformio.ini)
if psramsize != 0 and name != "generic_rp2350":
if (psramsize != 0) and (name != "generic_rp2350"):
j["upload"]["psram_length"] = psramsize * 1024 * 1024
jsondir = os.path.abspath(os.path.dirname(__file__)) + "/json"
@ -449,7 +467,7 @@ BuildGlobalMenuList()
# Raspberry Pi
MakeBoard("rpipico", "rp2040", "Raspberry Pi", "Pico", "0x2e8a", "0x000a", 250, "RASPBERRY_PI_PICO", 2, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("rpipicow", "rp2040", "Raspberry Pi", "Pico W", "0x2e8a", "0xf00a", 250, "RASPBERRY_PI_PICO_W", 2, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("rpipico2", "rp2350", "Raspberry Pi", "Pico 2", "0x2e8a", "0x000f", 250, "RASPBERRY_PI_PICO_2", 4, 0, "boot2_generic_03h_2_padded_checksum")
MakeBoard("rpipico2", "rp2350", "Raspberry Pi", "Pico 2", "0x2e8a", "0x000f", 250, "RASPBERRY_PI_PICO_2", 4, 0, "none")
# 0xCB
MakeBoard("0xcb_helios", "rp2040", "0xCB", "Helios", "0x1209", "0xCB74", 500, "0XCB_HELIOS", 16, 0, "boot2_w25q128jvxq_4_padded_checksum")
@ -471,7 +489,7 @@ MakeBoard("adafruit_stemmafriend", "rp2040", "Adafruit", "STEMMA Friend RP2040",
MakeBoard("adafruit_trinkeyrp2040qt", "rp2040", "Adafruit", "Trinkey RP2040 QT", "0x239a", "0x8109", 250, "ADAFRUIT_TRINKEYQT_RP2040", 8, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("adafruit_macropad2040", "rp2040", "Adafruit", "MacroPad RP2040", "0x239a", "0x8107", 250, "ADAFRUIT_MACROPAD_RP2040", 8, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("adafruit_kb2040", "rp2040", "Adafruit", "KB2040", "0x239a", "0x8105", 250, "ADAFRUIT_KB2040_RP2040", 8, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("adafruit_feather_rp2350_hstx", "rp2350", "Adafruit", "Feather RP2350 HSTX", "0x239a", "0x814f", 250, "ADAFRUIT_FEATHER_RP2350_HSTX", 8, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("adafruit_feather_rp2350_hstx", "rp2350", "Adafruit", "Feather RP2350 HSTX", "0x239a", "0x814f", 250, "ADAFRUIT_FEATHER_RP2350_HSTX", 8, 0, "none")
#Amken
@ -494,15 +512,15 @@ MakeBoard("bridgetek_idm2040_7a", "rp2040", "BridgeTek", "IDM2040-7A", "0x2e8a",
MakeBoard("bridgetek_idm2040_43a", "rp2040", "BridgeTek", "IDM2040-43A", "0x2e8b", "0xf00a", 250, "BRIDGETEK_IDM2040_43A", 8, 0, "boot2_w25q080_2_padded_checksum", ["FT8XX_TYPE=BT883", "DISPLAY_RES=WQVGA", "PLATFORM_RP2040"])
# Cytron
MakeBoard("cytron_iriv_io_controller", "rp2350", "Cytron", "IRIV IO Controller", "0x2e8a", "0x1093", 250, "CYTRON_IRIV_IO_CONTROLLER", 2, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("cytron_iriv_io_controller", "rp2350", "Cytron", "IRIV IO Controller", "0x2e8a", "0x1093", 250, "CYTRON_IRIV_IO_CONTROLLER", 2, 0, "none")
MakeBoard("cytron_maker_nano_rp2040", "rp2040", "Cytron", "Maker Nano RP2040", "0x2e8a", "0x100f", 250, "CYTRON_MAKER_NANO_RP2040", 2, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("cytron_maker_pi_rp2040", "rp2040", "Cytron", "Maker Pi RP2040", "0x2e8a", "0x1000", 250, "CYTRON_MAKER_PI_RP2040", 2, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("cytron_maker_uno_rp2040", "rp2040", "Cytron", "Maker Uno RP2040", "0x2e8a", "0x1071", 250, "CYTRON_MAKER_UNO_RP2040", 2, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("cytron_motion_2350_pro", "rp2350", "Cytron", "Motion 2350 Pro", "0x2e8a", "0x1096", 250, "CYTRON_MOTION_2350_PRO", 2, 0, "boot2_generic_03h_2_padded_checksum")
MakeBoard("cytron_motion_2350_pro", "rp2350", "Cytron", "Motion 2350 Pro", "0x2e8a", "0x1096", 250, "CYTRON_MOTION_2350_PRO", 2, 0, "none")
# DatanoiseTV
MakeBoard("datanoisetv_picoadk", "rp2040", "DatanoiseTV", "PicoADK", "0x2e8a", "0x000a", 250, "DATANOISETV_PICOADK", 2, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("datanoisetv_picoadk_v2", "rp2350", "DatanoiseTV", "PicoADK v2", "0x2e8a", "0x10ae", 250, "DATANOISETV_PICOADK_V2", 4, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("datanoisetv_picoadk_v2", "rp2350", "DatanoiseTV", "PicoADK v2", "0x2e8a", "0x10ae", 250, "DATANOISETV_PICOADK_V2", 4, 0, "none")
# Degz Robotics
MakeBoard("degz_suibo", "rp2040", "Degz Robotics", "Suibo RP2040", "0x2e8a", "0xf00a", 250, "DEGZ_SUIBO_RP2040", 16, 0, "boot2_generic_03h_4_padded_checksum", board_url="https://www.degzrobotics.com/suibo")
@ -541,8 +559,8 @@ MakeBoard("challenger_2040_nfc", "rp2040", "iLabs", "Challenger 2040 NFC", "0x2e
MakeBoard("challenger_2040_uwb", "rp2040", "iLabs", "Challenger 2040 UWB", "0x2e8a", "0x1052", 500, "CHALLENGER_2040_UWB_RP2040", 8, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("connectivity_2040_lte_wifi_ble", "rp2040", "iLabs", "Connectivity 2040 LTE/WiFi/BLE", "0x2e8a", "0x107b", 500, "CONNECTIVITY_2040_LTE_WIFI_BLE_RP2040", 8, 0, "boot2_w25q080_2_padded_checksum", ["WIFIESPAT2"])
MakeBoard("ilabs_rpico32", "rp2040", "iLabs", "RPICO32", "0x2e8a", "0x1010", 250, "ILABS_2040_RPICO32_RP2040", 8, 0, "boot2_w25q080_2_padded_checksum", ["WIFIESPAT2"])
MakeBoard("challenger_2350_wifi6_ble5", "rp2350", "iLabs", "Challenger 2350 WiFi/BLE", "0x2e8a", "0x109a", 500, "CHALLENGER_2350_WIFI_BLE_RP2350", 8, 8, "boot2_generic_03h_2_padded_checksum")
MakeBoard("challenger_2350_bconnect", "rp2350", "iLabs", "Challenger 2350 BConnect", "0x2e8a", "0x109b", 500, "CHALLENGER_2350_BCONNECT_RP2350", 8, 8, "boot2_generic_03h_2_padded_checksum")
MakeBoard("challenger_2350_wifi6_ble5", "rp2350", "iLabs", "Challenger 2350 WiFi/BLE", "0x2e8a", "0x109a", 500, "CHALLENGER_2350_WIFI_BLE_RP2350", 8, 8, "none")
MakeBoard("challenger_2350_bconnect", "rp2350", "iLabs", "Challenger 2350 BConnect", "0x2e8a", "0x109b", 500, "CHALLENGER_2350_BCONNECT_RP2350", 8, 8, "none")
# Melopero
MakeBoard("melopero_cookie_rp2040", "rp2040", "Melopero", "Cookie RP2040", "0x2e8a", "0x1011", 250, "MELOPERO_COOKIE_RP2040", 8, 0, "boot2_w25q080_2_padded_checksum")
@ -566,11 +584,11 @@ MakeBoard("olimex_rp2040pico30_16mb", "rp2040", "Olimex", "RP2040-Pico30 16MB",
# Pimoroni
MakeBoard("pimoroni_pga2040", "rp2040", "Pimoroni", "PGA2040", "0x2e8a", "0x1008", 250, "PIMORONI_PGA2040", 8, 0, "boot2_w25q64jv_4_padded_checksum")
MakeBoard("pimoroni_pga2350", "rp2350", "Pimoroni", "PGA2350", "0x2e8a", "0x1018", 250, "PIMORONI_PGA2350", 16, 8, "boot2_w25q080_4_padded_checksum")
MakeBoard("pimoroni_pico_plus_2", "rp2350", "Pimoroni", "PicoPlus2", "0x2e8a", "0x100a", 500, "PIMORONI_PICO_PLUS_2", 16, 8, "boot2_generic_03h_4_padded_checksum")
MakeBoard("pimoroni_pga2350", "rp2350", "Pimoroni", "PGA2350", "0x2e8a", "0x1018", 250, "PIMORONI_PGA2350", 16, 8, "none")
MakeBoard("pimoroni_pico_plus_2", "rp2350", "Pimoroni", "PicoPlus2", "0x2e8a", "0x100a", 500, "PIMORONI_PICO_PLUS_2", 16, 8, "none")
MakeBoard("pimoroni_plasma2040", "rp2040", "Pimoroni", "Plasma2040", "0x2e8a", "0x100a", 500, "PIMORONI_PLASMA2040", 2, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("pimoroni_tiny2040", "rp2040", "Pimoroni", "Tiny2040", "0x2e8a", "0x100a", 500, "PIMORONI_TINY2040", 2, 0, "boot2_w25q64jv_4_padded_checksum")
MakeBoard("pimoroni_tiny2350", "rp2350", "Pimoroni", "Tiny2350", "0x2e8a", "0x100b", 500, "PIMORONI_TINY2350", 4, 0, "boot2_w25q080_4_padded_checksum")
MakeBoard("pimoroni_tiny2350", "rp2350", "Pimoroni", "Tiny2350", "0x2e8a", "0x100b", 500, "PIMORONI_TINY2350", 4, 0, "none")
#Pintronix
MakeBoard("pintronix_pinmax", "rp2040", "Pintronix", "PinMax", "0x2e8a", "0x9101", 250, "PINTRONIX_PINMAX", 4, 0, "boot2_w25q080_2_padded_checksum")
@ -590,13 +608,13 @@ MakeBoard("silicognition_rp2040_shim", "rp2040", "Silicognition", "RP2040-Shim",
# Solder Party
MakeBoard("solderparty_rp2040_stamp", "rp2040", "Solder Party", "RP2040 Stamp", "0x1209", "0xa182", 500, "SOLDERPARTY_RP2040_STAMP", 8, 0, "boot2_generic_03h_4_padded_checksum", None, "https://www.solder.party/docs/rp2040-stamp/")
MakeBoard("solderparty_rp2350_stamp", "rp2350", "Solder Party", "RP2350 Stamp", "0x1209", "0xa183", 500, "SOLDERPARTY_RP2350_STAMP", 16, 0, "boot2_generic_03h_2_padded_checksum", None, "https://www.solder.party/docs/rp2350-stamp/")
MakeBoard("solderparty_rp2350_stamp_xl", "rp2350", "Solder Party", "RP2350 Stamp XL", "0x1209", "0xa184", 500, "SOLDERPARTY_RP2350_STAMP_XL", 16, 0, "boot2_generic_03h_2_padded_checksum", None, "https://www.solder.party/docs/rp2350-stamp-xl/")
MakeBoard("solderparty_rp2350_stamp", "rp2350", "Solder Party", "RP2350 Stamp", "0x1209", "0xa183", 500, "SOLDERPARTY_RP2350_STAMP", 16, 0, "none", None, "https://www.solder.party/docs/rp2350-stamp/")
MakeBoard("solderparty_rp2350_stamp_xl", "rp2350", "Solder Party", "RP2350 Stamp XL", "0x1209", "0xa184", 500, "SOLDERPARTY_RP2350_STAMP_XL", 16, 0, "none", None, "https://www.solder.party/docs/rp2350-stamp-xl/")
# SparkFun
MakeBoard("sparkfun_micromodrp2040", "rp2040", "SparkFun", "MicroMod RP2040", "0x1b4f", "0x0026", 250, "SPARKFUN_MICROMOD_RP2040", 16, 0, "boot2_w25q080_2_padded_checksum")
MakeBoard("sparkfun_promicrorp2040", "rp2040", "SparkFun", "ProMicro RP2040", "0x1b4f", "0x0026", 250, "SPARKFUN_PROMICRO_RP2040", 16, 0, "boot2_generic_03h_4_padded_checksum")
MakeBoard("sparkfun_promicrorp2350", "rp2350", "SparkFun", "ProMicro RP2350", "0x1b4f", "0x0026", 250, "SPARKFUN_PROMICRO_RP2350", 16, 8, "boot2_w25q080_2_padded_checksum")
MakeBoard("sparkfun_promicrorp2350", "rp2350", "SparkFun", "ProMicro RP2350", "0x1b4f", "0x0026", 250, "SPARKFUN_PROMICRO_RP2350", 16, 8, "none")
MakeBoard("sparkfun_thingplusrp2040", "rp2040", "SparkFun", "Thing Plus RP2040", "0x1b4f", "0x0026", 250, "SPARKFUN_THINGPLUS_RP2040", 16, 0, "boot2_w25q080_2_padded_checksum")
# Upesy
@ -629,7 +647,7 @@ MakeBoard("wiznet_5500_evb_pico", "rp2040", "WIZnet", "W5500-EVB-Pico", "0x2e8a"
# Generic
MakeBoard("generic", "rp2040", "Generic", "RP2040", "0x2e8a", "0xf00a", 250, "GENERIC_RP2040", 16, 0, "boot2_generic_03h_4_padded_checksum")
MakeBoard("generic_rp2350", "rp2350", "Generic", "RP2350", "0x2e8a", "0xf00f", 250, "GENERIC_RP2350", 16, 8, "boot2_generic_03h_4_padded_checksum")
MakeBoard("generic_rp2350", "rp2350", "Generic", "RP2350", "0x2e8a", "0xf00f", 250, "GENERIC_RP2350", 16, 8, "none")
sys.stdout.close()
with open(os.path.abspath(os.path.dirname(__file__)) + '/../package/package_pico_index.template.json', 'w', newline='\n') as f:

View file

@ -120,7 +120,7 @@ if chip == "rp2040":
("PICO_FLASH_SIZE_BYTES", board.get("upload.maximum_size"))
]
)
elif chip == "rp2350":
elif (chip == "rp2350") or (chip == "rp2350-riscv"):
env.Append(
CPPDEFINES=[
("ARDUINO", 10810),
@ -139,11 +139,8 @@ elif chip == "rp2350":
("LIB_PICO_DIVIDER", "1"),
("LIB_PICO_DIVIDER_COMPILER", "1"),
("LIB_PICO_DOUBLE", "1"),
("LIB_PICO_DOUBLE_PICO", "1"),
("LIB_PICO_FIX_RP2040_USB_DEVICE_ENUMERATION", "1"),
("LIB_PICO_FLOAT", "1"),
("LIB_PICO_FLOAT_PICO", "1"),
("LIB_PICO_FLOAT_PICO_VFP", "1"),
("LIB_PICO_INT64_OPS", "1"),
("LIB_PICO_INT64_OPS_COMPILER", "1"),
("LIB_PICO_MEM_OPS", "1"),
@ -186,11 +183,29 @@ elif chip == "rp2350":
("PICO_FLASH_SIZE_BYTES", board.get("upload.maximum_size"))
]
)
if chip == "rp2350":
env.Append(
CPPDEFINES=[
("LIB_PICO_DOUBLE_PICO", "1"),
("LIB_PICO_FLOAT_PICO", "1"),
("LIB_PICO_FLOAT_PICO_VFP", "1")
]
)
elif chip == "rp2350-riscv":
env.Append(
CPPDEFINES=[
("LIB_PICO_DOUBLE_COMPILER", "1"),
("LIB_PICO_FLOAT_COMPILER", "1"),
("PICO_RISCV", "1")
]
)
if chip == "rp2040":
toolopts = ["-march=armv6-m", "-mcpu=cortex-m0plus", "-mthumb"]
elif chip == "rp2350":
toolopts = ["-mcpu=cortex-m33", "-mthumb", "-march=armv8-m.main+fp+dsp", "-mfloat-abi=softfp", "-mcmse"]
elif chip == "rp2350-riscv":
toolopts = ["-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb", "-mabi=ilp32"]
env.Append(
CCFLAGS=[
@ -229,7 +244,22 @@ env.Append(
"-Wl,--gc-sections",
"-Wl,--unresolved-symbols=report-all",
"-Wl,--warn-common",
"-Wl,--undefined=runtime_init_install_ram_vector_table"
"-Wl,--undefined=runtime_init_install_ram_vector_table",
"-Wl,--undefined=__pre_init_runtime_init_clocks",
"-Wl,--undefined=__pre_init_runtime_init_bootrom_reset",
"-Wl,--undefined=__pre_init_runtime_init_early_resets",
"-Wl,--undefined=__pre_init_runtime_init_usb_power_down",
"-Wl,--undefined=__pre_init_runtime_init_clocks",
"-Wl,--undefined=__pre_init_runtime_init_post_clock_resets",
"-Wl,--undefined=__pre_init_runtime_init_spin_locks_reset",
"-Wl,--undefined=__pre_init_runtime_init_boot_locks_reset",
"-Wl,--undefined=__pre_init_runtime_init_bootrom_locking_enable",
"-Wl,--undefined=__pre_init_runtime_init_mutex",
"-Wl,--undefined=__pre_init_runtime_init_default_alarm_pool",
"-Wl,--undefined=__pre_init_first_per_core_initializer",
"-Wl,--undefined=__pre_init_runtime_init_per_core_bootrom_reset"
"-Wl,--undefined=__pre_init_runtime_init_per_core_h3_irq_registers",
"-Wl,--undefined=__pre_init_runtime_init_per_core_irq_priorities"
] + toolopts,
LIBSOURCE_DIRS=[os.path.join(FRAMEWORK_DIR, "libraries")],
@ -263,7 +293,7 @@ else:
"-iprefix" + os.path.join(FRAMEWORK_DIR),
"@%s" % os.path.join(FRAMEWORK_DIR, "lib", chip, "platform_inc.txt"),
"@%s" % os.path.join(FRAMEWORK_DIR, "lib", "core_inc.txt")
])
] + toolopts)
def configure_usb_flags(cpp_defines):
if "USE_TINYUSB" in cpp_defines: