kopia lustrzana https://github.com/pimoroni/pimoroni-pico
				
				
				
			CI: Add build for Inky Frame.
							rodzic
							
								
									6f74017894
								
							
						
					
					
						commit
						43ef76b945
					
				| 
						 | 
				
			
			@ -72,6 +72,8 @@ jobs:
 | 
			
		|||
          board: PICO_W_ENVIRO
 | 
			
		||||
        - name: picow_galactic_unicorn
 | 
			
		||||
          board: PICO_W
 | 
			
		||||
        - name: picow_inky_frame
 | 
			
		||||
          board: PICO_W
 | 
			
		||||
 | 
			
		||||
    env:
 | 
			
		||||
      # MicroPython version will be contained in github.event.release.tag_name for releases
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
{
 | 
			
		||||
    "deploy": [
 | 
			
		||||
        "../deploy.md"
 | 
			
		||||
    ],
 | 
			
		||||
    "docs": "",
 | 
			
		||||
    "features": [
 | 
			
		||||
        "Breadboard friendly",
 | 
			
		||||
        "Castellated Pads",
 | 
			
		||||
        "Micro USB",
 | 
			
		||||
        "WiFi"
 | 
			
		||||
    ],
 | 
			
		||||
    "id": "rp2-pico-w",
 | 
			
		||||
    "images": [
 | 
			
		||||
        "rp2-pico-w.jpg"
 | 
			
		||||
    ],
 | 
			
		||||
    "mcu": "rp2040",
 | 
			
		||||
    "product": "Pico W",
 | 
			
		||||
    "thumbnail": "",
 | 
			
		||||
    "url": "https://www.raspberrypi.com/products/raspberry-pi-pico/",
 | 
			
		||||
    "vendor": "Raspberry Pi"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
include("../manifest.py")
 | 
			
		||||
 | 
			
		||||
freeze("$(MPY_DIR)/tools", "upip.py")
 | 
			
		||||
freeze("$(MPY_DIR)/tools", "upip_utarfile.py")
 | 
			
		||||
 | 
			
		||||
if os.path.isdir(convert_path("$(MPY_LIB_DIR)")):
 | 
			
		||||
    freeze("$(MPY_LIB_DIR)/python-ecosys/urequests", "urequests.py")
 | 
			
		||||
    freeze("$(MPY_LIB_DIR)/micropython/umqtt.simple", "umqtt")
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
# cmake file for Raspberry Pi Pico W
 | 
			
		||||
set(MICROPY_BOARD PICO_W)
 | 
			
		||||
 | 
			
		||||
set(MICROPY_PY_LWIP ON)
 | 
			
		||||
set(MICROPY_PY_NETWORK_CYW43 ON)
 | 
			
		||||
 | 
			
		||||
# Board specific version of the frozen manifest
 | 
			
		||||
set(MICROPY_FROZEN_MANIFEST ${CMAKE_SOURCE_DIR}/boards/PICO_W_INKY/manifest.py)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
// Board and hardware specific configuration
 | 
			
		||||
#define MICROPY_HW_BOARD_NAME                   "Raspberry Pi Pico W"
 | 
			
		||||
 | 
			
		||||
// todo: We need something to check our binary size
 | 
			
		||||
#define MICROPY_HW_FLASH_STORAGE_BYTES          (848 * 1024)
 | 
			
		||||
 | 
			
		||||
// Enable networking.
 | 
			
		||||
#define MICROPY_PY_NETWORK 1
 | 
			
		||||
 | 
			
		||||
// CYW43 driver configuration.
 | 
			
		||||
#define CYW43_USE_SPI (1)
 | 
			
		||||
#define CYW43_LWIP (1)
 | 
			
		||||
#define CYW43_GPIO (1)
 | 
			
		||||
#define CYW43_SPI_PIO (1)
 | 
			
		||||
 | 
			
		||||
// For debugging mbedtls - also set
 | 
			
		||||
// Debug level (0-4) 1=warning, 2=info, 3=debug, 4=verbose
 | 
			
		||||
// #define MODUSSL_MBEDTLS_DEBUG_LEVEL 1
 | 
			
		||||
 | 
			
		||||
#define MICROPY_HW_PIN_CYW43_COUNT CYW43_WL_GPIO_COUNT
 | 
			
		||||
#ifdef CYW43_WL_GPIO_LED_PIN
 | 
			
		||||
#define MICROPY_HW_PIN_CYW43_LED_PIN_NUM CYW43_WL_GPIO_LED_PIN
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define MICROPY_HW_PIN_RESERVED(i) ((i) == CYW43_PIN_WL_HOST_WAKE || (i) == CYW43_PIN_WL_REG_ON)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
SRC_DIR=$1
 | 
			
		||||
DST_DIR=$2
 | 
			
		||||
 | 
			
		||||
echo "Applying wakeup_gpio.patch"
 | 
			
		||||
cd "$DST_DIR/../../lib/pico-sdk"
 | 
			
		||||
git apply "$SRC_DIR/wakeup_gpio.patch"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,102 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2022 Raspberry Pi (Trading) Ltd.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: BSD-3-Clause
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// -----------------------------------------------------
 | 
			
		||||
// NOTE: THIS HEADER IS ALSO INCLUDED BY ASSEMBLER SO
 | 
			
		||||
//       SHOULD ONLY CONSIST OF PREPROCESSOR DIRECTIVES
 | 
			
		||||
// -----------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// This header may be included by other board headers as "boards/pico.h"
 | 
			
		||||
 | 
			
		||||
#ifndef _BOARDS_PICO_W_H
 | 
			
		||||
#define _BOARDS_PICO_W_H
 | 
			
		||||
 | 
			
		||||
// For board detection
 | 
			
		||||
#define RASPBERRYPI_PICO_W
 | 
			
		||||
 | 
			
		||||
// --- UART ---
 | 
			
		||||
#ifndef PICO_DEFAULT_UART
 | 
			
		||||
#define PICO_DEFAULT_UART 0
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PICO_DEFAULT_UART_TX_PIN
 | 
			
		||||
#define PICO_DEFAULT_UART_TX_PIN 0
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PICO_DEFAULT_UART_RX_PIN
 | 
			
		||||
#define PICO_DEFAULT_UART_RX_PIN 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// --- LED ---
 | 
			
		||||
// no PICO_DEFAULT_LED_PIN - LED is on Wireless chip
 | 
			
		||||
// no PICO_DEFAULT_WS2812_PIN
 | 
			
		||||
 | 
			
		||||
// --- I2C ---
 | 
			
		||||
#ifndef PICO_DEFAULT_I2C
 | 
			
		||||
#define PICO_DEFAULT_I2C 0
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PICO_DEFAULT_I2C_SDA_PIN
 | 
			
		||||
#define PICO_DEFAULT_I2C_SDA_PIN 4
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PICO_DEFAULT_I2C_SCL_PIN
 | 
			
		||||
#define PICO_DEFAULT_I2C_SCL_PIN 5
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// --- SPI ---
 | 
			
		||||
#ifndef PICO_DEFAULT_SPI
 | 
			
		||||
#define PICO_DEFAULT_SPI 0
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PICO_DEFAULT_SPI_SCK_PIN
 | 
			
		||||
#define PICO_DEFAULT_SPI_SCK_PIN 18
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PICO_DEFAULT_SPI_TX_PIN
 | 
			
		||||
#define PICO_DEFAULT_SPI_TX_PIN 19
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PICO_DEFAULT_SPI_RX_PIN
 | 
			
		||||
#define PICO_DEFAULT_SPI_RX_PIN 16
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PICO_DEFAULT_SPI_CSN_PIN
 | 
			
		||||
#define PICO_DEFAULT_SPI_CSN_PIN 17
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// --- FLASH ---
 | 
			
		||||
 | 
			
		||||
#define PICO_BOOT_STAGE2_CHOOSE_W25Q080 1
 | 
			
		||||
 | 
			
		||||
#ifndef PICO_FLASH_SPI_CLKDIV
 | 
			
		||||
#define PICO_FLASH_SPI_CLKDIV 2
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef PICO_FLASH_SIZE_BYTES
 | 
			
		||||
#define PICO_FLASH_SIZE_BYTES (2 * 1024 * 1024)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// note the SMSP mode pin is on WL_GPIO1
 | 
			
		||||
// #define PICO_SMPS_MODE_PIN
 | 
			
		||||
 | 
			
		||||
#ifndef PICO_RP2040_B0_SUPPORTED
 | 
			
		||||
#define PICO_RP2040_B0_SUPPORTED 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef PICO_RP2040_B1_SUPPORTED
 | 
			
		||||
#define PICO_RP2040_B1_SUPPORTED 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef CYW43_PIN_WL_HOST_WAKE
 | 
			
		||||
#define CYW43_PIN_WL_HOST_WAKE 24
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef CYW43_PIN_WL_REG_ON
 | 
			
		||||
#define CYW43_PIN_WL_REG_ON 23
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef CYW43_WL_GPIO_COUNT
 | 
			
		||||
#define CYW43_WL_GPIO_COUNT 3
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef CYW43_WL_GPIO_LED_PIN
 | 
			
		||||
#define CYW43_WL_GPIO_LED_PIN 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,143 @@
 | 
			
		|||
diff --git a/src/rp2_common/pico_runtime/runtime.c b/src/rp2_common/pico_runtime/runtime.c
 | 
			
		||||
index 70dd3bb..b8c1ed0 100644
 | 
			
		||||
--- a/src/rp2_common/pico_runtime/runtime.c
 | 
			
		||||
+++ b/src/rp2_common/pico_runtime/runtime.c
 | 
			
		||||
@@ -17,6 +17,7 @@
 | 
			
		||||
 #include "hardware/clocks.h"
 | 
			
		||||
 #include "hardware/irq.h"
 | 
			
		||||
 #include "hardware/resets.h"
 | 
			
		||||
+#include "hardware/gpio.h"
 | 
			
		||||
 
 | 
			
		||||
 #include "pico/mutex.h"
 | 
			
		||||
 #include "pico/time.h"
 | 
			
		||||
@@ -32,6 +33,21 @@
 | 
			
		||||
 #include "pico/bootrom.h"
 | 
			
		||||
 #endif
 | 
			
		||||
 
 | 
			
		||||
+// Pins to toggle on wakeup
 | 
			
		||||
+#ifndef PICO_WAKEUP_PIN_MASK
 | 
			
		||||
+#define PICO_WAKEUP_PIN_MASK ((0b1 << 2) | (0b1 << 6))
 | 
			
		||||
+#endif
 | 
			
		||||
+
 | 
			
		||||
+// Direction
 | 
			
		||||
+#ifndef PICO_WAKEUP_PIN_DIR
 | 
			
		||||
+#define PICO_WAKEUP_PIN_DIR ((0b1 << 2) | (0b1 << 6))
 | 
			
		||||
+#endif
 | 
			
		||||
+
 | 
			
		||||
+// Value
 | 
			
		||||
+#ifndef PICO_WAKEUP_PIN_VALUE
 | 
			
		||||
+#define PICO_WAKEUP_PIN_VALUE ((0b1 << 2) | (0b1 << 6))
 | 
			
		||||
+#endif
 | 
			
		||||
+
 | 
			
		||||
 extern char __StackLimit; /* Set by linker.  */
 | 
			
		||||
 
 | 
			
		||||
 uint32_t __attribute__((section(".ram_vector_table"))) ram_vector_table[48];
 | 
			
		||||
@@ -61,11 +77,18 @@ void runtime_install_stack_guard(void *stack_bottom) {
 | 
			
		||||
                    | 0x10000000; // XN = disable instruction fetch; no other bits means no permissions
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
-void runtime_init(void) {
 | 
			
		||||
+void runtime_user_init(void) {
 | 
			
		||||
+    gpio_init_mask(PICO_WAKEUP_PIN_MASK);
 | 
			
		||||
+    gpio_set_dir_masked(PICO_WAKEUP_PIN_MASK, PICO_WAKEUP_PIN_DIR);
 | 
			
		||||
+    gpio_put_masked(PICO_WAKEUP_PIN_MASK, PICO_WAKEUP_PIN_VALUE);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+void runtime_reset_peripherals(void) {
 | 
			
		||||
     // Reset all peripherals to put system into a known state,
 | 
			
		||||
     // - except for QSPI pads and the XIP IO bank, as this is fatal if running from flash
 | 
			
		||||
     // - and the PLLs, as this is fatal if clock muxing has not been reset on this boot
 | 
			
		||||
     // - and USB, syscfg, as this disturbs USB-to-SWD on core 1
 | 
			
		||||
+
 | 
			
		||||
     reset_block(~(
 | 
			
		||||
             RESETS_RESET_IO_QSPI_BITS |
 | 
			
		||||
             RESETS_RESET_PADS_QSPI_BITS |
 | 
			
		||||
@@ -86,7 +109,9 @@ void runtime_init(void) {
 | 
			
		||||
             RESETS_RESET_UART1_BITS |
 | 
			
		||||
             RESETS_RESET_USBCTRL_BITS
 | 
			
		||||
     ));
 | 
			
		||||
+}
 | 
			
		||||
 
 | 
			
		||||
+void runtime_init(void) {
 | 
			
		||||
     // pre-init runs really early since we need it even for memcpy and divide!
 | 
			
		||||
     // (basically anything in aeabi that uses bootrom)
 | 
			
		||||
 
 | 
			
		||||
diff --git a/src/rp2_common/pico_standard_link/crt0.S b/src/rp2_common/pico_standard_link/crt0.S
 | 
			
		||||
index b2992f6..6091e70 100644
 | 
			
		||||
--- a/src/rp2_common/pico_standard_link/crt0.S
 | 
			
		||||
+++ b/src/rp2_common/pico_standard_link/crt0.S
 | 
			
		||||
@@ -9,6 +9,8 @@
 | 
			
		||||
 #include "hardware/regs/addressmap.h"
 | 
			
		||||
 #include "hardware/regs/sio.h"
 | 
			
		||||
 #include "pico/binary_info/defs.h"
 | 
			
		||||
+#include "hardware/regs/resets.h"
 | 
			
		||||
+#include "hardware/regs/rosc.h"
 | 
			
		||||
 
 | 
			
		||||
 #ifdef NDEBUG
 | 
			
		||||
 #ifndef COLLAPSE_IRQS
 | 
			
		||||
@@ -225,6 +227,23 @@ _reset_handler:
 | 
			
		||||
     cmp r0, #0
 | 
			
		||||
     bne hold_non_core0_in_bootrom
 | 
			
		||||
 
 | 
			
		||||
+    // Increase ROSC frequency to ~48MHz (range 14.4 - 96)
 | 
			
		||||
+    // Startup drops from ~160ms to ~32ms on Pico W MicroPython
 | 
			
		||||
+    ldr r0, =(ROSC_BASE + ROSC_DIV_OFFSET)
 | 
			
		||||
+    ldr r1, =0xaa2
 | 
			
		||||
+    str r1, [r0]
 | 
			
		||||
+
 | 
			
		||||
+    ldr r1, =runtime_reset_peripherals
 | 
			
		||||
+    blx r1
 | 
			
		||||
+
 | 
			
		||||
+    ldr r1, =runtime_user_init
 | 
			
		||||
+    blx r1
 | 
			
		||||
+
 | 
			
		||||
+    // Read GPIO state for front buttons and store
 | 
			
		||||
+    movs r3, 0xd0                // Load 0xd0 into r3
 | 
			
		||||
+    lsls r3, r3, 24              // Shift left 24 to get 0xd0000000
 | 
			
		||||
+    ldr r6, [r3, 4]              // Load GPIO state (0xd0000004) into r6
 | 
			
		||||
+
 | 
			
		||||
     // In a NO_FLASH binary, don't perform .data copy, since it's loaded
 | 
			
		||||
     // in-place by the SRAM load. Still need to clear .bss
 | 
			
		||||
 #if !PICO_NO_FLASH
 | 
			
		||||
@@ -251,6 +270,10 @@ bss_fill_test:
 | 
			
		||||
     cmp r1, r2
 | 
			
		||||
     bne bss_fill_loop
 | 
			
		||||
 
 | 
			
		||||
+    // runtime_wakeup_gpio_state gets zero init above
 | 
			
		||||
+    ldr r2, =runtime_wakeup_gpio_state   // Load output var addr into r2
 | 
			
		||||
+    str r6, [r2]                        // Store r6 to r2
 | 
			
		||||
+
 | 
			
		||||
 platform_entry: // symbol for stack traces
 | 
			
		||||
     // Use 32-bit jumps, in case these symbols are moved out of branch range
 | 
			
		||||
     // (e.g. if main is in SRAM and crt0 in flash)
 | 
			
		||||
@@ -314,6 +337,19 @@ data_cpy_table:
 | 
			
		||||
 runtime_init:
 | 
			
		||||
     bx lr
 | 
			
		||||
 
 | 
			
		||||
+.weak runtime_user_init
 | 
			
		||||
+.type runtime_user_init,%function
 | 
			
		||||
+.thumb_func
 | 
			
		||||
+runtime_user_init:
 | 
			
		||||
+    bx lr
 | 
			
		||||
+
 | 
			
		||||
+.weak runtime_reset_peripherals
 | 
			
		||||
+.type runtime_reset_peripherals,%function
 | 
			
		||||
+.thumb_func
 | 
			
		||||
+runtime_reset_peripherals:
 | 
			
		||||
+    bx lr
 | 
			
		||||
+
 | 
			
		||||
+
 | 
			
		||||
 // ----------------------------------------------------------------------------
 | 
			
		||||
 // If core 1 somehow gets into crt0 due to a spectacular VTOR mishap, we need to
 | 
			
		||||
 // catch it and send back to the sleep-and-launch code in the bootrom. Shouldn't
 | 
			
		||||
@@ -345,3 +381,9 @@ __get_current_exception:
 | 
			
		||||
 .align 2
 | 
			
		||||
     .equ HeapSize, PICO_HEAP_SIZE
 | 
			
		||||
 .space HeapSize
 | 
			
		||||
+
 | 
			
		||||
+.section .data._reset_handler
 | 
			
		||||
+.global runtime_wakeup_gpio_state
 | 
			
		||||
+.align 4
 | 
			
		||||
+runtime_wakeup_gpio_state:
 | 
			
		||||
+.word 0x00000000
 | 
			
		||||
\ No newline at end of file
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
include_directories(${CMAKE_CURRENT_LIST_DIR}/../../)
 | 
			
		||||
 | 
			
		||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
 | 
			
		||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../")
 | 
			
		||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../../")
 | 
			
		||||
 | 
			
		||||
# Essential
 | 
			
		||||
include(pimoroni_i2c/micropython)
 | 
			
		||||
include(pimoroni_bus/micropython)
 | 
			
		||||
 | 
			
		||||
# Pico Graphics Essential
 | 
			
		||||
include(hershey_fonts/micropython)
 | 
			
		||||
include(bitmap_fonts/micropython)
 | 
			
		||||
include(picographics/micropython)
 | 
			
		||||
 | 
			
		||||
# Pico Graphics Extra
 | 
			
		||||
include(jpegdec/micropython)
 | 
			
		||||
include(qrcode/micropython/micropython)
 | 
			
		||||
 | 
			
		||||
# Sensors & Breakouts
 | 
			
		||||
include(breakout_dotmatrix/micropython)
 | 
			
		||||
include(breakout_encoder/micropython)
 | 
			
		||||
include(breakout_ioexpander/micropython)
 | 
			
		||||
include(breakout_ltr559/micropython)
 | 
			
		||||
include(breakout_as7262/micropython)
 | 
			
		||||
include(breakout_rgbmatrix5x5/micropython)
 | 
			
		||||
include(breakout_matrix11x7/micropython)
 | 
			
		||||
include(breakout_msa301/micropython)
 | 
			
		||||
include(breakout_pmw3901/micropython)
 | 
			
		||||
include(breakout_mics6814/micropython)
 | 
			
		||||
include(breakout_potentiometer/micropython)
 | 
			
		||||
include(breakout_rtc/micropython)
 | 
			
		||||
include(breakout_trackball/micropython)
 | 
			
		||||
include(breakout_sgp30/micropython)
 | 
			
		||||
include(breakout_bh1745/micropython)
 | 
			
		||||
include(breakout_bme68x/micropython)
 | 
			
		||||
include(breakout_bme280/micropython)
 | 
			
		||||
include(breakout_bmp280/micropython)
 | 
			
		||||
include(breakout_icp10125/micropython)
 | 
			
		||||
include(breakout_scd41/micropython)
 | 
			
		||||
include(breakout_vl53l5cx/micropython)
 | 
			
		||||
include(pcf85063a/micropython)
 | 
			
		||||
 | 
			
		||||
# Utility
 | 
			
		||||
include(adcfft/micropython)
 | 
			
		||||
include(wakeup/micropython)
 | 
			
		||||
 | 
			
		||||
# LEDs & Matrices
 | 
			
		||||
include(plasma/micropython)
 | 
			
		||||
 | 
			
		||||
# Servos & Motors
 | 
			
		||||
include(pwm/micropython)
 | 
			
		||||
include(servo/micropython)
 | 
			
		||||
include(encoder/micropython)
 | 
			
		||||
include(motor/micropython)
 | 
			
		||||
 | 
			
		||||
# include(micropython-common)
 | 
			
		||||
 | 
			
		||||
include(modules_py/modules_py)
 | 
			
		||||
		Ładowanie…
	
		Reference in New Issue