Update PlatformIO builder script and docs (#633)

* Update board generation, use renamed function

* Update documentation with new platform integration state

* Remove accidentally pushed file

* Use correct update command

* Use correct highlighting

* Use correct language

* Add section on debugging

* Add docs on filesystem, minor corrections

* Use -iprefix in compilation, but still expose all include paths to IDE

* Add exception and RTTI support, document them

* Fix typo
This commit is contained in:
Maximilian Gerhardt 2022-06-17 03:59:46 +02:00 committed by GitHub
parent 3414b73172
commit 4a94677ee5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
34 changed files with 243 additions and 178 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -19,14 +19,14 @@ The PlatformIO experience:
Refer to the general documentation at https://docs.platformio.org/. Refer to the general documentation at https://docs.platformio.org/.
Especially useful is the `Getting started with VSCode + PlatformIO <https://docs.platformio.org/en/latest/integration/ide/vscode.html#installation), [CLI reference](https://docs.platformio.org/en/latest/core/index.html) and [platformio.ini options](https://docs.platformio.org/en/latest/projectconf/index.html)>`__ page. Especially useful is the `Getting started with VSCode + PlatformIO <https://docs.platformio.org/en/latest/integration/ide/vscode.html#installation>`_, `CLI reference <https://docs.platformio.org/en/latest/core/index.html>`_ and the `platformio.ini options <https://docs.platformio.org/en/latest/projectconf/index.html>`_ page.
Hereafter it is assumed that you have a basic understanding of PlatformIO in regards to project creation, project file structure and building and uploading PlatformIO projects, through reading the above pages. Hereafter it is assumed that you have a basic understanding of PlatformIO in regards to project creation, project file structure and building and uploading PlatformIO projects, through reading the above pages.
Current state of development Current state of development
---------------------------- ----------------------------
At the time of writing, PlatformIO integration for this core is a work-in-progress and not yet merged into mainline PlatformIO. This is subject to change soon. At the time of writing, PlatformIO integration for this core is a work-in-progress and not yet merged into mainline PlatformIO. This is subject to change once `this pull request <https://github.com/platformio/platform-raspberrypi/pull/36>`_ is merged.
If you want to use the PlatformIO integration right now, make sure you first create a standard Raspberry Pi Pico + Arduino project within PlatformIO. If you want to use the PlatformIO integration right now, make sure you first create a standard Raspberry Pi Pico + Arduino project within PlatformIO.
This will give you a project with the ``platformio.ini`` This will give you a project with the ``platformio.ini``
@ -38,8 +38,7 @@ This will give you a project with the ``platformio.ini``
board = pico board = pico
framework = arduino framework = arduino
Here, you need to change the `platform` to take advantage of the features described hereunder. Here, you need to change the `platform` to take advantage of the features described hereunder and switch to the new core.
You *also* need to inject two PlatformIO packages, one for the compiler toolchain and one for the Arduino core package.
.. code:: ini .. code:: ini
@ -47,12 +46,34 @@ You *also* need to inject two PlatformIO packages, one for the compiler toolchai
platform = https://github.com/maxgerhardt/platform-raspberrypi.git platform = https://github.com/maxgerhardt/platform-raspberrypi.git
board = pico board = pico
framework = arduino framework = arduino
board_build.core = earlephilhower
When the support for this core has been merged into mainline PlatformIO, this notice will be removed and a standard `platformio.ini` as shown above will work as a base.
Deprecation warnings
---------------------
Previous versions of this documentation told users to inject the framework and toolchain package into the project by using
.. code:: ini
; note that download link for toolchain is specific for OS. see https://github.com/earlephilhower/pico-quick-toolchain/releases. ; note that download link for toolchain is specific for OS. see https://github.com/earlephilhower/pico-quick-toolchain/releases.
platform_packages = platform_packages =
maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git
maxgerhardt/toolchain-pico@https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.1-a/x86_64-w64-mingw32.arm-none-eabi-7855b0c.210706.zip maxgerhardt/toolchain-pico@https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.1-a/x86_64-w64-mingw32.arm-none-eabi-7855b0c.210706.zip
When the support for this core has been merged into mainline PlatformIO, this notice will be removed and a standard `platformio.ini` as shown above will work as a base. This is now **deprecated** and should not be done anymore. Users should delete these ``platform_packages`` lines and update the platform integration by issuing the command
.. code:: bash
pio pkg update -g -p https://github.com/maxgerhardt/platform-raspberrypi.git
in the `PlatformIO CLI <https://docs.platformio.org/en/latest/integration/ide/vscode.html#platformio-core-cli>`_. The same can be achieved by using the VSCode PIO Home -> Platforms -> Updates GUI.
The toolchain, which was also renamed to ``toolchain-rp2040-earlephilhower`` is downloaded automatically from the registry. The same goes for the ``framework-arduinopico`` toolchain package, which points directly to the Arduino-Pico Github repository.
However, users can still select a custom fork or branch of the core if desired so, as detailed in a chapter below.
As the pull req
Selecting the new core Selecting the new core
---------------------- ----------------------
@ -61,8 +82,8 @@ Prerequisite for using this core is to tell PlatformIO to switch to it.
There will be board definition files where the Earle-Philhower core will There will be board definition files where the Earle-Philhower core will
be the default since it's a board that only exists in this core (and not be the default since it's a board that only exists in this core (and not
the other https://github.com/arduino/ArduinoCore-mbed). To switch boards the other https://github.com/arduino/ArduinoCore-mbed). To switch boards
for which this is not the default core (e.g. the standard for which this is not the default core (which are only
``board = pico``), the directive ``board = pico`` and ``board = nanorp2040connect``), the directive
.. code:: ini .. code:: ini
@ -72,6 +93,8 @@ must be added to the ``platformio.ini``. This controls the `core
switching switching
logic <https://github.com/maxgerhardt/platform-raspberrypi/blob/77e0d3a29d1dbf00fd3ec3271104e3bf4820869c/builder/frameworks/arduino/arduino.py#L27-L32>`__. logic <https://github.com/maxgerhardt/platform-raspberrypi/blob/77e0d3a29d1dbf00fd3ec3271104e3bf4820869c/builder/frameworks/arduino/arduino.py#L27-L32>`__.
When using Arduino-Pico-only boards like ``board = rpipico`` or ``board = adafruit_feather``, this is not needed.
Flash size Flash size
---------- ----------
@ -154,6 +177,37 @@ either a sing line or a newline-separated expression.
-DDEBUG_RP2040_CORE -DDEBUG_RP2040_CORE
-DDEBUG_RP2040_PORT=Serial2 -DDEBUG_RP2040_PORT=Serial2
C++ Exceptions
--------------
Exceptions are disabled by default. To enable them, use
.. code:: ini
; Enable Exceptions
build_flags = -DPIO_FRAMEWORK_ARDUINO_ENABLE_EXCEPTIONS
Stack Protector
---------------
To enable GCC's stack protection feature, use
.. code:: ini
; Enable Stack Protector
build_flags = -fstack-protector
RTTI
----
RTTI (run-time type information) is disabled by default. To enable it, use
.. code:: ini
; Enable RTTI
build_flags = -DPIO_FRAMEWORK_ARDUINO_ENABLE_RTTI
USB Stack USB Stack
--------- ---------
@ -188,8 +242,8 @@ directive to do so. Simply specify that the framework package
Whereas the ``#master`` can also be replaced by a ``#branchname`` or a Whereas the ``#master`` can also be replaced by a ``#branchname`` or a
``#commithash``. If left out, it will pull the default branch, which is ``master``. ``#commithash``. If left out, it will pull the default branch, which is ``master``.
The ``file://`` pseudo-protocol can also be used instead of ``https://`` to point to a The ``file://`` and ``symlink://`` pseudo-protocols can also be used instead of ``https://`` to point to a
local copy of the core (with e.g. some modifications) on disk. local copy of the core (with e.g. some modifications) on disk (`see documentation <https://docs.platformio.org/en/latest/core/userguide/pkg/cmd_install.html?#local-folder>_`).
Note that this can only be done for versions that have the PlatformIO Note that this can only be done for versions that have the PlatformIO
builder script it in, so versions before 1.9.2 are not supported. builder script it in, so versions before 1.9.2 are not supported.
@ -206,14 +260,50 @@ and 0.5MByte filesystem.
platform = https://github.com/maxgerhardt/platform-raspberrypi.git platform = https://github.com/maxgerhardt/platform-raspberrypi.git
board = pico board = pico
framework = arduino framework = arduino
; board can use both Arduino cores -- we select Arduino-Pico here
board_build.core = earlephilhower board_build.core = earlephilhower
board_build.filesystem_size = 0.5m board_build.filesystem_size = 0.5m
; note that download link for toolchain is specific for OS. see https://github.com/earlephilhower/pico-quick-toolchain/releases.
platform_packages =
maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git
maxgerhardt/toolchain-pico@https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.1-a/x86_64-w64-mingw32.arm-none-eabi-7855b0c.210706.zip
The initial project structure should be generated just creating a new The initial project structure should be generated just creating a new
project for the Pico and the Arduino framework, after which the project for the Pico and the Arduino framework, after which the
auto-generated ``platformio.ini`` can be adapted per above. auto-generated ``platformio.ini`` can be adapted per above.
Debugging
---------
With recent updates to the toolchain and OpenOCD, debugging firmwares is also possible.
To specify the debugging adapter, use ``debug_tool`` (`documentation <https://docs.platformio.org/en/latest/projectconf/section_env_debug.html#debug-tool>`_). Supported values are:
* ``picoprobe``
* ``cmsis-dap``
* ``jlink``
* ``raspberrypi-swd``
These values can also be used in ``upload_protocol`` if you want PlatformIO to upload the regular firmware through this method, which you likely want.
Especially the PicoProbe method is convenient when you have two Raspberry Pi Pico boards. One of them can be flashed with the PicoProbe firmware (`documentation <https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html#debugging-using-another-raspberry-pi-pico>`_) and is then connected to the target Raspberry Pi Pico board (see `documentation <https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf>`_ chapter "Picoprobe Wiring"). Remember that on Windows, you have to use `Zadig <https://zadig.akeo.ie/>`_ to also load "WinUSB" drivers for the "Picoprobe (Interface 2)" device so that OpenOCD can speak to it.
With that set up, debugging can be started via the left debugging sidebar and works nicely: Setup breakpoints, inspect the value of variables in the code, step through the code line by line. When a breakpoint is hit or execution is halted, you can even see the execution state both Cortex-M0+ cores of the RP2040.
.. image:: images/pio_debugging.png
For further information on customizing debug options, like the initial breakpoint or debugging / SWD speed, consult `the documentation <https://docs.platformio.org/en/latest/projectconf/section_env_debug.html>`_.
Filesystem Uploading
--------------------
For the Arduino IDE, `a plugin <https://github.com/earlephilhower/arduino-pico#uploading-filesystem-images>`_ is available that enables a data folder to be packed as a LittleFS filesystem binary and uploaded to the Pico.
This functionality is also built-in in the PlatformIO integration. Open the `project tasks <https://docs.platformio.org/en/latest/integration/ide/vscode.html#project-tasks>`_ and expand the "Platform" tasks:
.. image:: images/pio_fs_upload.png
The files you want to upload should be placed in a folder called ``data`` inside the project. This can be customized `if needed <https://docs.platformio.org/en/latest/projectconf/section_platformio.html#data-dir>`_.
The task "Build Filesystem Image" will take all files in the data directory and create a ``littlefs.bin`` file from it using the ``mklittlefs`` tool.
The task "Upload Filesystem Image" will upload the filesystem image to the Pico via the specified ``upload_protocol``.
**Note:** Currently only the default ``picotool`` (regular direct USB upload) and the OpenOCD-based debug methods (meaning all but ``jlink``) can transport the filesystem to the Pico.

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "adafruit_feather",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "adafruit_feather",
"boot2_source": "boot2_w25x10cl_4_padded_checksum.S", "boot2_source": "boot2_w25x10cl_4_padded_checksum.S",
"usb_vid": "0x239a", "usb_vid": "0x239a",
"usb_pid": "0x80f1", "usb_pid": "0x80f1"
"usb_manufacturer": "Adafruit",
"usb_product": "Feather RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Adafruit" "vendor": "Adafruit"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "adafruit_itsybitsy",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "adafruit_itsybitsy",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x239a", "usb_vid": "0x239a",
"usb_pid": "0x80fd", "usb_pid": "0x80fd"
"usb_manufacturer": "Adafruit",
"usb_product": "ItsyBitsy RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Adafruit" "vendor": "Adafruit"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "adafruit_kb2040",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "adafruit_kb2040",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x239a", "usb_vid": "0x239a",
"usb_pid": "0x8105", "usb_pid": "0x8105"
"usb_manufacturer": "Adafruit",
"usb_product": "KB2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Adafruit" "vendor": "Adafruit"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "adafruit_macropad2040",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "adafruit_macropad2040",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x239a", "usb_vid": "0x239a",
"usb_pid": "0x8107", "usb_pid": "0x8107"
"usb_manufacturer": "Adafruit",
"usb_product": "MacroPad RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Adafruit" "vendor": "Adafruit"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "adafruit_qtpy",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "adafruit_qtpy",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x239a", "usb_vid": "0x239a",
"usb_pid": "0x80f7", "usb_pid": "0x80f7"
"usb_manufacturer": "Adafruit",
"usb_product": "QT Py RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Adafruit" "vendor": "Adafruit"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "adafruit_stemmafriend",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "adafruit_stemmafriend",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x239a", "usb_vid": "0x239a",
"usb_pid": "0x80e3", "usb_pid": "0x80e3"
"usb_manufacturer": "Adafruit",
"usb_product": "STEMMA Friend RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Adafruit" "vendor": "Adafruit"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "adafruit_trinkeyrp2040qt",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "adafruit_trinkeyrp2040qt",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x239a", "usb_vid": "0x239a",
"usb_pid": "0x8109", "usb_pid": "0x8109"
"usb_manufacturer": "Adafruit",
"usb_product": "Trinkey RP2040 QT"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Adafruit" "vendor": "Adafruit"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "arduino_nano_connect",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "arduino_nano_connect",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2341", "usb_vid": "0x2341",
"usb_pid": "0x0058", "usb_pid": "0x0058"
"usb_manufacturer": "Arduino",
"usb_product": "Nano RP2040 Connect"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Arduino" "vendor": "Arduino"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "challenger_2040_lora",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "challenger_2040_lora",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x1023", "usb_pid": "0x1023"
"usb_manufacturer": "iLabs",
"usb_product": "Challenger 2040 LoRa"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "iLabs" "vendor": "iLabs"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "challenger_2040_lte",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "challenger_2040_lte",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x100b", "usb_pid": "0x100b"
"usb_manufacturer": "iLabs",
"usb_product": "Challenger 2040 LTE"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "iLabs" "vendor": "iLabs"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "challenger_2040_wifi",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "challenger_2040_wifi",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x1006", "usb_pid": "0x1006"
"usb_manufacturer": "iLabs",
"usb_product": "Challenger 2040 WiFi"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "iLabs" "vendor": "iLabs"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "challenger_2040_wifi_ble",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "challenger_2040_wifi_ble",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x102C", "usb_pid": "0x102C"
"usb_manufacturer": "iLabs",
"usb_product": "Challenger 2040 WiFi/BLE"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "iLabs" "vendor": "iLabs"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "challenger_nb_2040_wifi",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "challenger_nb_2040_wifi",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x100b", "usb_pid": "0x100b"
"usb_manufacturer": "iLabs",
"usb_product": "Challenger NB 2040 WiFi"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "iLabs" "vendor": "iLabs"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "cytron_maker_nano_rp2040",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "cytron_maker_nano_rp2040",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x100f", "usb_pid": "0x100f"
"usb_manufacturer": "Cytron",
"usb_product": "Maker Nano RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Cytron" "vendor": "Cytron"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "cytron_maker_pi_rp2040",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "cytron_maker_pi_rp2040",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x1000", "usb_pid": "0x1000"
"usb_manufacturer": "Cytron",
"usb_product": "Maker Pi RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Cytron" "vendor": "Cytron"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "dfrobot_beetle_rp2040",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "dfrobot_beetle_rp2040",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x3343", "usb_vid": "0x3343",
"usb_pid": "0x4253", "usb_pid": "0x4253"
"usb_manufacturer": "DFRobot",
"usb_product": "Beetle RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "DFRobot" "vendor": "DFRobot"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "flyboard2040_core",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "flyboard2040_core",
"boot2_source": "boot2_generic_03h_4_padded_checksum.S", "boot2_source": "boot2_generic_03h_4_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x008a", "usb_pid": "0x008a"
"usb_manufacturer": "DeRuiLab",
"usb_product": "FlyBoard2040Core"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "DeRuiLab" "vendor": "DeRuiLab"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "generic",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "generic",
"boot2_source": "boot2_generic_03h_4_padded_checksum.S", "boot2_source": "boot2_generic_03h_4_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0xf00a", "usb_pid": "0xf00a"
"usb_manufacturer": "Generic",
"usb_product": "RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Generic" "vendor": "Generic"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "ilabs_rpico32",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "ilabs_rpico32",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x1010", "usb_pid": "0x1010"
"usb_manufacturer": "iLabs",
"usb_product": "RPICO32"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "iLabs" "vendor": "iLabs"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "melopero_shake_rp2040",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "melopero_shake_rp2040",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x1005", "usb_pid": "0x1005"
"usb_manufacturer": "Melopero",
"usb_product": "Shake RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Melopero" "vendor": "Melopero"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "rpipico",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "rpipico",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x000a", "usb_pid": "0x000a"
"usb_manufacturer": "Raspberry Pi",
"usb_product": "Pico"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Raspberry Pi" "vendor": "Raspberry Pi"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "seeed_xiao_rp2040",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "seeed_xiao_rp2040",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x000a", "usb_pid": "0x000a"
"usb_manufacturer": "Seeed",
"usb_product": "XAIO RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Seeed" "vendor": "Seeed"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "solderparty_rp2040_stamp",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "solderparty_rp2040_stamp",
"boot2_source": "boot2_generic_03h_4_padded_checksum.S", "boot2_source": "boot2_generic_03h_4_padded_checksum.S",
"usb_vid": "0x1209", "usb_vid": "0x1209",
"usb_pid": "0xa182", "usb_pid": "0xa182"
"usb_manufacturer": "Solder Party",
"usb_product": "RP2040 Stamp"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "Solder Party" "vendor": "Solder Party"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "sparkfun_promicrorp2040",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "sparkfun_promicrorp2040",
"boot2_source": "boot2_generic_03h_4_padded_checksum.S", "boot2_source": "boot2_generic_03h_4_padded_checksum.S",
"usb_vid": "0x1b4f", "usb_vid": "0x1b4f",
"usb_pid": "0x0026", "usb_pid": "0x0026"
"usb_manufacturer": "SparkFun",
"usb_product": "ProMicro RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "SparkFun" "vendor": "SparkFun"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "sparkfun_thingplusrp2040",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "sparkfun_thingplusrp2040",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x1b4f", "usb_vid": "0x1b4f",
"usb_pid": "0x0026", "usb_pid": "0x0026"
"usb_manufacturer": "SparkFun",
"usb_product": "Thing Plus RP2040"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "SparkFun" "vendor": "SparkFun"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "upesy_rp2040_devkit",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "upesy_rp2040_devkit",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x1007", "usb_pid": "0x1007"
"usb_manufacturer": "uPesy",
"usb_product": "RP2040 DevKit"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "uPesy" "vendor": "uPesy"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "wiznet_5100s_evb_pico",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "wiznet_5100s_evb_pico",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x1027", "usb_pid": "0x1027"
"usb_manufacturer": "WIZnet",
"usb_product": "W5100S-EVB-Pico"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "WIZnet" "vendor": "WIZnet"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "wiznet_5500_evb_pico",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "wiznet_5500_evb_pico",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x1029", "usb_pid": "0x1029"
"usb_manufacturer": "WIZnet",
"usb_product": "W5500-EVB-Pico"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "WIZnet" "vendor": "WIZnet"
} }

