From ba69da1d8f93af91685e691e5441cd3bca5c71b0 Mon Sep 17 00:00:00 2001 From: hathach Date: Fri, 29 Jan 2021 11:24:05 +0700 Subject: [PATCH 1/2] add support for LOG=2 LOGGER=rtt is not tested since jlink doesn't support rp2040 just yet --- examples/make.mk | 7 ++++++- examples/rules.mk | 25 ++++++++++++++---------- hw/bsp/rp2040/family.c | 40 +++++++++++++++++++++++++++++++++++--- hw/bsp/rp2040/family.cmake | 23 ++++++++++++++++++++++ 4 files changed, 81 insertions(+), 14 deletions(-) diff --git a/examples/make.mk b/examples/make.mk index e820989b7..5387a4ec4 100644 --- a/examples/make.mk +++ b/examples/make.mk @@ -112,13 +112,18 @@ endif # Log level is mapped to TUSB DEBUG option ifneq ($(LOG),) + CMAKE_DEFSYM += -DLOG=$(LOG) CFLAGS += -DCFG_TUSB_DEBUG=$(LOG) endif # Logger: default is uart, can be set to rtt or swo +ifneq ($(LOGGER),) + CMAKE_DEFSYM += -DLOGGER=$(LOGGER) +endif + ifeq ($(LOGGER),rtt) - RTT_SRC = lib/SEGGER_RTT CFLAGS += -DLOGGER_RTT -DSEGGER_RTT_MODE_DEFAULT=SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL + RTT_SRC = lib/SEGGER_RTT INC += $(TOP)/$(RTT_SRC)/RTT SRC_C += $(RTT_SRC)/RTT/SEGGER_RTT.c else ifeq ($(LOGGER),swo) diff --git a/examples/rules.mk b/examples/rules.mk index aac0fbb38..5dded759c 100644 --- a/examples/rules.mk +++ b/examples/rules.mk @@ -11,30 +11,30 @@ ifeq ($(FAMILY),esp32s2) .PHONY: all clean flash all: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) build + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) build build: all clean: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) clean + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) clean fullclean: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) fullclean + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) fullclean flash: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) flash + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) flash bootloader-flash: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) bootloader-flash + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) bootloader-flash app-flash: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) app-flash + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) app-flash erase: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) erase_flash + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) erase_flash monitor: - idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) monitor + idf.py -B$(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) $(CMAKE_DEFSYM) monitor UF2_FAMILY_ID = 0xbfdd4eee $(BUILD)/$(PROJECT).uf2: $(BUILD)/$(PROJECT).hex @@ -43,13 +43,18 @@ $(BUILD)/$(PROJECT).uf2: $(BUILD)/$(PROJECT).hex else ifeq ($(FAMILY),rp2040) -all: - [ -d $(BUILD) ] || cmake -S . -B $(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) -DPICO_BUILD_DOCS=0 +$(BUILD): + cmake -S . -B $(BUILD) -DFAMILY=$(FAMILY) -DBOARD=$(BOARD) -DPICO_BUILD_DOCS=0 $(CMAKE_DEFSYM) + +all: $(BUILD) $(MAKE) -C $(BUILD) clean: $(RM) -rf $(BUILD) +flash: + @$(CP) $(BUILD)/$(PROJECT).uf2 /media/$(USER)/RPI-RP2 + else # GNU Make build system diff --git a/hw/bsp/rp2040/family.c b/hw/bsp/rp2040/family.c index e0dc47b39..452e4771a 100644 --- a/hw/bsp/rp2040/family.c +++ b/hw/bsp/rp2040/family.c @@ -76,6 +76,38 @@ bool __no_inline_not_in_flash_func(get_bootsel_button)() { } #endif +//------------- Segger RTT retarget -------------// +#if defined(LOGGER_RTT) +// Logging with RTT + +#include "pico/stdio/driver.h" +#include "SEGGER_RTT.h" + +static void stdio_rtt_write (const char *buf, int length) +{ + SEGGER_RTT_Write(0, buf, length); +} + +static int stdio_rtt_read (char *buf, int len) +{ + return SEGGER_RTT_Read(0, buf, len); +} + +static stdio_driver_t stdio_rtt = +{ + .out_chars = stdio_rtt_write, + .out_flush = NULL, + .in_chars = stdio_rtt_read +}; + +void stdio_rtt_init(void) +{ + stdio_set_driver_enabled(&stdio_rtt, true); +} + +#endif + + void board_init(void) { gpio_init(LED_PIN); @@ -86,9 +118,11 @@ void board_init(void) #endif #ifdef UART_DEV - uart_init(UART_DEV, CFG_BOARD_UART_BAUDRATE); - gpio_set_function(UART_TX_PIN, GPIO_FUNC_UART); - gpio_set_function(UART_RX_PIN, GPIO_FUNC_UART); + stdio_uart_init_full(UART_DEV, CFG_BOARD_UART_BAUDRATE, UART_TX_PIN, UART_RX_PIN); +#endif + +#if defined(LOGGER_RTT) + stdio_rtt_init(); #endif // todo probably set up device mode? diff --git a/hw/bsp/rp2040/family.cmake b/hw/bsp/rp2040/family.cmake index edd57a39b..e936fbb24 100644 --- a/hw/bsp/rp2040/family.cmake +++ b/hw/bsp/rp2040/family.cmake @@ -31,3 +31,26 @@ target_include_directories(${PROJECT} PUBLIC target_compile_definitions(${PROJECT} PUBLIC CFG_TUSB_MCU=OPT_MCU_RP2040 ) + +if(DEFINED LOG) + target_compile_definitions(${PROJECT} PUBLIC CFG_TUSB_DEBUG=${LOG} ) + pico_enable_stdio_uart(${PROJECT} 1) +endif() + +if(LOGGER STREQUAL "rtt") + pico_enable_stdio_uart(${PROJECT} 0) + + target_compile_definitions(${PROJECT} PUBLIC + LOGGER_RTT + SEGGER_RTT_MODE_DEFAULT=SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL + ) + + target_sources(${PROJECT} PUBLIC + ${TOP}/lib/SEGGER_RTT/RTT/SEGGER_RTT.c + ) + + target_include_directories(${PROJECT} PUBLIC + ${TOP}/lib/SEGGER_RTT/RTT + ) +endif() + From 8e954a439151822fcd415b3c611008aee423b813 Mon Sep 17 00:00:00 2001 From: hathach Date: Mon, 1 Feb 2021 13:37:37 +0700 Subject: [PATCH 2/2] added enumerate walkaround for RP2040-E5 - PICO_RP2040_USB_DEVICE_ENUMERATION_FIX=1 - target linke pico_fix_rp2040_usb_device_enumeration --- examples/device/audio_test/CMakeLists.txt | 2 +- examples/device/board_test/CMakeLists.txt | 2 +- examples/device/cdc_dual_ports/CMakeLists.txt | 2 +- examples/device/cdc_msc/CMakeLists.txt | 2 +- examples/device/dfu_rt/CMakeLists.txt | 2 +- examples/device/dynamic_configuration/CMakeLists.txt | 2 +- examples/device/hid_composite/CMakeLists.txt | 2 +- examples/device/hid_generic_inout/CMakeLists.txt | 2 +- examples/device/hid_multiple_interface/CMakeLists.txt | 2 +- examples/device/midi_test/CMakeLists.txt | 2 +- examples/device/msc_dual_lun/CMakeLists.txt | 2 +- examples/device/net_lwip_webserver/CMakeLists.txt | 2 +- examples/device/uac2_headset/CMakeLists.txt | 2 +- examples/device/usbtmc/CMakeLists.txt | 2 +- examples/device/webusb_serial/CMakeLists.txt | 2 +- hw/bsp/rp2040/family.cmake | 1 + 16 files changed, 16 insertions(+), 15 deletions(-) diff --git a/examples/device/audio_test/CMakeLists.txt b/examples/device/audio_test/CMakeLists.txt index 645d57157..a10473b79 100644 --- a/examples/device/audio_test/CMakeLists.txt +++ b/examples/device/audio_test/CMakeLists.txt @@ -33,7 +33,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/board_test/CMakeLists.txt b/examples/device/board_test/CMakeLists.txt index 573f026f3..b8b7e7297 100644 --- a/examples/device/board_test/CMakeLists.txt +++ b/examples/device/board_test/CMakeLists.txt @@ -37,7 +37,7 @@ elseif(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/cdc_dual_ports/CMakeLists.txt b/examples/device/cdc_dual_ports/CMakeLists.txt index c358eddab..f4bf75c26 100644 --- a/examples/device/cdc_dual_ports/CMakeLists.txt +++ b/examples/device/cdc_dual_ports/CMakeLists.txt @@ -33,7 +33,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/cdc_msc/CMakeLists.txt b/examples/device/cdc_msc/CMakeLists.txt index 5f4d9ba4e..9e0d1f790 100644 --- a/examples/device/cdc_msc/CMakeLists.txt +++ b/examples/device/cdc_msc/CMakeLists.txt @@ -39,7 +39,7 @@ elseif(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/dfu_rt/CMakeLists.txt b/examples/device/dfu_rt/CMakeLists.txt index c358eddab..f4bf75c26 100644 --- a/examples/device/dfu_rt/CMakeLists.txt +++ b/examples/device/dfu_rt/CMakeLists.txt @@ -33,7 +33,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/dynamic_configuration/CMakeLists.txt b/examples/device/dynamic_configuration/CMakeLists.txt index a759e56e8..b4c95652a 100644 --- a/examples/device/dynamic_configuration/CMakeLists.txt +++ b/examples/device/dynamic_configuration/CMakeLists.txt @@ -34,7 +34,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/hid_composite/CMakeLists.txt b/examples/device/hid_composite/CMakeLists.txt index c358eddab..f4bf75c26 100644 --- a/examples/device/hid_composite/CMakeLists.txt +++ b/examples/device/hid_composite/CMakeLists.txt @@ -33,7 +33,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/hid_generic_inout/CMakeLists.txt b/examples/device/hid_generic_inout/CMakeLists.txt index c358eddab..f4bf75c26 100644 --- a/examples/device/hid_generic_inout/CMakeLists.txt +++ b/examples/device/hid_generic_inout/CMakeLists.txt @@ -33,7 +33,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/hid_multiple_interface/CMakeLists.txt b/examples/device/hid_multiple_interface/CMakeLists.txt index c358eddab..f4bf75c26 100644 --- a/examples/device/hid_multiple_interface/CMakeLists.txt +++ b/examples/device/hid_multiple_interface/CMakeLists.txt @@ -33,7 +33,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/midi_test/CMakeLists.txt b/examples/device/midi_test/CMakeLists.txt index c358eddab..f4bf75c26 100644 --- a/examples/device/midi_test/CMakeLists.txt +++ b/examples/device/midi_test/CMakeLists.txt @@ -33,7 +33,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/msc_dual_lun/CMakeLists.txt b/examples/device/msc_dual_lun/CMakeLists.txt index f0e050f9c..6032308f2 100644 --- a/examples/device/msc_dual_lun/CMakeLists.txt +++ b/examples/device/msc_dual_lun/CMakeLists.txt @@ -34,7 +34,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/net_lwip_webserver/CMakeLists.txt b/examples/device/net_lwip_webserver/CMakeLists.txt index ec4996086..e3c8190f4 100644 --- a/examples/device/net_lwip_webserver/CMakeLists.txt +++ b/examples/device/net_lwip_webserver/CMakeLists.txt @@ -80,7 +80,7 @@ if(FAMILY STREQUAL "rp2040") HTTPD_USE_CUSTOM_FSDATA=0 ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/uac2_headset/CMakeLists.txt b/examples/device/uac2_headset/CMakeLists.txt index c358eddab..f4bf75c26 100644 --- a/examples/device/uac2_headset/CMakeLists.txt +++ b/examples/device/uac2_headset/CMakeLists.txt @@ -33,7 +33,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/usbtmc/CMakeLists.txt b/examples/device/usbtmc/CMakeLists.txt index 686e8dc2d..9a4aa382b 100644 --- a/examples/device/usbtmc/CMakeLists.txt +++ b/examples/device/usbtmc/CMakeLists.txt @@ -34,7 +34,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/examples/device/webusb_serial/CMakeLists.txt b/examples/device/webusb_serial/CMakeLists.txt index c358eddab..f4bf75c26 100644 --- a/examples/device/webusb_serial/CMakeLists.txt +++ b/examples/device/webusb_serial/CMakeLists.txt @@ -33,7 +33,7 @@ if(FAMILY STREQUAL "rp2040") CFG_TUSB_OS=OPT_OS_PICO ) - target_link_libraries(${PROJECT} pico_stdlib) + target_link_libraries(${PROJECT} pico_stdlib pico_fix_rp2040_usb_device_enumeration) pico_add_extra_outputs(${PROJECT}) else() diff --git a/hw/bsp/rp2040/family.cmake b/hw/bsp/rp2040/family.cmake index e936fbb24..e4f5f47b4 100644 --- a/hw/bsp/rp2040/family.cmake +++ b/hw/bsp/rp2040/family.cmake @@ -30,6 +30,7 @@ target_include_directories(${PROJECT} PUBLIC target_compile_definitions(${PROJECT} PUBLIC CFG_TUSB_MCU=OPT_MCU_RP2040 + PICO_RP2040_USB_DEVICE_ENUMERATION_FIX=1 ) if(DEFINED LOG)