Skip to content

Commit

Permalink
HyperSPI support for Pico (rp2040)
Browse files Browse the repository at this point in the history
  • Loading branch information
awawa-dev committed Dec 6, 2023
1 parent 651938b commit 641ffe1
Show file tree
Hide file tree
Showing 7 changed files with 413 additions and 1 deletion.
149 changes: 149 additions & 0 deletions .github/workflows/push-master-pico.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
name: HyperSPI Pico CI Build

on: [push]

jobs:

#############################
#### HyperSPI for Pico ######
#############################

HyperSpiPico:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./rp2040
steps:
- uses: actions/checkout@v3
with:
submodules: recursive

- name: Install GNU Arm Embedded Toolchain
uses: carlosperate/arm-none-eabi-gcc-action@v1
with:
release: '12.2.Rel1'

- name: Build packages
shell: bash
run: |
mkdir build
cd build
cmake ..
cmake --build . --config Release
- uses: actions/upload-artifact@v3
name: Upload artifacts (commit)
if: (startsWith(github.event.ref, 'refs/tags') != true)
with:
path: |
rp2040/HyperSerialPico/firmware/*.uf2
- uses: actions/upload-artifact@v3
name: Upload artifacts (release)
if: startsWith(github.ref, 'refs/tags/')
with:
name: firmware-release
path: |
rp2040/HyperSerialPico/firmware/*.uf2
# - name: Build packages for Adafruit Feather RP2040 Scorpio (release-only)
# if: startsWith(github.ref, 'refs/tags/')
# shell: bash
# run: |
# cd build
# rm *.*
# rm ../HyperSerialPico/firmware/*
# echo "Neopixel is using GPIO16(OUTPUT_DATA_PIN) on output 0." > ../firmware/Firmwares_for_Adafruit_Feather_RP2040_Scorpio.txt
# cmake -DOVERRIDE_BOOT_WORKAROUND=ON -DOVERRIDE_DATA_PIN=16 -DCMAKE_BUILD_TYPE=Release ..
# cmake --build .
# zip -j ../HyperSerialPico/firmware/Adafruit_Feather_RP2040_Scorpio.zip ../firmware/*

# - uses: actions/upload-artifact@v3
# name: Upload artifacts (release Adafruit_Feather)
# if: startsWith(github.ref, 'refs/tags/')
# with:
# name: firmware-release
# path: |
# rp2040/HyperSerialPico/firmware/*.zip

# - name: Build packages for Adafruit ItsyBitsy RP2040 (release-only)
# if: startsWith(github.ref, 'refs/tags/')
# shell: bash
# run: |
# cd build
# rm *.*
# rm ../HyperSerialPico/firmware/*
# echo "Neopixel is using GPIO14(OUTPUT_DATA_PIN) on output 5." > ../firmware/Firmwares_for_Adafruit_ItsyBitsy_2040.txt
# cmake -DOVERRIDE_BOOT_WORKAROUND=ON -DOVERRIDE_DATA_PIN=14 -DCMAKE_BUILD_TYPE=Release ..
# cmake --build .
# rm ../firmware/*_Spi.uf2
# zip -j ../HyperSerialPico/firmware/Adafruit_ItsyBitsy_2040.zip ../firmware/*

# - uses: actions/upload-artifact@v3
# name: Upload artifacts (release Adafruit_ItsyBitsy)
# if: startsWith(github.ref, 'refs/tags/')
# with:
# name: firmware-release
# path: |
# rp2040/HyperSerialPico/firmware/*.zip

# - name: Build packages for Pimoroni Plasma 2040 (release-only)
# if: startsWith(github.ref, 'refs/tags/')
# shell: bash
# run: |
# cd build
# rm *.*
# rm ../HyperSerialPico/firmware/*
# echo "Neopixel is using GPIO15(OUTPUT_DATA_PIN) on output DA." > ../firmware/Firmwares_for_Pimoroni_Plasma_2040.txt
# cmake -DOVERRIDE_DATA_PIN=15 -DCMAKE_BUILD_TYPE=Release ..
# cmake --build .
# zip -j ../HyperSerialPico/firmware/Pimoroni_Plasma_2040.zip ../firmware/*

# - uses: actions/upload-artifact@v3
# name: Upload artifacts (release Pimoroni_Plasma)
# if: startsWith(github.ref, 'refs/tags/')
# with:
# name: firmware-release
# path: |
# rp2040/HyperSerialPico/firmware/*.zip

################################
###### Publish Releases ########
################################

publish:
name: Publish Releases
if: startsWith(github.event.ref, 'refs/tags')
needs: [HyperSpiPico]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
# generate environment variables
- name: Generate environment variables from version and tag
run: |
echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
echo "preRelease=false" >> $GITHUB_ENV
# If version contains alpha or beta, mark draft release as pre-release
- name: Mark release as pre-release
if: contains(env.VERSION, 'alpha') || contains(env.VERSION, 'beta')
run: echo "preRelease=true" >> $GITHUB_ENV

- uses: actions/download-artifact@v3
with:
name: firmware-release

# create draft release and upload artifacts
- name: Create draft release
uses: softprops/action-gh-release@v1
with:
name: HyperSPI ${{ env.VERSION }}
tag_name: ${{ env.TAG }}
files: |
*.uf2
*.zip
draft: true
prerelease: ${{ env.preRelease }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion .github/workflows/push-master.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: HyperSPI CI Build
name: HyperSPI ESP32/8266 CI Build

on: [push]

Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "rp2040/HyperSerialPico"]
path = rp2040/HyperSerialPico
url = https://github.com/awawa-dev/HyperSerialPico
2 changes: 2 additions & 0 deletions rp2040/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
build
vscode
42 changes: 42 additions & 0 deletions rp2040/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
set(CMAKE_SYSTEM_NAME Generic)
# User configuration section starts here

# Some boards, such as the first Adafruit revisions, may have trouble booting properly
# due to bad componets used in the design.
# Turn this setting to ON if your rp2040 is not detected after firmware upload and reset
set(BOOT_WORKAROUND OFF)

# Default output data pin for the non-SPI LED strips (only for sk6812/ws2812b)
set(OUTPUT_DATA_PIN 14)

# Use multi-segment, starting index of second led strip or OFF to disable
set(SECOND_SEGMENT_INDEX OFF)

# If multi-segment is used and it's reversed, set this option to ON to enable reversing
set(SECOND_SEGMENT_REVERSED OFF)

# HyperSPI communication interface with Raspberry Pi
set(OUTPUT_SPI_DATA_PIN 4)
set(OUTPUT_SPI_CLOCK_PIN 2)
set(OUTPUT_SPI_CHIP_SELECT 5)
set(OUTPUT_SPI_INTERFACE spi0)

# User configuration section ends here
# Usually you don't need to change anything below this section
cmake_minimum_required(VERSION 3.13)

set(PICO_SDK_PATH ${CMAKE_CURRENT_SOURCE_DIR}/HyperSerialPico/sdk/pico)
set(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_SOURCE_DIR}/HyperSerialPico/sdk/freertos)
include(${PICO_SDK_PATH}/external/pico_sdk_import.cmake)
include(${FREERTOS_KERNEL_PATH}/portable/ThirdParty/GCC/RP2040/FreeRTOS_Kernel_import.cmake)

project(HyperSPI C CXX ASM)
pico_sdk_init()

set(PICO_PROGRAM_MAIN_ENTRY "../hyperspi.cpp")
set(DISABLE_SPI_LEDS ON)
add_definitions(-DSPI_INTERFACE=${OUTPUT_SPI_INTERFACE}
-DSPI_DATA_PIN=${OUTPUT_SPI_DATA_PIN}
-DSPI_CLOCK_PIN=${OUTPUT_SPI_CLOCK_PIN}
-DSPI_CHIP_SELECT=${OUTPUT_SPI_CHIP_SELECT})
add_subdirectory(HyperSerialPico)
1 change: 1 addition & 0 deletions rp2040/HyperSerialPico
Submodule HyperSerialPico added at 5bf475
Loading

0 comments on commit 641ffe1

Please sign in to comment.