View file

@ -11,14 +11,12 @@
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "wiznet_wizfi360_evb_pico",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "wiznet_wizfi360_evb_pico",
"boot2_source": "boot2_w25q080_2_padded_checksum.S", "boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2e8a", "usb_vid": "0x2e8a",
"usb_pid": "0x1028", "usb_pid": "0x1028"
"usb_manufacturer": "WIZnet",
"usb_product": "WizFi360-EVB-Pico"
} }
} }
}, },
@ -49,4 +47,4 @@
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "WIZnet" "vendor": "WIZnet"
} }

View file

@ -188,14 +188,12 @@ def MakeBoardJSON(name, vendor_name, product_name, vid, pid, pwr, boarddefine, f
] ]
], ],
"mcu": "rp2040", "mcu": "rp2040",
"variant": "VARIANTNAME",
"arduino": { "arduino": {
"earlephilhower": { "earlephilhower": {
"variant": "VARIANTNAME",
"boot2_source": "BOOT2.S", "boot2_source": "BOOT2.S",
"usb_vid": "VID", "usb_vid": "VID",
"usb_pid": "PID", "usb_pid": "PID"
"usb_manufacturer": "VENDORNAME",
"usb_product": "PRODUCTNAME"
} }
} }
}, },
@ -226,7 +224,7 @@ def MakeBoardJSON(name, vendor_name, product_name, vid, pid, pwr, boarddefine, f
}, },
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
"vendor": "VENDORNAME" "vendor": "VENDORNAME"
}""".replace('VARIANTNAME', name).replace('BOARDDEFINE', boarddefine).replace('BOOT2', boot2).replace('VID', vid).replace('PID', pid).replace('VENDORNAME', vendor_name).replace('PRODUCTNAME', product_name).replace('FLASHSIZE', str(1024*1024*flashsizemb)).replace('USBPWR', str(pwr)) }\n""".replace('VARIANTNAME', name).replace('BOARDDEFINE', boarddefine).replace('BOOT2', boot2).replace('VID', vid).replace('PID', pid).replace('VENDORNAME', vendor_name).replace('PRODUCTNAME', product_name).replace('FLASHSIZE', str(1024*1024*flashsizemb)).replace('USBPWR', str(pwr))
jsondir = os.path.abspath(os.path.dirname(__file__)) + "/json" jsondir = os.path.abspath(os.path.dirname(__file__)) + "/json"
f = open(jsondir + "/" + name + ".json", "w") f = open(jsondir + "/" + name + ".json", "w")
f.write(json) f.write(json)

