Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9480c2a55d | ||
|
|
b3d0ccc7e3 | ||
|
|
5a34395f46 | ||
|
|
e20c973bf5 | ||
|
|
452ef17174 | ||
|
|
4785c16243 | ||
|
|
2506b8e1d1 | ||
|
|
7bfe25b8aa | ||
|
|
2348051026 | ||
|
|
b4001bfb0e | ||
|
|
0655b7d5b6 | ||
|
|
83b8d122d7 | ||
|
|
8caa590f5c | ||
|
|
ec528d34f8 |
+3
-3
@@ -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
@@ -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
|
||||
# -----------------------------------
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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
@@ -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.
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Submodule libraries/Adafruit_TinyUSB_Arduino updated: f5211f4226...c92b7fde16
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
Submodule libraries/ESP8266SdFat deleted from 9e1457101c
Submodule libraries/LittleFS/lib/littlefs updated: d01280e649...0494ce7169
@@ -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;
|
||||
|
||||
@@ -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,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,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;
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
Submodule
+1
Submodule libraries/SdFat added at 67e26476f1
@@ -91,7 +91,7 @@ public:
|
||||
cb();
|
||||
}
|
||||
}
|
||||
return time(nullptr) < 10000000;
|
||||
return time(nullptr) >= 10000000;
|
||||
}
|
||||
|
||||
bool running() {
|
||||
|
||||
+1
-1
@@ -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",
|
||||
|
||||
@@ -299,6 +299,9 @@
|
||||
{
|
||||
"name": "SparkFun Thing Plus RP2350"
|
||||
},
|
||||
{
|
||||
"name": "SparkFun IoT Node LoRaWAN"
|
||||
},
|
||||
{
|
||||
"name": "Seeed INDICATOR RP2040"
|
||||
},
|
||||
|
||||
+3
-2
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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/.
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user