Compare commits

..
14 Commits
Author SHA1 Message Date
Earle F. Philhower, III 9480c2a55d Update version 2025-01-21 10:15:08 -08:00
Markus Gyger b3d0ccc7e3 Change duty cycle of PIO Tone to 50% (#2770) 2025-01-21 10:03:31 -08:00
Dryw Wade 5a34395f46 PIOProgram: Replace __pioHighGPIO with pio_get_gpio_base() (#2769)
Fixes #2768
2025-01-21 09:33:04 -08:00
Earle F. Philhower, III e20c973bf5 SDIO doesn't take a clock speed parameter (#2766)
It's fixed by the PIO program and GPIO slew rates encoded in the SdFAT
driver.  Remove the parameter from the SD/SDFS begins.
2025-01-18 09:19:39 -08:00
Earle F. Philhower, III 452ef17174 Replace ESP8266SdFat w/SdFat 2.3.0, SDIO, ExFAT (#2764)
* Replace ESP8266SdFat w/SdFat 2.3.0, add SDIO and ExFAT support

Remove ESP8266SdFat fork and replaces with upstream SdFat to simplify
maintenance.

This 2.3.0 version adds SDIO support and enables exFAT support.
Also upgraded FAT filename support to 256 chars, identical to  LittleFS.

* Add SDIO support to SD and SDFS, documentation, and examples

* Update SD examples to all support SPI0, SPI1, or SDIO
2025-01-17 15:22:39 -08:00
Earle F. Philhower, III 4785c16243 Update to LittleFS v2.10.1 (#2762)
Minor behavior changes WRT path handling with trailing slashes, but
should not affect anything on the Arduino side.
2025-01-17 10:18:32 -08:00
Earle F. Philhower, III 2506b8e1d1 Update to Adafruit TinyUSB 3.4.2 (#2761)
Should be no change, just keeping in pace with upstream.
2025-01-17 10:03:22 -08:00
Earle F. Philhower, III 7bfe25b8aa Remove SDK C++ new/delete, duplicated objects (#2760)
* Remove Pico-SDK C++ exception-override new/delete

We support exceptions on and off, but the cxx_options file in the
SDK implemented a single override to new/delete.

Remove it so we will use GCC's build-in operator new/delete
which will be correct for either option (2 different libstdc++
versions are shipped as part of the toolchain).

* Remove duplicated SDK files

The SDK will link in the same compilation unit in the LWIP builds.
Remove them to shrink the repo size by ~28MB.
2025-01-16 15:02:01 -08:00
SomebodyOdd 2348051026 A2DPSink: Remove stubs, fix volume and connect callbacks (#2757)
* A2DPSink: Remove Stream implementation and onTransmit
* A2DPSink: Fix onConnect and onVolume callbacks
* A2DPSink: Remove transmit callback field
2025-01-16 09:37:22 -08:00
Dryw WadeandKirk Benell b4001bfb0e Add SparkFun IoT Node LoRaWAN (#2745)
* added files to support the SparkFun IoT Node LoRaWAN board

* added rp2053 to our lorawan board defs

* adding updates/new files generated for the iot node board

* Add SPI swap

* Remove incorrect comment from IoT Node LoRawAN

* Replace missing line in boards.txt

* Re-run makeboards.py for IoT Node LoRaWAN

---------

Co-authored-by: Kirk Benell <kirk.benell@sparkfun.com>
2025-01-15 09:47:55 -08:00
Earle F. Philhower, III 0655b7d5b6 Fix ADCInput clocks for multiple inputs (#2755)
When multiple inputs were active, the frequency was being scaled two
times resulting in incorrect sampling speed.  Correct to only scale
the calculation and not the stored value (which is used in `begin`).

Fixes #2754
2025-01-14 15:58:45 -08:00
Earle F. Philhower, III 83b8d122d7 Restore Bluetooth TLV on Pico2/RPiWiFi boards (#2753) 2025-01-13 17:38:51 -08:00
timw01 8caa590f5c Correct return from NTP.waitSet() (#2736)
Fixes #2735
2025-01-04 17:06:26 -08:00
Earle F. Philhower, III ec528d34f8 Remove unneeded SDK files from libpico/etc. (#2733)
Pico-SDK changed the output extension of their compilation from "x.c.obj"
to "x.c.o" meaning the removed Newlib and STDIO SDK wrappers were still
being linked in certain situations.  Update make-libpico Cmakefile to
remove the new names.

Fixes debug `printf` output.
2025-01-03 10:42:47 -08:00
63 changed files with 749 additions and 164 deletions
+3 -3
View File
@@ -10,9 +10,6 @@
[submodule "libraries/LittleFS/lib/littlefs"]
path = libraries/LittleFS/lib/littlefs
url = https://github.com/littlefs-project/littlefs.git
[submodule "libraries/SdFat"]
path = libraries/ESP8266SdFat
url = https://github.com/earlephilhower/ESP8266SdFat.git
[submodule "libraries/Keyboard"]
path = libraries/HID_Keyboard
url = https://github.com/earlephilhower/Keyboard.git
@@ -49,3 +46,6 @@
[submodule "libraries/ESPHost"]
path = libraries/ESPHost
url = https://github.com/Networking-for-Arduino/ESPHost.git
[submodule "libraries/SdFat"]
path = libraries/SdFat
url = https://github.com/greiman/SdFat.git
+345
View File
@@ -27668,6 +27668,351 @@ sparkfun_thingplusrp2350.menu.uploadmethod.picoprobe_cmsis_dap.upload.maximum_da
sparkfun_thingplusrp2350.menu.uploadmethod.picoprobe_cmsis_dap.upload.tool=picoprobe_cmsis_dap
sparkfun_thingplusrp2350.menu.uploadmethod.picoprobe_cmsis_dap.upload.tool.default=picoprobe_cmsis_dap
# -----------------------------------
# SparkFun IoT Node LoRaWAN
# -----------------------------------
sparkfun_iotnode_lorawanrp2350.name=SparkFun IoT Node LoRaWAN
sparkfun_iotnode_lorawanrp2350.vid.0=0x1b4f
sparkfun_iotnode_lorawanrp2350.pid.0=0x0044
sparkfun_iotnode_lorawanrp2350.vid.1=0x1b4f
sparkfun_iotnode_lorawanrp2350.pid.1=0x0144
sparkfun_iotnode_lorawanrp2350.vid.2=0x1b4f
sparkfun_iotnode_lorawanrp2350.pid.2=0x4044
sparkfun_iotnode_lorawanrp2350.vid.3=0x1b4f
sparkfun_iotnode_lorawanrp2350.pid.3=0x4144
sparkfun_iotnode_lorawanrp2350.vid.4=0x1b4f
sparkfun_iotnode_lorawanrp2350.pid.4=0x8044
sparkfun_iotnode_lorawanrp2350.vid.5=0x1b4f
sparkfun_iotnode_lorawanrp2350.pid.5=0x8144
sparkfun_iotnode_lorawanrp2350.vid.6=0x1b4f
sparkfun_iotnode_lorawanrp2350.pid.6=0xc044
sparkfun_iotnode_lorawanrp2350.vid.7=0x1b4f
sparkfun_iotnode_lorawanrp2350.pid.7=0xc144
sparkfun_iotnode_lorawanrp2350.upload_port.0.vid=0x1b4f
sparkfun_iotnode_lorawanrp2350.upload_port.0.pid=0x0044
sparkfun_iotnode_lorawanrp2350.upload_port.1.vid=0x1b4f
sparkfun_iotnode_lorawanrp2350.upload_port.1.pid=0x0144
sparkfun_iotnode_lorawanrp2350.upload_port.2.vid=0x1b4f
sparkfun_iotnode_lorawanrp2350.upload_port.2.pid=0x4044
sparkfun_iotnode_lorawanrp2350.upload_port.3.vid=0x1b4f
sparkfun_iotnode_lorawanrp2350.upload_port.3.pid=0x4144
sparkfun_iotnode_lorawanrp2350.upload_port.4.vid=0x1b4f
sparkfun_iotnode_lorawanrp2350.upload_port.4.pid=0x8044
sparkfun_iotnode_lorawanrp2350.upload_port.5.vid=0x1b4f
sparkfun_iotnode_lorawanrp2350.upload_port.5.pid=0x8144
sparkfun_iotnode_lorawanrp2350.upload_port.6.vid=0x1b4f
sparkfun_iotnode_lorawanrp2350.upload_port.6.pid=0xc044
sparkfun_iotnode_lorawanrp2350.upload_port.7.vid=0x1b4f
sparkfun_iotnode_lorawanrp2350.upload_port.7.pid=0xc144
sparkfun_iotnode_lorawanrp2350.build.usbvid=-DUSBD_VID=0x1b4f
sparkfun_iotnode_lorawanrp2350.build.usbpid=-DUSBD_PID=0x0044
sparkfun_iotnode_lorawanrp2350.build.usbpwr=-DUSBD_MAX_POWER_MA=250
sparkfun_iotnode_lorawanrp2350.build.board=SPARKFUN_IOTNODE_LORAWAN_RP2350
sparkfun_iotnode_lorawanrp2350.build.variant=sparkfun_iotnode_lorawanrp2350
sparkfun_iotnode_lorawanrp2350.upload.maximum_size=16777216
sparkfun_iotnode_lorawanrp2350.upload.wait_for_upload_port=true
sparkfun_iotnode_lorawanrp2350.upload.erase_cmd=
sparkfun_iotnode_lorawanrp2350.serial.disableDTR=false
sparkfun_iotnode_lorawanrp2350.serial.disableRTS=false
sparkfun_iotnode_lorawanrp2350.build.f_cpu=125000000
sparkfun_iotnode_lorawanrp2350.build.led=
sparkfun_iotnode_lorawanrp2350.build.core=rp2040
sparkfun_iotnode_lorawanrp2350.build.ldscript=memmap_default.ld
sparkfun_iotnode_lorawanrp2350.build.boot2=none
sparkfun_iotnode_lorawanrp2350.build.usb_manufacturer="SparkFun"
sparkfun_iotnode_lorawanrp2350.build.usb_product="IoT Node LoRaWAN"
sparkfun_iotnode_lorawanrp2350.build.psram_length=0x800000
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_0=16MB (no FS)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_0.upload.maximum_size=16769024
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_0.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_0.build.flash_length=16769024
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_0.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_0.build.fs_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_0.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_65536=16MB (Sketch: 16320KB, FS: 64KB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_65536.upload.maximum_size=16703488
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_65536.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_65536.build.flash_length=16703488
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_65536.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_65536.build.fs_start=285138944
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_65536.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_131072=16MB (Sketch: 16256KB, FS: 128KB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_131072.upload.maximum_size=16637952
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_131072.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_131072.build.flash_length=16637952
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_131072.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_131072.build.fs_start=285073408
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_131072.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_262144=16MB (Sketch: 16128KB, FS: 256KB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_262144.upload.maximum_size=16506880
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_262144.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_262144.build.flash_length=16506880
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_262144.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_262144.build.fs_start=284942336
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_262144.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_524288=16MB (Sketch: 15872KB, FS: 512KB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_524288.upload.maximum_size=16244736
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_524288.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_524288.build.flash_length=16244736
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_524288.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_524288.build.fs_start=284680192
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_524288.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_1048576=16MB (Sketch: 15MB, FS: 1MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_1048576.upload.maximum_size=15720448
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_1048576.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_1048576.build.flash_length=15720448
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_1048576.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_1048576.build.fs_start=284155904
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_1048576.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_2097152=16MB (Sketch: 14MB, FS: 2MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_2097152.upload.maximum_size=14671872
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_2097152.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_2097152.build.flash_length=14671872
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_2097152.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_2097152.build.fs_start=283107328
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_2097152.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_3145728=16MB (Sketch: 13MB, FS: 3MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_3145728.upload.maximum_size=13623296
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_3145728.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_3145728.build.flash_length=13623296
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_3145728.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_3145728.build.fs_start=282058752
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_3145728.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_4194304=16MB (Sketch: 12MB, FS: 4MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_4194304.upload.maximum_size=12574720
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_4194304.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_4194304.build.flash_length=12574720
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_4194304.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_4194304.build.fs_start=281010176
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_4194304.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_5242880=16MB (Sketch: 11MB, FS: 5MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_5242880.upload.maximum_size=11526144
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_5242880.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_5242880.build.flash_length=11526144
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_5242880.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_5242880.build.fs_start=279961600
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_5242880.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_6291456=16MB (Sketch: 10MB, FS: 6MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_6291456.upload.maximum_size=10477568
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_6291456.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_6291456.build.flash_length=10477568
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_6291456.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_6291456.build.fs_start=278913024
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_6291456.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_7340032=16MB (Sketch: 9MB, FS: 7MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_7340032.upload.maximum_size=9428992
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_7340032.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_7340032.build.flash_length=9428992
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_7340032.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_7340032.build.fs_start=277864448
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_7340032.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_8388608=16MB (Sketch: 8MB, FS: 8MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_8388608.upload.maximum_size=8380416
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_8388608.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_8388608.build.flash_length=8380416
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_8388608.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_8388608.build.fs_start=276815872
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_8388608.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_9437184=16MB (Sketch: 7MB, FS: 9MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_9437184.upload.maximum_size=7331840
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_9437184.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_9437184.build.flash_length=7331840
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_9437184.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_9437184.build.fs_start=275767296
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_9437184.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_10485760=16MB (Sketch: 6MB, FS: 10MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_10485760.upload.maximum_size=6283264
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_10485760.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_10485760.build.flash_length=6283264
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_10485760.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_10485760.build.fs_start=274718720
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_10485760.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_11534336=16MB (Sketch: 5MB, FS: 11MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_11534336.upload.maximum_size=5234688
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_11534336.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_11534336.build.flash_length=5234688
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_11534336.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_11534336.build.fs_start=273670144
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_11534336.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_12582912=16MB (Sketch: 4MB, FS: 12MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_12582912.upload.maximum_size=4186112
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_12582912.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_12582912.build.flash_length=4186112
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_12582912.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_12582912.build.fs_start=272621568
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_12582912.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_13631488=16MB (Sketch: 3MB, FS: 13MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_13631488.upload.maximum_size=3137536
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_13631488.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_13631488.build.flash_length=3137536
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_13631488.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_13631488.build.fs_start=271572992
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_13631488.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_14680064=16MB (Sketch: 2MB, FS: 14MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_14680064.upload.maximum_size=2088960
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_14680064.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_14680064.build.flash_length=2088960
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_14680064.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_14680064.build.fs_start=270524416
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_14680064.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_15728640=16MB (Sketch: 1MB, FS: 15MB)
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_15728640.upload.maximum_size=1040384
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_15728640.build.flash_total=16777216
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_15728640.build.flash_length=1040384
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_15728640.build.eeprom_start=285204480
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_15728640.build.fs_start=269475840
sparkfun_iotnode_lorawanrp2350.menu.flash.16777216_15728640.build.fs_end=285204480
sparkfun_iotnode_lorawanrp2350.menu.arch.arm=ARM
sparkfun_iotnode_lorawanrp2350.menu.arch.arm.build.chip=rp2350
sparkfun_iotnode_lorawanrp2350.menu.arch.arm.build.toolchain=arm-none-eabi
sparkfun_iotnode_lorawanrp2350.menu.arch.arm.build.toolchainpkg=pqt-gcc
sparkfun_iotnode_lorawanrp2350.menu.arch.arm.build.toolchainopts=-mcpu=cortex-m33 -mthumb -march=armv8-m.main+fp+dsp -mfloat-abi=softfp -mcmse
sparkfun_iotnode_lorawanrp2350.menu.arch.arm.build.uf2family=--family rp2350-arm-s --abs-block
sparkfun_iotnode_lorawanrp2350.menu.arch.arm.build.mcu=cortex-m33
sparkfun_iotnode_lorawanrp2350.menu.arch.riscv=RISC-V
sparkfun_iotnode_lorawanrp2350.menu.arch.riscv.build.chip=rp2350-riscv
sparkfun_iotnode_lorawanrp2350.menu.arch.riscv.build.toolchain=riscv32-unknown-elf
sparkfun_iotnode_lorawanrp2350.menu.arch.riscv.build.toolchainpkg=pqt-gcc-riscv
sparkfun_iotnode_lorawanrp2350.menu.arch.riscv.build.toolchainopts=-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32
sparkfun_iotnode_lorawanrp2350.menu.arch.riscv.build.uf2family=--family rp2350-riscv --abs-block
sparkfun_iotnode_lorawanrp2350.menu.arch.riscv.build.mcu=rv32imac
sparkfun_iotnode_lorawanrp2350.menu.freq.150=150 MHz
sparkfun_iotnode_lorawanrp2350.menu.freq.150.build.f_cpu=150000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.50=50 MHz
sparkfun_iotnode_lorawanrp2350.menu.freq.50.build.f_cpu=50000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.100=100 MHz
sparkfun_iotnode_lorawanrp2350.menu.freq.100.build.f_cpu=100000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.120=120 MHz
sparkfun_iotnode_lorawanrp2350.menu.freq.120.build.f_cpu=120000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.125=125 MHz
sparkfun_iotnode_lorawanrp2350.menu.freq.125.build.f_cpu=125000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.128=128 MHz
sparkfun_iotnode_lorawanrp2350.menu.freq.128.build.f_cpu=128000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.133=133 MHz
sparkfun_iotnode_lorawanrp2350.menu.freq.133.build.f_cpu=133000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.175=175 MHz (Overclock)
sparkfun_iotnode_lorawanrp2350.menu.freq.175.build.f_cpu=175000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.200=200 MHz (Overclock)
sparkfun_iotnode_lorawanrp2350.menu.freq.200.build.f_cpu=200000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.225=225 MHz (Overclock)
sparkfun_iotnode_lorawanrp2350.menu.freq.225.build.f_cpu=225000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.240=240 MHz (Overclock)
sparkfun_iotnode_lorawanrp2350.menu.freq.240.build.f_cpu=240000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.250=250 MHz (Overclock)
sparkfun_iotnode_lorawanrp2350.menu.freq.250.build.f_cpu=250000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.275=275 MHz (Overclock)
sparkfun_iotnode_lorawanrp2350.menu.freq.275.build.f_cpu=275000000L
sparkfun_iotnode_lorawanrp2350.menu.freq.300=300 MHz (Overclock)
sparkfun_iotnode_lorawanrp2350.menu.freq.300.build.f_cpu=300000000L
sparkfun_iotnode_lorawanrp2350.menu.opt.Small=Small (-Os) (standard)
sparkfun_iotnode_lorawanrp2350.menu.opt.Small.build.flags.optimize=-Os
sparkfun_iotnode_lorawanrp2350.menu.opt.Optimize=Optimize (-O)
sparkfun_iotnode_lorawanrp2350.menu.opt.Optimize.build.flags.optimize=-O
sparkfun_iotnode_lorawanrp2350.menu.opt.Optimize2=Optimize More (-O2)
sparkfun_iotnode_lorawanrp2350.menu.opt.Optimize2.build.flags.optimize=-O2
sparkfun_iotnode_lorawanrp2350.menu.opt.Optimize3=Optimize Even More (-O3)
sparkfun_iotnode_lorawanrp2350.menu.opt.Optimize3.build.flags.optimize=-O3
sparkfun_iotnode_lorawanrp2350.menu.opt.Fast=Fast (-Ofast) (maybe slower)
sparkfun_iotnode_lorawanrp2350.menu.opt.Fast.build.flags.optimize=-Ofast
sparkfun_iotnode_lorawanrp2350.menu.opt.Debug=Debug (-Og)
sparkfun_iotnode_lorawanrp2350.menu.opt.Debug.build.flags.optimize=-Og
sparkfun_iotnode_lorawanrp2350.menu.opt.Disabled=Disabled (-O0)
sparkfun_iotnode_lorawanrp2350.menu.opt.Disabled.build.flags.optimize=-O0
sparkfun_iotnode_lorawanrp2350.menu.profile.Disabled=Disabled
sparkfun_iotnode_lorawanrp2350.menu.profile.Disabled.build.flags.profile=
sparkfun_iotnode_lorawanrp2350.menu.profile.Enabled=Enabled
sparkfun_iotnode_lorawanrp2350.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE
sparkfun_iotnode_lorawanrp2350.menu.rtti.Disabled=Disabled
sparkfun_iotnode_lorawanrp2350.menu.rtti.Disabled.build.flags.rtti=-fno-rtti
sparkfun_iotnode_lorawanrp2350.menu.rtti.Enabled=Enabled
sparkfun_iotnode_lorawanrp2350.menu.rtti.Enabled.build.flags.rtti=
sparkfun_iotnode_lorawanrp2350.menu.stackprotect.Disabled=Disabled
sparkfun_iotnode_lorawanrp2350.menu.stackprotect.Disabled.build.flags.stackprotect=
sparkfun_iotnode_lorawanrp2350.menu.stackprotect.Enabled=Enabled
sparkfun_iotnode_lorawanrp2350.menu.stackprotect.Enabled.build.flags.stackprotect=-fstack-protector
sparkfun_iotnode_lorawanrp2350.menu.exceptions.Disabled=Disabled
sparkfun_iotnode_lorawanrp2350.menu.exceptions.Disabled.build.flags.exceptions=-fno-exceptions
sparkfun_iotnode_lorawanrp2350.menu.exceptions.Disabled.build.flags.libstdcpp=-lstdc++
sparkfun_iotnode_lorawanrp2350.menu.exceptions.Enabled=Enabled
sparkfun_iotnode_lorawanrp2350.menu.exceptions.Enabled.build.flags.exceptions=-fexceptions
sparkfun_iotnode_lorawanrp2350.menu.exceptions.Enabled.build.flags.libstdcpp=-lstdc++-exc
sparkfun_iotnode_lorawanrp2350.menu.dbgport.Disabled=Disabled
sparkfun_iotnode_lorawanrp2350.menu.dbgport.Disabled.build.debug_port=
sparkfun_iotnode_lorawanrp2350.menu.dbgport.Serial=Serial
sparkfun_iotnode_lorawanrp2350.menu.dbgport.Serial.build.debug_port=-DDEBUG_RP2040_PORT=Serial
sparkfun_iotnode_lorawanrp2350.menu.dbgport.Serial1=Serial1
sparkfun_iotnode_lorawanrp2350.menu.dbgport.Serial1.build.debug_port=-DDEBUG_RP2040_PORT=Serial1
sparkfun_iotnode_lorawanrp2350.menu.dbgport.Serial2=Serial2
sparkfun_iotnode_lorawanrp2350.menu.dbgport.Serial2.build.debug_port=-DDEBUG_RP2040_PORT=Serial2
sparkfun_iotnode_lorawanrp2350.menu.dbgport.SerialSemi=SerialSemi
sparkfun_iotnode_lorawanrp2350.menu.dbgport.SerialSemi.build.debug_port=-DDEBUG_RP2040_PORT=SerialSemi
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.None=None
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.None.build.debug_level=
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.Core=Core
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.Core.build.debug_level=-DDEBUG_RP2040_CORE
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.SPI=SPI
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.SPI.build.debug_level=-DDEBUG_RP2040_SPI
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.Wire=Wire
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.Wire.build.debug_level=-DDEBUG_RP2040_WIRE
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.Bluetooth=Bluetooth
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.Bluetooth.build.debug_level=-DDEBUG_RP2040_BLUETOOTH
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.All=All
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE -DDEBUG_RP2040_BLUETOOTH
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.NDEBUG=NDEBUG
sparkfun_iotnode_lorawanrp2350.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
sparkfun_iotnode_lorawanrp2350.menu.usbstack.picosdk=Pico SDK
sparkfun_iotnode_lorawanrp2350.menu.usbstack.picosdk.build.usbstack_flags=
sparkfun_iotnode_lorawanrp2350.menu.usbstack.tinyusb=Adafruit TinyUSB
sparkfun_iotnode_lorawanrp2350.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
sparkfun_iotnode_lorawanrp2350.menu.usbstack.tinyusb_host=Adafruit TinyUSB Host (native)
sparkfun_iotnode_lorawanrp2350.menu.usbstack.tinyusb_host.build.usbstack_flags=-DUSE_TINYUSB -DUSE_TINYUSB_HOST "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
sparkfun_iotnode_lorawanrp2350.menu.usbstack.nousb=No USB
sparkfun_iotnode_lorawanrp2350.menu.usbstack.nousb.build.usbstack_flags="-DNO_USB -DDISABLE_USB_SERIAL -I{runtime.platform.path}/tools/libpico"
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4only=IPv4 Only
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4only.build.libpicow=libipv4.a
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4only.build.libpicowdefs=-DLWIP_IPV6=0 -DLWIP_IPV4=1
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6=IPv4 + IPv6
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6.build.libpicow=libipv4-ipv6.a
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6.build.libpicowdefs=-DLWIP_IPV6=1 -DLWIP_IPV4=1
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4btcble=IPv4 + Bluetooth
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4btcble.build.libpicow=libipv4-bt.a
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4btcble.build.libpicowdefs=-DLWIP_IPV6=0 -DLWIP_IPV4=1 -DENABLE_CLASSIC=1 -DENABLE_BLE=1
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6btcble=IPv4 + IPv6 + Bluetooth
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6btcble.build.libpicow=libipv4-ipv6-bt.a
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6btcble.build.libpicowdefs=-DLWIP_IPV6=1 -DLWIP_IPV4=1 -DENABLE_CLASSIC=1 -DENABLE_BLE=1
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4onlybig=IPv4 Only - 32K
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4onlybig.build.libpicow=libipv4-big.a
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4onlybig.build.libpicowdefs=-DLWIP_IPV6=0 -DLWIP_IPV4=1 -D__LWIP_MEMMULT=2
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6big=IPv4 + IPv6 - 32K
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6big.build.libpicow=libipv4-ipv6-big.a
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6big.build.libpicowdefs=-DLWIP_IPV6=1 -DLWIP_IPV4=1 -D__LWIP_MEMMULT=2
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4btcblebig=IPv4 + Bluetooth - 32K
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4btcblebig.build.libpicow=libipv4-bt-big.a
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4btcblebig.build.libpicowdefs=-DLWIP_IPV6=0 -DLWIP_IPV4=1 -DENABLE_CLASSIC=1 -DENABLE_BLE=1 -D__LWIP_MEMMULT=2
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6btcblebig=IPv4 + IPv6 + Bluetooth - 32K
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6btcblebig.build.libpicow=libipv4-ipv6-bt-big.a
sparkfun_iotnode_lorawanrp2350.menu.ipbtstack.ipv4ipv6btcblebig.build.libpicowdefs=-DLWIP_IPV6=1 -DLWIP_IPV4=1 -DENABLE_CLASSIC=1 -DENABLE_BLE=1 -D__LWIP_MEMMULT=2
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.default=Default (UF2)
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.default.build.ram_length=512k
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.default.build.debugscript=picoprobe_cmsis_dap.tcl
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.default.upload.maximum_data_size=524288
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.default.upload.tool=uf2conv
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.default.upload.tool.default=uf2conv
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.default.upload.tool.network=uf2conv-network
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picotool=Picotool
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picotool.build.ram_length=512k
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picotool.build.debugscript=picoprobe.tcl
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picotool.build.picodebugflags=-DENABLE_PICOTOOL_USB
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picotool.upload.maximum_data_size=524288
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picotool.upload.tool=picotool
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picotool.upload.tool.default=picotool
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picoprobe_cmsis_dap=Picoprobe/Debugprobe (CMSIS-DAP)
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picoprobe_cmsis_dap.build.ram_length=512k
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picoprobe_cmsis_dap.build.debugscript=picoprobe_cmsis_dap.tcl
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picoprobe_cmsis_dap.upload.maximum_data_size=524288
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picoprobe_cmsis_dap.upload.tool=picoprobe_cmsis_dap
sparkfun_iotnode_lorawanrp2350.menu.uploadmethod.picoprobe_cmsis_dap.upload.tool.default=picoprobe_cmsis_dap
# -----------------------------------
# Seeed INDICATOR RP2040
# -----------------------------------
+7 -9
View File
@@ -33,7 +33,6 @@
static std::map<const pio_program_t *, int> __pioMap[PIOCNT];
static bool __pioAllocated[PIOCNT];
static bool __pioHighGPIO[PIOCNT];
auto_init_mutex(_pioMutex);
PIOProgram::PIOProgram(const pio_program_t *pgm) {
@@ -64,16 +63,16 @@ bool PIOProgram::prepare(PIO *pio, int *sm, int *offset, int start, int cnt) {
return ret;
#endif
bool needsHigh = (start + cnt) >= 32;
DEBUGV("PIOProgram %p: Searching for high=%d, pins %d-%d\n", _pgm, needsHigh ? 1 : 0, start, start + cnt - 1);
uint gpioBaseNeeded = ((start + cnt) >= 32) ? 16 : 0;
DEBUGV("PIOProgram %p: Searching for base=%d, pins %d-%d\n", _pgm, gpioBaseNeeded, start, start + cnt - 1);
// If it's already loaded into PIO IRAM, try and allocate in that specific PIO
for (int o = 0; o < PIOCNT; o++) {
auto p = __pioMap[o].find(_pgm);
if ((p != __pioMap[o].end()) && (__pioHighGPIO[o] == needsHigh)) {
if ((p != __pioMap[o].end()) && (pio_get_gpio_base(pio_get_instance(o)) == gpioBaseNeeded)) {
int idx = pio_claim_unused_sm(pi[o], false);
if (idx >= 0) {
DEBUGV("PIOProgram %p: Reusing IMEM ON PIO %p(high=%d) for pins %d-%d\n", _pgm, pi[o], __pioHighGPIO[o] ? 1 : 0, start, start + cnt - 1);
DEBUGV("PIOProgram %p: Reusing IMEM ON PIO %p(base=%d) for pins %d-%d\n", _pgm, pi[o], pio_get_gpio_base(pio_get_instance(o)), start, start + cnt - 1);
_pio = pi[o];
_sm = idx;
*pio = pi[o];
@@ -86,12 +85,12 @@ bool PIOProgram::prepare(PIO *pio, int *sm, int *offset, int start, int cnt) {
// Not in any PIO IRAM, so try and add
for (int o = 0; o < PIOCNT; o++) {
if (__pioAllocated[o] && (__pioHighGPIO[o] == needsHigh)) {
if (__pioAllocated[o] && (pio_get_gpio_base(pio_get_instance(o)) == gpioBaseNeeded)) {
DEBUGV("PIOProgram: Checking PIO %p\n", pi[o]);
if (pio_can_add_program(pi[o], _pgm)) {
int idx = pio_claim_unused_sm(pi[o], false);
if (idx >= 0) {
DEBUGV("PIOProgram %p: Adding IMEM ON PIO %p(high=%d) for pins %d-%d\n", _pgm, pi[o], __pioHighGPIO[o] ? 1 : 0, start, start + cnt - 1);
DEBUGV("PIOProgram %p: Adding IMEM ON PIO %p(base=%d) for pins %d-%d\n", _pgm, pi[o], pio_get_gpio_base(pio_get_instance(o)), start, start + cnt - 1);
int off = pio_add_program(pi[o], _pgm);
__pioMap[o].insert({_pgm, off});
_pio = pi[o];
@@ -123,8 +122,7 @@ bool PIOProgram::prepare(PIO *pio, int *sm, int *offset, int start, int cnt) {
}
assert(!__pioAllocated[o]);
__pioAllocated[o] = true;
__pioHighGPIO[o] = needsHigh;
DEBUGV("PIOProgram %p: Allocating new PIO %p(high=%d) for pins %d-%d\n", _pgm, pi[o], __pioHighGPIO[o] ? 1 : 0, start, start + cnt - 1);
DEBUGV("PIOProgram %p: Allocating new PIO %p(base=%d) for pins %d-%d\n", _pgm, pi[o], pio_get_gpio_base(pio_get_instance(o)), start, start + cnt - 1);
__pioMap[o].insert({_pgm, off});
_pio = pi[o];
_sm = idx;
+2 -2
View File
@@ -1,5 +1,5 @@
#pragma once
#define ARDUINO_PICO_MAJOR 4
#define ARDUINO_PICO_MINOR 4
#define ARDUINO_PICO_REVISION 1
#define ARDUINO_PICO_VERSION_STR "4.4.1"
#define ARDUINO_PICO_REVISION 2
#define ARDUINO_PICO_VERSION_STR "4.4.2"
+2 -5
View File
@@ -71,10 +71,7 @@ void tone(uint8_t pin, unsigned int frequency, unsigned long duration) {
return; // Weird deadlock case
}
int us = 1'000'000 / frequency / 2;
if (us < 5) {
us = 5;
}
unsigned int delay = (RP2040::f_cpu() + frequency) / (frequency * 2) - 3; // rounded
auto entry = _toneMap.find(pin);
Tone *newTone;
if (entry == _toneMap.end()) {
@@ -99,7 +96,7 @@ void tone(uint8_t pin, unsigned int frequency, unsigned long duration) {
tone2_program_init(newTone->pio, newTone->sm, newTone->off, pin);
}
pio_sm_clear_fifos(newTone->pio, newTone->sm); // Remove any old updates that haven't yet taken effect
pio_sm_put_blocking(newTone->pio, newTone->sm, RP2040::usToPIOCycles(us));
pio_sm_put_blocking(newTone->pio, newTone->sm, delay);
pio_sm_exec(newTone->pio, newTone->sm, pio_encode_pull(false, false));
pio_sm_exec(newTone->pio, newTone->sm, pio_encode_mov(pio_x, pio_osr));
pio_sm_set_enabled(newTone->pio, newTone->sm, true);
@@ -4,7 +4,7 @@
SPDX-License-Identifier: BSD-3-Clause
*/
#if defined(ARDUINO_RASPBERRY_PI_PICO_W)
#if defined(PICO_CYW43_SUPPORTED)
#include <btstack.h>
#include <pico/btstack_flash_bank.h>
#include <hardware/flash.h>
+5 -4
View File
@@ -18,7 +18,7 @@
; Side-set pin 0 is used for Tone output
; OSR == Halfcycle count
; OSR == Halfcycle count - 3
.program tone2
.side_set 1 opt
@@ -26,10 +26,11 @@
; pull ; TXFIFO -> OSR, or X -> OSR if no new period
; mov x, osr ; OSR -> X
.wrap_target
high:
pull noblock ; Potentially grab new HALFCYCLECOUNT, OTW copy from backup in X
mov x, osr ; OSR -> X
mov y, osr side 1 ; HALFCYCLECOUNT -> Y
mov x, osr side 1 ; OSR -> X
mov y, osr ; HALFCYCLECOUNT -> Y
highloop:
jmp y-- highloop ; while (y--) { /* noop delay */ }
@@ -38,7 +39,7 @@ low:
lowloop:
jmp y-- lowloop ; while (y--) { /* noop delay */ }
jmp high ; GOTO high
.wrap ; GOTO high
% c-sdk {
static inline void tone2_program_init(PIO pio, uint sm, uint offset, uint pin) {
+7 -8
View File
@@ -13,27 +13,26 @@
// ----- //
#define tone2_wrap_target 0
#define tone2_wrap 6
#define tone2_wrap 5
#define tone2_pio_version 0
static const uint16_t tone2_program_instructions[] = {
// .wrap_target
// .wrap_target
0x8080, // 0: pull noblock
0xa027, // 1: mov x, osr
0xb847, // 2: mov y, osr side 1
0xb827, // 1: mov x, osr side 1
0xa047, // 2: mov y, osr
0x0083, // 3: jmp y--, 3
0xb047, // 4: mov y, osr side 0
0x0085, // 5: jmp y--, 5
0x0000, // 6: jmp 0
// .wrap
// .wrap
};
#if !PICO_NO_HARDWARE
static const struct pio_program tone2_program = {
.instructions = tone2_program_instructions,
.length = 7,
.length = 6,
.origin = -1,
.pio_version = 0,
.pio_version = tone2_pio_version,
#if PICO_PIO_VERSION > 0
.used_gpio_ranges = 0x0
#endif
+2 -2
View File
@@ -54,9 +54,9 @@ author = u'Earle F. Philhower, III'
# built documents.
#
# The short X.Y version.
version = u'4.4.1'
version = u'4.4.2'
# The full version, including alpha/beta/rc tags.
release = u'4.4.1'
release = u'4.4.2'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
+17
View File
@@ -174,6 +174,23 @@ second SPI port, ``SPI1``. Just use the following call in place of
SD.begin(cspin, SPI1);
Enabling SDIO operation for SD
------------------------------
SDIO support is available thanks to SdFat implementing a PIO-based SDIO controller.
This mode can significantly increase IO performance to SD cards but it requires that
all 4 DAT0..DAT3 lines to be wired to the Pico (most SD breakout boards only provide
1-but SPI mode of operation).
To enable SDIO mode, simply specify the SD_CLK, SD_CMD, and SD_DAT0 GPIO pins. The clock
and command pins can be any GPIO (not limited to legal SPI pins). The DAT0 pin can be any
GPIO with remaining DAT1...3 pins consecutively connected.
..code:: cpp
SD.begin(RP_CLK_GPIO, RP_CMD_GPIO, RP_DAT0_GPIO);
No other changes are required in the application to take advantage of this high
performance mode.
Using VFS (Virtual File System) for POSIX support
-------------------------------------------------
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.
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.
+3 -2
View File
@@ -77,8 +77,9 @@ bool ADCInput::setPins(pin_size_t pin0, pin_size_t pin1, pin_size_t pin2, pin_si
}
bool ADCInput::setFrequency(int newFreq) {
_freq = newFreq * __builtin_popcount(_pinMask); // Want to sample all channels at given frequency
adc_set_clkdiv(48000000.0f / _freq - 1.0f);
_freq = newFreq;
int scaledFreq = newFreq * __builtin_popcount(_pinMask); // Want to sample all channels at given frequency
adc_set_clkdiv(48000000.0f / scaledFreq - 1.0f);
return true;
}
+8 -4
View File
@@ -676,6 +676,9 @@ void A2DPSink::avrcp_target_packet_handler(uint8_t packet_type, uint16_t channel
volume_percentage = volume * 100 / 127;
DEBUGV("AVRCP Target : Volume set to %d%% (%d)\n", volume_percentage, volume);
_consumer->setVolume(volume);
if (_volumeCB) {
_volumeCB(_volumeData, volume);
}
break;
case AVRCP_SUBEVENT_OPERATION:
@@ -773,6 +776,11 @@ void A2DPSink::a2dp_sink_packet_handler(uint8_t packet_type, uint16_t channel, u
DEBUGV("A2DP Sink : Streaming connection is established, address %s, cid 0x%02x, local seid %d\n",
bd_addr_to_str(a2dp_conn->addr), a2dp_conn->a2dp_cid, a2dp_conn->a2dp_local_seid);
memcpy(_sourceAddress, a2dp_conn->addr, sizeof(_sourceAddress));
_connected = true;
if (_connectCB) {
_connectCB(_connectData, true);
}
break;
case A2DP_SUBEVENT_STREAM_STARTED:
@@ -784,10 +792,6 @@ void A2DPSink::a2dp_sink_packet_handler(uint8_t packet_type, uint16_t channel, u
// prepare media processing
media_processing_init(&a2dp_conn->sbc_configuration);
// audio stream is started when buffer reaches minimal level
_connected = true;
if (_connectCB) {
_connectCB(_connectData, true);
}
break;
case A2DP_SUBEVENT_STREAM_SUSPENDED:
+1 -35
View File
@@ -30,7 +30,7 @@
#include "btstack_resample.h"
#include "btstack_ring_buffer.h"
class A2DPSink : public Stream {
class A2DPSink {
public:
A2DPSink() {
_title[0] = 0;
@@ -38,33 +38,6 @@ public:
_album[0] = 0;
_genre[0] = 0;
}
virtual int available() override {
return 0; // Unreadable, this is output only
}
virtual int read() override {
return 0;
}
virtual int peek() override {
return 0;
}
virtual void flush() override {
}
virtual size_t write(const uint8_t *buffer, size_t size) override {
(void) buffer;
(void) size;
return 0;
}
virtual int availableForWrite() override {
return 0;
}
virtual size_t write(uint8_t s) override {
(void) s;
return 0;
}
bool setName(const char *name) {
if (_running) {
@@ -75,11 +48,6 @@ public:
return true;
}
void onTransmit(void (*cb)(void *), void *cbData = nullptr) {
_transmitCB = cb;
_transmitData = cbData;
}
void onAVRCP(void (*cb)(void *, avrcp_operation_id_t, int), void *cbData = nullptr) {
_avrcpCB = cb;
_avrcpData = cbData;
@@ -237,8 +205,6 @@ private:
bool _connected = false;
// Callbacks
void (*_transmitCB)(void *) = nullptr;
void *_transmitData;
void (*_avrcpCB)(void *, avrcp_operation_id_t, int) = nullptr;
void *_avrcpData;
void (*_batteryCB)(void *, avrcp_battery_status_t) = nullptr;
+26 -16
View File
@@ -37,6 +37,11 @@ const int _MOSI = 7; // AKA SPI TX
const int _CS = 5;
const int _SCK = 6;
// If you have all 4 DAT pins wired up to the Pico you can use SDIO mode
const int RP_CLK_GPIO = -1; // Set to CLK GPIO
const int RP_CMD_GPIO = -1; // Set to CMD GPIO
const int RP_DAT0_GPIO = -1; // Set to DAT0 GPIO. DAT1..3 must be consecutively connected.
// include the SD library:
#include <SPI.h>
#include <SD.h>
@@ -54,21 +59,26 @@ void setup() {
Serial.println("\nInitializing SD card...");
bool sdInitialized = false;
// Ensure the SPI pinout the SD card is connected to is configured properly
// Select the correct SPI based on _MISO pin for the RP2040
if (_MISO == 0 || _MISO == 4 || _MISO == 16) {
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
sdInitialized = SD.begin(_CS);
} else if (_MISO == 8 || _MISO == 12) {
SPI1.setRX(_MISO);
SPI1.setTX(_MOSI);
SPI1.setSCK(_SCK);
sdInitialized = SD.begin(_CS, SPI1);
if (RP_CLK_GPIO >= 0) {
// No special requirements on pin locations, this is PIO programmed
sdInitialized = SD.begin(RP_CLK_GPIO, RP_CMD_GPIO, RP_DAT0_GPIO);
} else {
Serial.println(F("ERROR: Unknown SPI Configuration"));
return;
// Ensure the SPI pinout the SD card is connected to is configured properly
// Select the correct SPI based on _MISO pin for the RP2040
if (_MISO == 0 || _MISO == 4 || _MISO == 16) {
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
sdInitialized = SD.begin(_CS);
} else if (_MISO == 8 || _MISO == 12) {
SPI1.setRX(_MISO);
SPI1.setTX(_MOSI);
SPI1.setSCK(_SCK);
sdInitialized = SD.begin(_CS, SPI1);
} else {
Serial.println(F("ERROR: Unknown SPI Configuration"));
return;
}
}
if (!sdInitialized) {
@@ -114,7 +124,7 @@ void setup() {
Serial.println();
// print the type and size of the first FAT-type volume
uint32_t volumesize;
uint64_t volumesize;
Serial.print("Volume type is: FAT");
Serial.println(SD.fatType(), DEC);
@@ -130,7 +140,7 @@ void setup() {
Serial.println((float)volumesize / 1024.0);
Serial.print("Card size: ");
Serial.println((float)SD.size() / 1000);
Serial.println((float)SD.size64() / 1000);
FSInfo fs_info;
SDFS.info(fs_info);
@@ -30,6 +30,11 @@ const int _MOSI = 7;
const int _CS = 5;
const int _SCK = 6;
// If you have all 4 DAT pins wired up to the Pico you can use SDIO mode
const int RP_CLK_GPIO = -1; // Set to CLK GPIO
const int RP_CMD_GPIO = -1; // Set to CMD GPIO
const int RP_DAT0_GPIO = -1; // Set to DAT0 GPIO. DAT1..3 must be consecutively connected.
#include <SPI.h>
#include <SD.h>
@@ -39,13 +44,31 @@ void setup() {
Serial.print("Initializing SD card...");
// Ensure the SPI pinout the SD card is connected to is configured properly
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
bool sdInitialized = false;
if (RP_CLK_GPIO >= 0) {
// No special requirements on pin locations, this is PIO programmed
sdInitialized = SD.begin(RP_CLK_GPIO, RP_CMD_GPIO, RP_DAT0_GPIO);
} else {
// Ensure the SPI pinout the SD card is connected to is configured properly
// Select the correct SPI based on _MISO pin for the RP2040
if (_MISO == 0 || _MISO == 4 || _MISO == 16) {
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
sdInitialized = SD.begin(_CS);
} else if (_MISO == 8 || _MISO == 12) {
SPI1.setRX(_MISO);
SPI1.setTX(_MOSI);
SPI1.setSCK(_SCK);
sdInitialized = SD.begin(_CS, SPI1);
} else {
Serial.println(F("ERROR: Unknown SPI Configuration"));
return;
}
}
// see if the card is present and can be initialized:
if (!SD.begin(_CS)) {
if (!sdInitialized) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
+28 -5
View File
@@ -30,6 +30,11 @@ const int _MOSI = 7;
const int _CS = 5;
const int _SCK = 6;
// If you have all 4 DAT pins wired up to the Pico you can use SDIO mode
const int RP_CLK_GPIO = -1; // Set to CLK GPIO
const int RP_CMD_GPIO = -1; // Set to CMD GPIO
const int RP_DAT0_GPIO = -1; // Set to DAT0 GPIO. DAT1..3 must be consecutively connected.
#include <SPI.h>
#include <SD.h>
@@ -39,13 +44,31 @@ void setup() {
Serial.print("Initializing SD card...");
// Ensure the SPI pinout the SD card is connected to is configured properly
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
bool sdInitialized = false;
if (RP_CLK_GPIO >= 0) {
// No special requirements on pin locations, this is PIO programmed
sdInitialized = SD.begin(RP_CLK_GPIO, RP_CMD_GPIO, RP_DAT0_GPIO);
} else {
// Ensure the SPI pinout the SD card is connected to is configured properly
// Select the correct SPI based on _MISO pin for the RP2040
if (_MISO == 0 || _MISO == 4 || _MISO == 16) {
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
sdInitialized = SD.begin(_CS);
} else if (_MISO == 8 || _MISO == 12) {
SPI1.setRX(_MISO);
SPI1.setTX(_MOSI);
SPI1.setSCK(_SCK);
sdInitialized = SD.begin(_CS, SPI1);
} else {
Serial.println(F("ERROR: Unknown SPI Configuration"));
return;
}
}
// see if the card is present and can be initialized:
if (!SD.begin(_CS)) {
if (!sdInitialized) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
+28 -5
View File
@@ -28,6 +28,11 @@ const int _MOSI = 7;
const int _CS = 5;
const int _SCK = 6;
// If you have all 4 DAT pins wired up to the Pico you can use SDIO mode
const int RP_CLK_GPIO = -1; // Set to CLK GPIO
const int RP_CMD_GPIO = -1; // Set to CMD GPIO
const int RP_DAT0_GPIO = -1; // Set to DAT0 GPIO. DAT1..3 must be consecutively connected.
#include <SPI.h>
#include <SD.h>
@@ -39,12 +44,30 @@ void setup() {
Serial.print("Initializing SD card...");
// Ensure the SPI pinout the SD card is connected to is configured properly
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
bool sdInitialized = false;
if (RP_CLK_GPIO >= 0) {
// No special requirements on pin locations, this is PIO programmed
sdInitialized = SD.begin(RP_CLK_GPIO, RP_CMD_GPIO, RP_DAT0_GPIO);
} else {
// Ensure the SPI pinout the SD card is connected to is configured properly
// Select the correct SPI based on _MISO pin for the RP2040
if (_MISO == 0 || _MISO == 4 || _MISO == 16) {
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
sdInitialized = SD.begin(_CS);
} else if (_MISO == 8 || _MISO == 12) {
SPI1.setRX(_MISO);
SPI1.setTX(_MOSI);
SPI1.setSCK(_SCK);
sdInitialized = SD.begin(_CS, SPI1);
} else {
Serial.println(F("ERROR: Unknown SPI Configuration"));
return;
}
}
if (!SD.begin(_CS)) {
if (!sdInitialized) {
Serial.println("initialization failed!");
return;
}
+28 -5
View File
@@ -28,6 +28,11 @@ const int _MOSI = 7;
const int _CS = 5;
const int _SCK = 6;
// If you have all 4 DAT pins wired up to the Pico you can use SDIO mode
const int RP_CLK_GPIO = -1; // Set to CLK GPIO
const int RP_CMD_GPIO = -1; // Set to CMD GPIO
const int RP_DAT0_GPIO = -1; // Set to DAT0 GPIO. DAT1..3 must be consecutively connected.
#include <SPI.h>
#include <SD.h>
@@ -39,12 +44,30 @@ void setup() {
Serial.print("Initializing SD card...");
// Ensure the SPI pinout the SD card is connected to is configured properly
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
bool sdInitialized = false;
if (RP_CLK_GPIO >= 0) {
// No special requirements on pin locations, this is PIO programmed
sdInitialized = SD.begin(RP_CLK_GPIO, RP_CMD_GPIO, RP_DAT0_GPIO);
} else {
// Ensure the SPI pinout the SD card is connected to is configured properly
// Select the correct SPI based on _MISO pin for the RP2040
if (_MISO == 0 || _MISO == 4 || _MISO == 16) {
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
sdInitialized = SD.begin(_CS);
} else if (_MISO == 8 || _MISO == 12) {
SPI1.setRX(_MISO);
SPI1.setTX(_MOSI);
SPI1.setSCK(_SCK);
sdInitialized = SD.begin(_CS, SPI1);
} else {
Serial.println(F("ERROR: Unknown SPI Configuration"));
return;
}
}
if (!SD.begin(_CS)) {
if (!sdInitialized) {
Serial.println("initialization failed!");
return;
}
+24 -14
View File
@@ -42,6 +42,11 @@ const int _MOSI = 7; // AKA SPI TX
const int _CS = 5;
const int _SCK = 6;
// If you have all 4 DAT pins wired up to the Pico you can use SDIO mode
const int RP_CLK_GPIO = -1; // Set to CLK GPIO
const int RP_CMD_GPIO = -1; // Set to CMD GPIO
const int RP_DAT0_GPIO = -1; // Set to DAT0 GPIO. DAT1..3 must be consecutively connected.
#include <SPI.h>
#include <SD.h>
@@ -58,21 +63,26 @@ void setup() {
Serial.println("\nInitializing SD card...");
bool sdInitialized = false;
// Ensure the SPI pinout the SD card is connected to is configured properly
// Select the correct SPI based on _MISO pin for the RP2040
if (_MISO == 0 || _MISO == 4 || _MISO == 16) {
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
sdInitialized = SD.begin(_CS);
} else if (_MISO == 8 || _MISO == 12) {
SPI1.setRX(_MISO);
SPI1.setTX(_MOSI);
SPI1.setSCK(_SCK);
sdInitialized = SD.begin(_CS, SPI1);
if (RP_CLK_GPIO >= 0) {
// No special requirements on pin locations, this is PIO programmed
sdInitialized = SD.begin(RP_CLK_GPIO, RP_CMD_GPIO, RP_DAT0_GPIO);
} else {
Serial.println(F("ERROR: Unknown SPI Configuration"));
return;
// Ensure the SPI pinout the SD card is connected to is configured properly
// Select the correct SPI based on _MISO pin for the RP2040
if (_MISO == 0 || _MISO == 4 || _MISO == 16) {
SPI.setRX(_MISO);
SPI.setTX(_MOSI);
SPI.setSCK(_SCK);
sdInitialized = SD.begin(_CS);
} else if (_MISO == 8 || _MISO == 12) {
SPI1.setRX(_MISO);
SPI1.setTX(_MOSI);
SPI1.setSCK(_SCK);
sdInitialized = SD.begin(_CS, SPI1);
} else {
Serial.println(F("ERROR: Unknown SPI Configuration"));
return;
}
}
if (!sdInitialized) {
+6
View File
@@ -36,11 +36,17 @@ public:
SDFS.setConfig(SDFSConfig(csPin, SPI_HALF_SPEED, spi));
return SDFS.begin();
}
bool begin(uint8_t csPin, uint32_t cfg = SPI_HALF_SPEED, HardwareSPI &spi = SPI) {
SDFS.setConfig(SDFSConfig(csPin, cfg, spi));
return SDFS.begin();
}
bool begin(uint8_t clkPin, uint8_t cmdPin, uint8_t dat0Pin) {
SDFS.setConfig(SDFSConfig(clkPin, cmdPin, dat0Pin));
return SDFS.begin();
}
void end(bool endSPI = true) {
SDFS.end();
if (endSPI && _spi) {
+4 -4
View File
@@ -63,13 +63,13 @@ FileImplPtr SDFSImpl::open(const char* path, OpenMode openMode, AccessMode acces
}
free(pathStr);
}
File32 fd = _fs.open(path, flags);
FsFile fd = _fs.open(path, flags);
if (!fd) {
DEBUGV("SDFSImpl::openFile: fd=%p path=`%s` openMode=%d accessMode=%d",
&fd, path, openMode, accessMode);
return FileImplPtr();
}
auto sharedFd = std::make_shared<File32>(fd);
auto sharedFd = std::make_shared<FsFile>(fd);
return std::make_shared<SDFSFileImpl>(this, sharedFd, path);
}
@@ -88,7 +88,7 @@ DirImplPtr SDFSImpl::openDir(const char* path) {
}
// At this point we have a name of "/blah/blah/blah" or "blah" or ""
// If that references a directory, just open it and we're done.
File32 dirFile;
FsFile dirFile;
const char *filter = "";
if (!pathStr[0]) {
// openDir("") === openDir("/")
@@ -133,7 +133,7 @@ DirImplPtr SDFSImpl::openDir(const char* path) {
DEBUGV("SDFSImpl::openDir: path=`%s`\n", path);
return DirImplPtr();
}
auto sharedDir = std::make_shared<File32>(dirFile);
auto sharedDir = std::make_shared<FsFile>(dirFile);
auto ret = std::make_shared<SDFSDirImpl>(filter, this, sharedDir, pathStr);
free(pathStr);
return ret;
+42 -26
View File
@@ -45,7 +45,8 @@ class SDFSConfig : public FSConfig {
public:
static constexpr uint32_t FSId = 0x53444653;
SDFSConfig(uint8_t csPin = 4, uint32_t spi = SD_SCK_MHZ(10), HardwareSPI &port = SPI) : FSConfig(FSId, false), _csPin(csPin), _part(0), _spiSettings(spi), _spi(&port) { }
SDFSConfig(uint8_t csPin = 4, uint32_t spi = SD_SCK_MHZ(10), HardwareSPI &port = SPI) : FSConfig(FSId, false), _sdio(false), _clkPin(255), _csPin(csPin), _cmdPin(255), _dat0Pin(255), _part(0), _spiSettings(spi), _spi(&port) { }
SDFSConfig(uint8_t clkPin, uint8_t cmdPin, uint8_t dataPin) : FSConfig(FSId, false), _sdio(true), _clkPin(clkPin), _cmdPin(cmdPin), _dat0Pin(dataPin), _part(0), _spiSettings(SD_SCK_MHZ(1)), _spi(nullptr) { }
SDFSConfig setAutoFormat(bool val = true) {
_autoFormat = val;
@@ -69,7 +70,11 @@ public:
}
// Inherit _type and _autoFormat
bool _sdio;
uint8_t _clkPin; // SDIO only;
uint8_t _csPin;
uint8_t _cmdPin; // SDIO only
uint8_t _dat0Pin; // SDIO only
uint8_t _part;
uint32_t _spiSettings;
HardwareSPI *_spi;
@@ -131,11 +136,20 @@ public:
if (_mounted) {
return true;
}
SdSpiConfig ssc(_cfg._csPin, SHARED_SPI, _cfg._spiSettings, _cfg._spi);
_mounted = _fs.begin(ssc);
if (!_mounted && _cfg._autoFormat) {
format();
if (!_cfg._sdio) {
SdSpiConfig ssc(_cfg._csPin, SHARED_SPI, _cfg._spiSettings, _cfg._spi);
_mounted = _fs.begin(ssc);
if (!_mounted && _cfg._autoFormat) {
format();
_mounted = _fs.begin(ssc);
}
} else {
SdioConfig ssc(_cfg._clkPin, _cfg._cmdPin, _cfg._dat0Pin);
_mounted = _fs.begin(ssc);
if (!_mounted && _cfg._autoFormat) {
format();
_mounted = _fs.begin(ssc);
}
}
FsDateTime::setCallback(dateTimeCB);
return _mounted;
@@ -153,8 +167,7 @@ public:
return false;
}
bzero(st, sizeof(*st));
File32 f;
f = _fs.open(path, O_RDONLY);
FsFile f = _fs.open(path, O_RDONLY);
if (!f) {
return false;
}
@@ -169,8 +182,8 @@ public:
if (f.getCreateDateTime(&date, &time)) {
st->ctime = FatToTimeT(date, time);
}
if (f.getAccessDate(&date)) {
st->atime = FatToTimeT(date, 0);
if (f.getAccessDateTime(&date, &time)) {
st->atime = FatToTimeT(date, time);
}
f.close();
return true;
@@ -272,7 +285,7 @@ protected:
class SDFSFileImpl : public FileImpl {
public:
SDFSFileImpl(SDFSImpl *fs, std::shared_ptr<File32> fd, const char *name)
SDFSFileImpl(SDFSImpl *fs, std::shared_ptr<FsFile> fd, const char *name)
: _fs(fs), _fd(fd), _opened(true) {
_name = std::shared_ptr<char>(new char[strlen(name) + 1], std::default_delete<char[]>());
strcpy(_name.get(), name);
@@ -284,7 +297,7 @@ public:
}
int availableForWrite() override {
return _opened ? _fd->availableSpaceForWrite() : 0;
return _opened ? _fd->availableForWrite() : 0;
}
size_t write(const uint8_t *buf, size_t size) override {
@@ -373,9 +386,9 @@ public:
time_t getLastWrite() override {
time_t ftime = 0;
if (_opened && _fd) {
DirFat_t tmp;
if (_fd.get()->dirEntry(&tmp)) {
ftime = SDFSImpl::FatToTimeT(*(uint16_t*)tmp.modifyDate, *(uint16_t*)tmp.modifyTime);
uint16_t date, time;
if (_fd.get()->getModifyDateTime(&date, &time)) {
ftime = SDFSImpl::FatToTimeT(date, time);
}
}
return ftime;
@@ -384,9 +397,9 @@ public:
time_t getCreationTime() override {
time_t ftime = 0;
if (_opened && _fd) {
DirFat_t tmp;
if (_fd.get()->dirEntry(&tmp)) {
ftime = SDFSImpl::FatToTimeT(*(uint16_t*)tmp.createDate, *(uint16_t*)tmp.createTime);
uint16_t date, time;
if (_fd.get()->getCreateDateTime(&date, &time)) {
ftime = SDFSImpl::FatToTimeT(date, time);
}
}
return ftime;
@@ -394,14 +407,14 @@ public:
protected:
SDFSImpl* _fs;
std::shared_ptr<File32> _fd;
std::shared_ptr<FsFile> _fd;
std::shared_ptr<char> _name;
bool _opened;
};
class SDFSDirImpl : public DirImpl {
public:
SDFSDirImpl(const String& pattern, SDFSImpl* fs, std::shared_ptr<File32> dir, const char *dirPath = nullptr)
SDFSDirImpl(const String& pattern, SDFSImpl* fs, std::shared_ptr<FsFile> dir, const char *dirPath = nullptr)
: _pattern(pattern), _fs(fs), _dir(dir), _valid(false), _dirPath(nullptr) {
if (dirPath) {
_dirPath = std::shared_ptr<char>(new char[strlen(dirPath) + 1], std::default_delete<char[]>());
@@ -466,19 +479,22 @@ public:
bool next() override {
const int n = _pattern.length();
do {
File32 file;
FsFile file;
file.openNext(_dir.get(), O_READ);
if (file) {
_valid = 1;
_size = file.fileSize();
_isFile = file.isFile();
_isDirectory = file.isDir();
DirFat_t tmp;
if (file.dirEntry(&tmp)) {
_time = SDFSImpl::FatToTimeT(*(uint16_t*)tmp.modifyDate, *(uint16_t*)tmp.modifyTime);
_creation = SDFSImpl::FatToTimeT(*(uint16_t*)tmp.createDate, *(uint16_t*)tmp.createTime);
uint16_t date, time;
if (file.getModifyDateTime(&date, &time)) {
_time = SDFSImpl::FatToTimeT(date, time);
} else {
_time = 0;
}
if (file.getCreateDateTime(&date, &time)) {
_creation = SDFSImpl::FatToTimeT(date, time);
} else {
_creation = 0;
}
file.getName(_lfn, sizeof(_lfn));
@@ -499,9 +515,9 @@ public:
protected:
String _pattern;
SDFSImpl* _fs;
std::shared_ptr<File32> _dir;
std::shared_ptr<FsFile> _dir;
bool _valid;
char _lfn[64];
char _lfn[256];
time_t _time;
time_t _creation;
std::shared_ptr<char> _dirPath;
+1
Submodule libraries/SdFat added at 67e26476f1
+1 -1
View File
@@ -91,7 +91,7 @@ public:
cb();
}
}
return time(nullptr) < 10000000;
return time(nullptr) >= 10000000;
}
bool running() {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "framework-arduinopico",
"version": "1.40401.0",
"version": "1.40402.0",
"description": "Arduino Wiring-based Framework (RPi Pico RP2040, RP2350)",
"keywords": [
"framework",
+3
View File
@@ -299,6 +299,9 @@
{
"name": "SparkFun Thing Plus RP2350"
},
{
"name": "SparkFun IoT Node LoRaWAN"
},
{
"name": "Seeed INDICATOR RP2040"
},
+3 -2
View File
@@ -20,7 +20,7 @@
# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification
name=Raspberry Pi RP2040/RP2350 Boards
version=4.4.1
version=4.4.2
# Required discoveries and monitors
# ---------------------------------
@@ -51,7 +51,7 @@ compiler.warning_flags.all=-Wall -Wextra -Werror=return-type -Wno-ignored-qualif
compiler.netdefines={build.libpicowdefs} -DLWIP_IGMP=1 -DLWIP_CHECKSUM_CTRL_PER_NETIF=1
compiler.psramdefines={build.psram_cs} {build.psram_freq}
compiler.defines={build.led} {build.usbstack_flags} {build.usbpid} {build.usbvid} {build.usbpwr} {compiler.psramdefines} '-DUSB_MANUFACTURER={build.usb_manufacturer}' '-DUSB_PRODUCT={build.usb_product}' {compiler.netdefines} {build.variantdefines} -DARDUINO_VARIANT="{build.variant}" -DPICO_FLASH_SIZE_BYTES={build.flash_total} "@{runtime.platform.path}/lib/{build.chip}/platform_def.txt"
compiler.defines={build.led} {build.usbstack_flags} {build.usbpid} {build.usbvid} {build.usbpwr} {compiler.psramdefines} '-DUSB_MANUFACTURER={build.usb_manufacturer}' '-DUSB_PRODUCT={build.usb_product}' {compiler.netdefines} {build.sdfatdefines} {build.variantdefines} -DARDUINO_VARIANT="{build.variant}" -DPICO_FLASH_SIZE_BYTES={build.flash_total} "@{runtime.platform.path}/lib/{build.chip}/platform_def.txt"
compiler.includes="-iprefix{runtime.platform.path}/" "@{runtime.platform.path}/lib/{build.chip}/platform_inc.txt" "@{runtime.platform.path}/lib/core_inc.txt" "-I{runtime.platform.path}/include"
compiler.flags={build.toolchainopts} -ffunction-sections -fdata-sections {build.flags.exceptions} {build.flags.stackprotect} {build.picodebugflags}
compiler.wrap="@{runtime.platform.path}/lib/{build.chip}/platform_wrap.txt" "@{runtime.platform.path}/lib/core_wrap.txt"
@@ -114,6 +114,7 @@ build.espwifitype=
build.debugscript=picoprobe_cmsis_dap.tcl
build.picodebugflags=
build.variantdefines=
build.sdfatdefines=-DFILE_COPY_CONSTRUCTOR_SELECT=FILE_COPY_CONSTRUCTOR_PUBLIC -DUSE_UTF8_LONG_NAMES=1 -DSDFAT_FILE_TYPE=3 -DDISABLE_FS_H_WARNING=1
# Allow Pico boards to be auto-discovered by the IDE
#discovery.rp2040.pattern={runtime.tools.pqt-python3.path}/python3 -I "{runtime.platform.path}/tools/pluggable_discovery.py"
+1
View File
@@ -27,6 +27,7 @@ EOL
fi
# Add items to the following list with "\n" netween them to skip running. No spaces, tabs, etc. allowed
read -d '' skiplist << EOL || true
/SdFat/
/#attic/
/AvrAdcLogger/
/examplesV1/
@@ -0,0 +1,56 @@
{
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "none.S",
"usb_vid": "0x1B4F",
"usb_pid": "0x0044"
}
},
"core": "earlephilhower",
"cpu": "cortex-m33",
"extra_flags": "-DARDUINO_SPARKFUN_IOTNODE_LORAWAN_RP2350 -DARDUINO_ARCH_RP2040 -DUSBD_MAX_POWER_MA=250 ",
"f_cpu": "150000000L",
"hwids": [
[
"0x2E8A",
"0x00C0"
],
[
"0x1B4F",
"0x0044"
]
],
"mcu": "rp2350",
"variant": "sparkfun_iotnode_lorawanrp2350"
},
"debug": {
"jlink_device": "RP2350_0",
"openocd_target": "rp2350.cfg",
"svd_path": "rp2350.svd"
},
"frameworks": [
"arduino"
],
"name": "IoT Node LoRaWAN",
"upload": {
"maximum_ram_size": 524288,
"maximum_size": 16777216,
"require_upload_port": true,
"native_usb": true,
"use_1200bps_touch": true,
"wait_for_upload_port": false,
"protocol": "picotool",
"protocols": [
"blackmagic",
"cmsis-dap",
"jlink",
"raspberrypi-swd",
"picotool",
"picoprobe"
],
"psram_length": 8388608
},
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "SparkFun"
}
+8 -2
View File
@@ -310,13 +310,19 @@ target_link_libraries(ipv4-ipv6-bt-big-${cpu}
${picow_bt_link_libraries}
)
foreach(tgt ipv4 ipv4-ipv6 ipv4-big ipv4-ipv6-big ipv4-bt ipv4-ipv6-bt ipv4-bt-big ipv4-ipv6-bt-big)
add_custom_command(TARGET ${tgt}-${cpu} POST_BUILD
COMMAND arm-none-eabi-ar d lib${tgt}-${cpu}.a atomic.c.o bit_ops_aeabi.S.o boot_lock.c.o bootrom.c.o bootrom_lock.c.o claim.c.o clocks.c.o critical_section.c.o crt0.S.o datetime.c.o divider_hardware.S.o divider.S.o dma.c.o double_aeabi_rp2040.S.o double_init_rom_rp2040.c.o double_math.c.o double_v1_rom_shim_rp2040.S.o exception.c.o flash.c.o flash.c.o float_aeabi_rp2040.S.o float_init_rom_rp2040.c.o float_math.c.o float_v1_rom_shim_rp2040.S.o gpio.c.o irq.c.o irq_handler_chain.S.o lock_core.c.o malloc.c.o mem_ops_aeabi.S.o mutex.c.o panic.c.o pheap.c.o pico_int64_ops_aeabi.S.o pio.c.o platform.c.o pll.c.o printf.c.o queue.c.o rand.c.o runtime.c.o runtime_init_clocks.c.o runtime_init.c.o runtime_init_stack_guard.c.o sem.c.o standard_binary_info.c.o sync.c.o sync_spin_lock.c.o ticks.c.o time.c.o timeout_helper.c.o timer.c.o uart.c.o unique_id.c.o vreg.c.o watchdog.c.o xip_cache.c.o xosc.c.o
)
endforeach()
foreach(tgt pico ipv4 ipv4-ipv6 ipv4-big ipv4-ipv6-big ipv4-bt ipv4-ipv6-bt ipv4-bt-big ipv4-ipv6-bt-big)
add_custom_command(TARGET ${tgt}-${cpu} POST_BUILD
COMMAND arm-none-eabi-ar d lib${tgt}-${cpu}.a stdio.c.obj stdio_uart.c.obj stdio_usb.c.obj stdio_usb_descriptors.c.obj pico_malloc.c.obj newlib_interface.c.obj
COMMAND arm-none-eabi-ar d lib${tgt}-${cpu}.a btstack_flash_bank.c.obj # Need to override with our own implementation
COMMAND arm-none-eabi-ar d lib${tgt}-${cpu}.a pico_malloc.c.o newlib_interface.c.o stdlib.c.o stdio.c.o stdio_uart.c.o new_delete.cpp.o
COMMAND arm-none-eabi-ar d lib${tgt}-${cpu}.a btstack_flash_bank.c.o # Need to override with our own implementation
COMMAND cp lib${tgt}-${cpu}.a ../../../lib/${cpu}/lib${tgt}.a
)
endforeach()
add_custom_command(TARGET pico-${cpu} POST_BUILD
COMMAND mkdir -p ../../../include/${cpu}/pico_base/pico
COMMAND cp ./generated/pico_base/pico/version.h ../../../include/${cpu}/pico_base/pico/.
+1
View File
@@ -651,6 +651,7 @@ MakeBoard("sparkfun_promicrorp2040", "rp2040", "SparkFun", "ProMicro RP2040", "0
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")
MakeBoard("sparkfun_thingplusrp2350", "rp2350", "SparkFun", "Thing Plus RP2350", "0x1b4f", "0x0038", 250, "SPARKFUN_THINGPLUS_RP2350", 16, 8, "none", ["PICO_CYW43_SUPPORTED=1", "CYW43_PIN_WL_DYNAMIC=1"])
MakeBoard("sparkfun_iotnode_lorawanrp2350", "rp2350", "SparkFun", "IoT Node LoRaWAN", "0x1b4f", "0x0044", 250, "SPARKFUN_IOTNODE_LORAWAN_RP2350", 16, 8, "none")
# Seeed
MakeBoard("seeed_indicator_rp2040", "rp2040", "Seeed", "INDICATOR RP2040", "0x2886", "0x0050", 250, "SEEED_INDICATOR_RP2040", 2, 0, "boot2_w25q080_2_padded_checksum")
+8
View File
@@ -225,6 +225,14 @@ env.Append(
"-std=gnu++17",
],
CPPDEFINES=[
# SdFat definitions required for SDFS
("FILE_COPY_CONSTRUCTOR_SELECT", "FILE_COPY_CONSTRUCTOR_PUBLIC"),
("USE_UTF8_LONG_NAMES", "1"),
("SDFAT_FILE_TYPE", "3"),
("DISABLE_FS_H_WARNING", "1")
],
CPPPATH=[
os.path.join(FRAMEWORK_DIR, "cores", "rp2040"),
os.path.join(FRAMEWORK_DIR, "cores", "rp2040", "api", "deprecated"),
@@ -0,0 +1,47 @@
#pragma once
// LEDs
#define PIN_LED (25u)
#define PIN_NEOPIXEL (25)
#define NUM_NEOPIXEL (1)
// UARTs
#define PIN_SERIAL1_TX (18u)
#define PIN_SERIAL1_RX (19u)
#define PIN_SERIAL2_TX (8u)
#define PIN_SERIAL2_RX (9u)
// SPI
#define PIN_SPI0_MISO (12u)
#define PIN_SPI0_MOSI (15u)
#define PIN_SPI0_SCK (14u)
#define PIN_SPI0_SS (13u)
#define PIN_SPI1_MISO (31u)
#define PIN_SPI1_MOSI (31u)
#define PIN_SPI1_SCK (31u)
#define PIN_SPI1_SS (31u) // not pinned out
// The board uses SPI1 for uSD card, make that the default
#ifndef __SPI0_DEVICE
#define __SPI0_DEVICE spi1
#endif
#ifndef __SPI1_DEVICE
#define __SPI1_DEVICE spi0
#endif
// Wire
#define PIN_WIRE0_SDA (20u)
#define PIN_WIRE0_SCL (21u)
#define PIN_WIRE1_SDA (31u)
#define PIN_WIRE1_SCL (31u)
#define SERIAL_HOWMANY (3u)
#define SPI_HOWMANY (1u)
#define WIRE_HOWMANY (1u)
// PSRAM
#define RP2350_PSRAM_CS (0u)
#define RP2350_PSRAM_MAX_SCK_HZ (109 * 1000 * 1000)
#include "../generic/common.h"