View file

@ -27,7 +27,8 @@ ram_size = 256 * 1024 # not the 264K, which is 256K SRAM + 2*4K SCRATCH(X/Y).
FRAMEWORK_DIR = platform.get_package_dir("framework-arduinopico") FRAMEWORK_DIR = platform.get_package_dir("framework-arduinopico")
assert os.path.isdir(FRAMEWORK_DIR) assert os.path.isdir(FRAMEWORK_DIR)
# read includes from this file to add them into CPPPATH later # read includes from this file to add them into CPPPATH later for good IDE intellisense
# will use original -iprefix <prefix> @<file> for compilation though.
includes_file = os.path.join(FRAMEWORK_DIR, "lib", "platform_inc.txt") includes_file = os.path.join(FRAMEWORK_DIR, "lib", "platform_inc.txt")
file_lines = [] file_lines = []
includes = [] includes = []
@ -38,10 +39,41 @@ for l in file_lines:
# emulate -iprefix <framework path>. # emulate -iprefix <framework path>.
path = os.path.join(FRAMEWORK_DIR, path) path = os.path.join(FRAMEWORK_DIR, path)
# prevent non-existent paths from being added # prevent non-existent paths from being added
# looking at you here, pico-extras/src/common/pico_audio and co.
if os.path.isdir(path): if os.path.isdir(path):
includes.append(path) includes.append(path)
def is_pio_build():
from SCons.Script import COMMAND_LINE_TARGETS
return "idedata" not in COMMAND_LINE_TARGETS and "_idedata" not in COMMAND_LINE_TARGETS
# get all activated macros
flatten_cppdefines = env.Flatten(env['CPPDEFINES'])
#
# Exceptions
#
stdcpp_lib = None
if "PIO_FRAMEWORK_ARDUINO_ENABLE_EXCEPTIONS" in flatten_cppdefines:
env.Append(
CXXFLAGS=["-fexceptions"]
)
stdcpp_lib = "stdc++-exc"
else:
env.Append(
CXXFLAGS=["-fno-exceptions"]
)
stdcpp_lib = "stdc++"
#
# RTTI
#
# standard is -fno-rtti flag. If special macro is present, don't
# add that flag.
if not "PIO_FRAMEWORK_ARDUINO_ENABLE_RTTI" in flatten_cppdefines:
env.Append(
CXXFLAGS=["-fno-rtti"]
)
# update progsize expression to also check for bootloader. # update progsize expression to also check for bootloader.
env.Replace( env.Replace(
SIZEPROGREGEXP=r"^(?:\.boot2|\.text|\.data|\.rodata|\.text.align|\.ARM.exidx)\s+(\d+).*" SIZEPROGREGEXP=r"^(?:\.boot2|\.text|\.data|\.rodata|\.text.align|\.ARM.exidx)\s+(\d+).*"
@ -57,11 +89,8 @@ env.Append(
"-mcpu=cortex-m0plus", "-mcpu=cortex-m0plus",
"-mthumb", "-mthumb",
"-ffunction-sections", "-ffunction-sections",
"-fdata-sections", "-fdata-sections"
# use explicit include (-I) paths, otherwise it's # -iprefix etc. added lader if in build mode
# not visible in the IDE's intellisense.
#"-iprefix" + os.path.join(FRAMEWORK_DIR),
#"@%s" % os.path.join(FRAMEWORK_DIR, "lib", "platform_inc.txt")
], ],
CFLAGS=[ CFLAGS=[
@ -70,8 +99,6 @@ env.Append(
CXXFLAGS=[ CXXFLAGS=[
"-std=gnu++17", "-std=gnu++17",
"-fno-exceptions",
"-fno-rtti",
], ],
CPPDEFINES=[ CPPDEFINES=[
@ -114,10 +141,18 @@ env.Append(
# link lib/libpico.a by full path, ignore libstdc++ # link lib/libpico.a by full path, ignore libstdc++
LIBS=[ LIBS=[
File(os.path.join(FRAMEWORK_DIR, "lib", "libpico.a")), File(os.path.join(FRAMEWORK_DIR, "lib", "libpico.a")),
"m", "c", "stdc++", "c"] "m", "c", stdcpp_lib, "c"]
) )
# expand with read includes
env.Append(CPPPATH=includes) # expand with read includes for IDE, but use -iprefix command for actual building
if not is_pio_build():
env.Append(CPPPATH=includes)
else:
env.Append(CCFLAGS=[
"-iprefix" + os.path.join(FRAMEWORK_DIR),
"@%s" % os.path.join(FRAMEWORK_DIR, "lib", "platform_inc.txt")
])
def configure_usb_flags(cpp_defines): def configure_usb_flags(cpp_defines):
global ram_size global ram_size
@ -223,8 +258,8 @@ linkerscript_cmd = env.Command(
# if no custom linker script is provided, we use the command that we prepared to generate one. # if no custom linker script is provided, we use the command that we prepared to generate one.
if not board.get("build.ldscript", ""): if not board.get("build.ldscript", ""):
# execute fetch filesystem info stored in env to alawys have that info ready # execute fetch filesystem info stored in env to always have that info ready
env["fetch_fs_size"](env) env["__fetch_fs_size"](env)
env.Depends("$BUILD_DIR/${PROGNAME}.elf", linkerscript_cmd) env.Depends("$BUILD_DIR/${PROGNAME}.elf", linkerscript_cmd)
env.Replace(LDSCRIPT_PATH=os.path.join("$BUILD_DIR", "memmap_default.ld")) env.Replace(LDSCRIPT_PATH=os.path.join("$BUILD_DIR", "memmap_default.ld"))