I confirm that with the right compilation option webmite work on PicoCalc.
Nice! I didn’t actually try to do the build with that setting, since I saw some other things were missing, and I didn’t think it would work on the PicoCalc without modification. I spent a lot of time looking over the code but I guess I should have just tried to build it with that setting.
That said, only changing the compilation option and using “WEBRP2350” instead of “PICORP2350” finally allowed me to see the keybaord error others have reported. Doing a WebMite build this way will cause “I2C Keyboard not found, OPTION KEYBOARD disabled.”
The good news is, that might help track down what’s causing the keyboard problem. As far as the build goes,
“WEBRP2350” has most of the components of “PICORP2350”, but it’s missing:
- GUI.c
- -DGUICONTROLS
- pico_multicore
And it has a larger PICO_HEAP_SIZE and PICO_STACK_SIZE set (it’s 0x2000 for both with just the Pico2, and 0x4000 for both with WebMite).
It has a few extra things, but those all appear to be related to running the webserver in the background.
There are also plenty of changes in the code itself. For instance, I’m not sure why, but overclocking is locked down and on WebMite builds you can’t go above 252000, while in the regular PicoMite build for the Pico2 it allows going up to 396000. (I’ve only personally set it to 380000 to play it safe, but the code allows that little bit higher.)
Since multicore was there for the Pico build and it showed the keyboard error, I’m wondering if it’s a question of processor speed, or something else. I was running WebMite at it’s default limit of 252000, but I still got the error. And I’m assuming people using guu’s build may not have even changed the value from the default (which I think is 150000). So it’s probably not the speed after all. I’m not sure what’s causing that error.
I’ll upload a firmware binary release on the github for the WebMite version if people want to try it, but be aware that you’ll get the keyboard error eventually, at least until that gets sorted out.
Yes the Pico2 firmware worked fine, sorry for the long delay in replying.
I then noticed a cracked to the lower right corner of the screen and then upon closer inspection the line where the ribbon cable attaches…
I’m basically just an idiot as I damaged the screen changing Pico boards and I now am waiting for a replacement!
So back to the Colour Maximite 2 for me
Thanks.
I feel your pain. My screen also broke after I swapped modules. I’d done it plenty of times before and everything was fine, but the last time the screen shifted slightly and I failed to notice. I’ve got a replacement on the way too.
After seeing posts about screen breakage here and on Discord, when I was assembling mine, I taped the screen down with a bit of electrical tape.
So you don’t plan on keeping this up with the revisions (currently RC11)? I hope someone else can. The hardware is too good to be stuck with older versions that may lack features. One example if the BIT command and function. It was removed from PicoMite but added back in with revision 11.
Is this not the official source code repository?
It’s currently at RC9 and I am unaware of any source for RC11.
If you’ve got a link to a different official source repo for PicoMite then I can use it instead. At present my repo is up to date with this one.
@Toml_12953 I had to dig to even find any mention of it, but apparently about 6 hours ago a binary only release of RC11 was released. There haven’t been source releases since RC9. You must have seen that PicoMite forum post immediately after it went up!
There’s not even a mention of it on the PicoMite page, though the download does include binaries for all the official platforms with RC11 in the names.
I’m hoping the PicoMite devs continue to do source releases. I’ve heard they were annoyed that Clockwork used their stuff without asking, and that whole thing was handled poorly. I think it’s a cool project and the PicoCalc is an interesting platform for it. Totally understandable if source only comes at major stable releases though. Might be less chaotic for everyone that way!
It would also be good at some point to try to get the PicoCalc specific changes merged into the mainline code, if possible. But the makefile would need to be modified. I blocked out the code changes in other files with #ifdefs, unlike the initial PicoCalc release, so the PicoCalc specific stuff is isolated. But I’m also not convinced that the PicoCalc code is ready and stable anyway, since there’s one known bug with the keyboard handling, and potentially others that haven’t been discovered yet. I have a potential fix for the keyboard issue though, which I just need to test a little more and then I’ll update my repo.
I just got the keyboard error
Hi @adcockm,
The repository you have forked from GitHub - UKTailwind/PicoMiteAllVersions: This contains files to build MMbasic to run on both RP2040 and RP2350 is the official PicoMite source repository.
HOWEVER the maintainer (Peter Mather) does not use github for his own source-control purposes, just as a means of publishing the source-code to the community. This means it is often a couple of days out of date compared with the binaries he shares on TheBackShed.com - Forum.
I’m hoping the PicoMite devs continue to do source releases. I’ve heard they were annoyed that Clockwork used their stuff without asking, and that whole thing was handled poorly. I think it’s a cool project and the PicoCalc is an interesting platform for it. Totally understandable if source only comes at major stable releases though. Might be less chaotic for everyone that way!
I believe that despite the “issues” the PicoMite source-code will continue to be shared, and more often than stable releases … you’ll have noticed the github repo doesn’t even tag those .. or anything … I have tried to persuade Peter, but … ;-).
It would also be good at some point to try to get the PicoCalc specific changes merged into the mainline code, if possible. But the makefile would need to be modified. I blocked out the code changes in other files with #ifdefs, unlike the initial PicoCalc release, so the PicoCalc specific stuff is isolated.
I think we will have to wait for the smoke to die down and for ClockworkPi to respond to recent requests to make some more changes for license compliance. Then if you ask Peter very nicely, and ClockworkPi are very apologetic (and send him and Geoff a couple of complementary devices?) then maybe this will happen … or maybe it won’t, maintaining the PicoMite is Peter’s hobby, he asks for no money and refuses it when offered. If nobody pays the piper then he gets to call his own tune.
I hate to be preachy (who am I kidding, I can’t help it ) but just because we don’t pay for Open Source Software doesn’t mean we can ignore its license conditions, fair attribution is often all these hardworking people ask for, so we should provide it.
Best wishes,
Tom
I’ve heard they were annoyed that Clockwork used their stuff without asking, …
Not quite correct. “Not asking” is permitted (though IMO “bad form”), the issue is using it without complying with the license under which it is published. Anyway I’m hopeful it was an oversight and we can all play nicely .
Best wishes,
Tom
Hello, would you be able to compile a bin using this person’s custom linker? GitHub - adwuard/Picocalc_SD_Boot: Bootloader that loads firmware from PicoCalc's SD card Slot.
It should be a relatively drop-in change, and allow usage with the launcher utility. I would greatly appreciate it if it is possible!
It’s already compiled. It’s in Picocalc_SD_Boot_main/prebuild_output/pico and it’s called picocalc_ssd_boot_pico.bin. If you want to transfer it to your PicoCalc directly, use picocalc_ssd_boot_pico.uf2.
I thought I finally fixed the keyboard disconnect issue. I tested the WebMite version on PICO2W, and didn’t see it appear after running lots of BASIC programs and just letting the device sit and drain battery for a long time, over several power cycles. And literally as I was typing this, I looked over at my PicoCalc and I saw a screen of scrolling “I2C Keyboard not responding” messages. So I guess it’s still a problem. I’ll update the release notes and add a warning, but I’ll leave the builds up since people may still want to play with them.
@Laika I built with the SD_Boot modification, and have included that as well. I’m guessing it will also have this keyboard disconnect issue though.
The new release is here:
@Laika, I installed the SD_Boot loader, and it works for the included demos on the Pico, but when I loaded my PicoMite binary I just got a black screen.
In my CMakeLists.txt, I uncommented the set(SDBOOT true)
at the top of the file, and used set(COMPILE PICO)
, which should have buillt the usual PICO firmware and then added the necessary linker option which is at the bottom of the file.
cmake_minimum_required(VERSION 3.13)
# Valid builds are PICO, PICOUSB, VGA, VGAUSB, HDMI(rp2350 only), HDMIUSB(rp2350 only), WEB
set(PICOCALC true)
set(SDBOOT true)
# Compile for PICO 1 Board
set(COMPILE PICO)
# Compile for PICO 2 Board
#set(COMPILE PICORP2350)
#set(COMPILE WEBRP2350)
if (COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "PICOUSBRP2350" )
set(PICO_PLATFORM rp2350)
if (COMPILE STREQUAL "WEBRP2350")
set(PICO_BOARD pico2_w)
else()
set(PICO_BOARD pimoroni_pga2350)
endif()
else()
set(PICO_PLATFORM rp2040)
if (COMPILE STREQUAL "WEB")
set(PICO_BOARD pico_w)
else()
set(PICO_BOARD pico)
endif()
endif()
include(pico_sdk_import.cmake)
project(PicoMite C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
#set(PICO_NO_COPRO_DIS 1)
pico_sdk_init()
add_executable(PicoMite
PicoMite.c
Memory.c
regex.c
MMBasic.c
Operators.c
Custom.c
Functions.c
Commands.c
FileIO.c
ff.c
ffsystem.c
ffunicode.c
mmc_stm32.c
Draw.c
Editor.c
XModem.c
MM_Misc.c
External.c
MATHS.c
Onewire.c
I2C.c
SPI.c
Serial.c
SPI-LCD.c
BmpDecoder.c
GPS.c
Audio.c
CFunction.c
picojpeg.c
lfs.c
lfs_util.c
hxcmod.c
VS1053.c
aes.c
)
if (COMPILE STREQUAL "WEB" OR COMPILE STREQUAL "WEBRP2350" )
target_sources(PicoMite PRIVATE
SSD1963.c
Touch.c
GUI.c
cJSON.c
mqtt.c
MMMqtt.c
MMTCPclient.c
MMtelnet.c
MMntp.c
MMtcpserver.c
tftp.c
MMtftp.c
MMudp.c
)
set_source_files_properties(cJSON.c PROPERTIES COMPILE_FLAGS -Os)
target_include_directories(PicoMite PRIVATE
${CMAKE_CURRENT_LIST_DIR}
${CMAKE_CURRENT_LIST_DIR}/.. # for our common lwipopts
)
Pico_enable_stdio_usb(PicoMite 1)
endif()
if ((COMPILE STREQUAL "PICO") OR (COMPILE STREQUAL "PICOUSB") OR (COMPILE STREQUAL "PICORP2350") OR (COMPILE STREQUAL "PICOUSBRP2350") OR (COMPILE STREQUAL "WEBRP2350"))
target_sources(PicoMite PRIVATE
SSD1963.c
Touch.c
GUI.c)
endif()
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "HDMIUSB")
target_sources(PicoMite PRIVATE
USBKeyboard.c
)
else()
target_sources(PicoMite PRIVATE
Keyboard.c
mouse.c
)
endif()
if(COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICOUSBRP2350")
target_sources(PicoMite PRIVATE
upng.c
# assember.S
)
endif()
set_source_files_properties(mmc_stm32.c PROPERTIES COMPILE_FLAGS -O2)
set_source_files_properties(ff.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(GUI.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(BmpDecoder.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(GPS.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(I2C.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(lfs.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(picojpeg.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(regex.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(hxcmod.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(MATHS.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(Editor.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(aes.c PROPERTIES COMPILE_FLAGS -Os)
pico_generate_pio_header(PicoMite ${CMAKE_CURRENT_LIST_DIR}/PicoMiteI2S.pio)
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "PICO" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "WEB")
pico_define_boot_stage2(slower_boot2 ${PICO_DEFAULT_BOOT_STAGE2_FILE})
target_compile_definitions(slower_boot2 PRIVATE PICO_FLASH_SPI_CLKDIV=4)
pico_set_boot_stage2(PicoMite slower_boot2)
endif()
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "VGARP2350")
pico_generate_pio_header(PicoMite ${CMAKE_CURRENT_LIST_DIR}/PicoMiteVGA.pio)
# pico_generate_pio_header(PicoMite ${CMAKE_CURRENT_LIST_DIR}/PicoMiteI2S.pio)
endif()
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
Pico_enable_stdio_usb(PicoMite 0)
target_include_directories(PicoMite PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/usb_host_files
)
else()
Pico_enable_stdio_usb(PicoMite 1)
endif()
pico_enable_stdio_uart(PicoMite 0)
pico_add_extra_outputs(PicoMite)
pico_set_printf_implementation(PicoMite compiler)
target_compile_options(PicoMite PRIVATE -DNDEBUG
-DPICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE=0
-DPICO_ADC_CLKDIV_ROUND_NEAREST
-DPICO_XOSC_STARTUP_DELAY_MULTIPLIER=64
-DPICO_CLOCK_AJDUST_PERI_CLOCK_WITH_SYS_CLOCK
-DPICO_XOSC_STARTUP_DELAY_MULTIPLIER=64
-DPICO_FLASH_SIZE_BYTES=16777216
-DPICO_CORE1_STACK_SIZE=0x00
-DPICO_MALLOC_PANIC
-O2
-Wall)
# all RP2350 variants
if (COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
target_compile_options(PicoMite PRIVATE -Drp2350
-DPICO_FLASH_SPI_CLKDIV=4
-DPICO_PIO_USE_GPIO_BASE
)
endif()
# all PicoMite variants - enable the gui
if (COMPILE STREQUAL "PICO" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "PICOUSBRP2350")
target_compile_options(PicoMite PRIVATE -DPICOMITE
-DPICO_HEAP_SIZE=0x1000
-DGUICONTROLS
-DPICO_CORE0_STACK_SIZE=0x1000
)
endif()
# all VGA variants
if (COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
target_compile_options(PicoMite PRIVATE -DPICOMITEVGA
-DPICO_HEAP_SIZE=0x2000
-DPICO_CORE0_STACK_SIZE=0x2000
)
endif()
# HDMI variants
if (COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "HDMIUSB")
target_compile_options(PicoMite PRIVATE -DPICOMITEVGA
-DHDMI
-DPICO_HEAP_SIZE=0x2000
-DPICO_CORE0_STACK_SIZE=0x2000
)
endif()
#Web variants need more heap
if(COMPILE STREQUAL "WEB" OR COMPILE STREQUAL "WEBRP2350")
target_compile_options(PicoMite PRIVATE -DPICOMITEWEB
-DPICO_HEAP_SIZE=0x4000
-DGUICONTROLS
-DCYW43_HOST_NAME="WebMite"
-DPICO_CYW43_ARCH_POLL
-DPICO_CORE0_STACK_SIZE=0x4000
)
endif()
#USB variants
if (COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "HDMIUSB")
target_compile_options(PicoMite PRIVATE -DUSBKEYBOARD
)
endif()
#special case WEB RP2350 gets the GUI controls
if(COMPILE STREQUAL "WEBRP2350")
target_compile_options(PicoMite PRIVATE -DGUICONTROLS
)
endif()
#set the PICOCALC flag
if(PICOCALC STREQUAL "true")
target_compile_options(PicoMite PRIVATE -DPICOCALC
)
endif()
target_link_libraries(PicoMite
pico_stdlib
hardware_flash
hardware_irq
hardware_adc
hardware_pwm
hardware_i2c
hardware_spi
hardware_dma
hardware_exception
hardware_pio
)
if(COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
target_link_libraries(PicoMite
tinyusb_host
tinyusb_board
pico_multicore
)
endif()
if(COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "PICO" OR COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "PICORP2350")
target_link_libraries(PicoMite
pico_multicore
)
endif()
if(COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICOUSBRP2350")
target_link_libraries(PicoMite
pico_rand
)
endif()
if(COMPILE STREQUAL "WEB" OR COMPILE STREQUAL "WEBRP2350" )
target_link_libraries(PicoMite
pico_cyw43_arch_lwip_poll
)
endif()
if(SDBOOT STREQUAL "true")
pico_set_linker_script(PicoMite ${CMAKE_SOURCE_DIR}/memmap_sdcard_app.ld)
endif()
Build output:
cpi@clockworkpi:~/picocalc/PicoMiteAllVersions/build $ cmake ..; make
Using PICO_SDK_PATH from environment ('/home/cpi/pico/pico-sdk')
PICO_SDK_PATH is /home/cpi/pico/pico-sdk
Target board (PICO_BOARD) is 'pico'.
Using board configuration from /home/cpi/pico/pico-sdk/src/boards/include/boards/pico.h
Pico Platform (PICO_PLATFORM) is 'rp2040'.
-- Defaulting build type to 'Release' since not specified.
Defaulting compiler (PICO_COMPILER) to 'pico_arm_cortex_m0plus_gcc' since not specified.
Configuring toolchain based on PICO_COMPILER 'pico_arm_cortex_m0plus_gcc'
Defaulting PICO_GCC_TRIPLE to 'arm-none-eabi'
-- The C compiler identification is GNU 12.2.1
-- The CXX compiler identification is GNU 12.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/arm-none-eabi-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/arm-none-eabi-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Build type is Release
-- Found Python3: /usr/bin/python3 (found version "3.11.2") found components: Interpreter
TinyUSB available at /home/cpi/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
BTstack available at /home/cpi/pico/pico-sdk/lib/btstack
cyw43-driver available at /home/cpi/pico/pico-sdk/lib/cyw43-driver
lwIP available at /home/cpi/pico/pico-sdk/lib/lwip
mbedtls available at /home/cpi/pico/pico-sdk/lib/mbedtls
CMake Warning at /home/cpi/pico/pico-sdk/tools/Findpicotool.cmake:30 (message):
No installed picotool with version 2.1.1 found - building from source
It is recommended to build and install picotool separately, or to set
PICOTOOL_FETCH_FROM_GIT_PATH to a common directory for all your SDK
projects
Call Stack (most recent call first):
/home/cpi/pico/pico-sdk/tools/CMakeLists.txt:138 (find_package)
/home/cpi/pico/pico-sdk/tools/CMakeLists.txt:493 (pico_init_picotool)
/home/cpi/pico/pico-sdk/src/cmake/on_device.cmake:56 (picotool_postprocess_binary)
CMakeLists.txt:155 (pico_add_extra_outputs)
Downloading Picotool
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cpi/picocalc/PicoMiteAllVersions/build
[ 0%] Built target picotoolForceReconfigure
[ 1%] Creating directories for 'picotoolBuild'
[ 1%] No download step for 'picotoolBuild'
[ 2%] No update step for 'picotoolBuild'
[ 2%] No patch step for 'picotoolBuild'
[ 3%] Performing configure step for 'picotoolBuild'
Not searching for unused variables given on the command line.
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
.//home/cpi/picocalc/PicoMiteAllVersions/build/_deps/picotool/
-- Using the single-header code from /home/cpi/picocalc/PicoMiteAllVersions/build/_deps/picotool-src/lib/nlohmann_json/single_include/
-- Found Python3: /usr/bin/python3 (found version "3.11.2") found components: Interpreter
-- Performing Test C_COMPILER_SUPPORTS_WFORMAT_SIGNEDNESS
-- Performing Test C_COMPILER_SUPPORTS_WFORMAT_SIGNEDNESS - Success
PICOTOOL_NO_LIBUSB is set - no USB support will be built
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cpi/picocalc/PicoMiteAllVersions/build/_deps/picotool-build
[ 4%] Performing build step for 'picotoolBuild'
[ 67%] Built target mbedcrypto
[ 76%] Built target mbedx509
[ 86%] Built target mbedtls
[ 88%] Built target errors
[ 89%] Built target elf
[ 92%] Built target bintool
[ 94%] Built target elf2uf2
[100%] Built target picotool
[ 5%] Performing install step for 'picotoolBuild'
[ 67%] Built target mbedcrypto
[ 76%] Built target mbedx509
[ 86%] Built target mbedtls
[ 88%] Built target errors
[ 89%] Built target elf
[ 92%] Built target bintool
[ 94%] Built target elf2uf2
[100%] Built target picotool
Install the project...
-- Install configuration: "Release"
[ 6%] Performing test step for 'picotoolBuild'
picotool v2.1.2-develop (Linux, GNU-12.2.0, Release)
[ 6%] Completed 'picotoolBuild'
[ 6%] Built target picotoolBuild
[ 6%] Creating directories for 'pioasmBuild'
[ 7%] No download step for 'pioasmBuild'
[ 8%] No update step for 'pioasmBuild'
[ 9%] No patch step for 'pioasmBuild'
[ 9%] Performing configure step for 'pioasmBuild'
Not searching for unused variables given on the command line.
loading initial cache file /home/cpi/picocalc/PicoMiteAllVersions/build/pico-sdk/src/rp2_common/pico_cyw43_driver/pioasm/tmp/pioasmBuild-cache-Release.cmake
-- The CXX compiler identification is GNU 12.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cpi/picocalc/PicoMiteAllVersions/build/pioasm
[ 10%] Performing build step for 'pioasmBuild'
[100%] Built target pioasm
[ 11%] Performing install step for 'pioasmBuild'
[100%] Built target pioasm
Install the project...
-- Install configuration: "Release"
[ 11%] Completed 'pioasmBuild'
[ 11%] Built target pioasmBuild
[ 11%] Generating PicoMiteI2S.pio.h
[ 11%] Built target PicoMite_PicoMiteI2S_pio_h
[ 11%] Building ASM object CMakeFiles/slower_boot2.dir/home/cpi/pico/pico-sdk/src/rp2040/boot_stage2/compile_time_choice.S.o
[ 12%] Linking ASM executable slower_boot2.elf
[ 12%] Built target slower_boot2
[ 13%] Generating slower_boot2.bin
[ 13%] Generating slower_boot2_padded_checksummed.S
[ 14%] Building ASM object CMakeFiles/slower_boot2_library.dir/slower_boot2_padded_checksummed.S.o
[ 14%] Built target slower_boot2_library
[ 14%] Building C object CMakeFiles/PicoMite.dir/PicoMite.c.o
/tmp/cc5MfIx6.s: Assembler messages:
/tmp/cc5MfIx6.s:14018: Warning: ignoring changed section attributes for .text
[ 15%] Building C object CMakeFiles/PicoMite.dir/Memory.c.o
[ 15%] Building C object CMakeFiles/PicoMite.dir/regex.c.o
[ 16%] Building C object CMakeFiles/PicoMite.dir/MMBasic.c.o
[ 17%] Building C object CMakeFiles/PicoMite.dir/Operators.c.o
[ 17%] Building C object CMakeFiles/PicoMite.dir/Custom.c.o
[ 18%] Building C object CMakeFiles/PicoMite.dir/Functions.c.o
[ 19%] Building C object CMakeFiles/PicoMite.dir/Commands.c.o
[ 19%] Building C object CMakeFiles/PicoMite.dir/FileIO.c.o
[ 20%] Building C object CMakeFiles/PicoMite.dir/ff.c.o
[ 21%] Building C object CMakeFiles/PicoMite.dir/ffsystem.c.o
[ 21%] Building C object CMakeFiles/PicoMite.dir/ffunicode.c.o
[ 22%] Building C object CMakeFiles/PicoMite.dir/mmc_stm32.c.o
[ 22%] Building C object CMakeFiles/PicoMite.dir/Draw.c.o
[ 23%] Building C object CMakeFiles/PicoMite.dir/Editor.c.o
[ 24%] Building C object CMakeFiles/PicoMite.dir/XModem.c.o
[ 24%] Building C object CMakeFiles/PicoMite.dir/MM_Misc.c.o
[ 25%] Building C object CMakeFiles/PicoMite.dir/External.c.o
[ 26%] Building C object CMakeFiles/PicoMite.dir/MATHS.c.o
[ 26%] Building C object CMakeFiles/PicoMite.dir/Onewire.c.o
[ 27%] Building C object CMakeFiles/PicoMite.dir/I2C.c.o
[ 28%] Building C object CMakeFiles/PicoMite.dir/SPI.c.o
[ 28%] Building C object CMakeFiles/PicoMite.dir/Serial.c.o
[ 29%] Building C object CMakeFiles/PicoMite.dir/SPI-LCD.c.o
[ 29%] Building C object CMakeFiles/PicoMite.dir/BmpDecoder.c.o
[ 30%] Building C object CMakeFiles/PicoMite.dir/GPS.c.o
[ 31%] Building C object CMakeFiles/PicoMite.dir/Audio.c.o
[ 31%] Building C object CMakeFiles/PicoMite.dir/CFunction.c.o
[ 32%] Building C object CMakeFiles/PicoMite.dir/picojpeg.c.o
[ 33%] Building C object CMakeFiles/PicoMite.dir/lfs.c.o
[ 33%] Building C object CMakeFiles/PicoMite.dir/lfs_util.c.o
[ 34%] Building C object CMakeFiles/PicoMite.dir/hxcmod.c.o
[ 35%] Building C object CMakeFiles/PicoMite.dir/VS1053.c.o
[ 35%] Building C object CMakeFiles/PicoMite.dir/aes.c.o
[ 36%] Building C object CMakeFiles/PicoMite.dir/SSD1963.c.o
[ 36%] Building C object CMakeFiles/PicoMite.dir/Touch.c.o
[ 37%] Building C object CMakeFiles/PicoMite.dir/GUI.c.o
[ 38%] Building C object CMakeFiles/PicoMite.dir/Keyboard.c.o
[ 38%] Building C object CMakeFiles/PicoMite.dir/mouse.c.o
[ 39%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.o
[ 40%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_gpio/gpio.c.o
[ 40%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2040/pico_platform/platform.c.o
[ 41%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_platform_panic/panic.c.o
[ 42%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/common/hardware_claim/claim.c.o
[ 42%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_sync/sync.c.o
[ 43%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_sync_spin_lock/sync_spin_lock.c.o
[ 43%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_irq/irq.c.o
[ 44%] Building ASM object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.o
[ 45%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/common/pico_sync/sem.c.o
[ 45%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/common/pico_sync/lock_core.c.o
[ 46%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/common/pico_sync/mutex.c.o
[ 47%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/common/pico_sync/critical_section.c.o
[ 47%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/common/pico_time/time.c.o
[ 48%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/common/pico_time/timeout_helper.c.o
[ 50%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_timer/timer.c.o
[ 50%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/common/pico_util/datetime.c.o
[ 51%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/common/pico_util/pheap.c.o
[ 51%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/common/pico_util/queue.c.o
[ 52%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_uart/uart.c.o
[ 53%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_clocks/clocks.c.o
[ 53%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_pll/pll.c.o
[ 54%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_vreg/vreg.c.o
[ 55%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.o
[ 55%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_ticks/ticks.c.o
[ 56%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.o
[ 57%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_bootrom/bootrom_lock.c.o
[ 57%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_boot_lock/boot_lock.c.o
[ 58%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_flash/flash.c.o
[ 58%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_xosc/xosc.c.o
[ 59%] Building ASM object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_divider/divider.S.o
[ 60%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_runtime/runtime.c.o
[ 60%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_runtime_init/runtime_init.c.o
[ 61%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_runtime_init/runtime_init_clocks.c.o
[ 62%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_runtime_init/runtime_init_stack_guard.c.o
[ 62%] Building ASM object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S.o
[ 63%] Building ASM object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_divider/divider_hardware.S.o
[ 64%] Building ASM object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_double/double_aeabi_rp2040.S.o
[ 64%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_double/double_init_rom_rp2040.c.o
[ 65%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_double/double_math.c.o
[ 65%] Building ASM object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim_rp2040.S.o
[ 66%] Building ASM object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S.o
[ 67%] Building ASM object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_float/float_aeabi_rp2040.S.o
[ 67%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_float/float_init_rom_rp2040.c.o
[ 68%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_float/float_math.c.o
[ 69%] Building ASM object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim_rp2040.S.o
[ 69%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_malloc/malloc.c.o
[ 70%] Building ASM object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.o
[ 71%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_atomic/atomic.c.o
[ 71%] Building CXX object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_cxx_options/new_delete.cpp.o
[ 72%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_standard_binary_info/standard_binary_info.c.o
[ 72%] Building ASM object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_crt0/crt0.S.o
[ 73%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_clib_interface/newlib_interface.c.o
[ 74%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_stdio/stdio.c.o
[ 74%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_stdio_usb/reset_interface.c.o
[ 75%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_stdio_usb/stdio_usb.c.o
[ 76%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_stdio_usb/stdio_usb_descriptors.c.o
[ 76%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_unique_id/unique_id.c.o
[ 77%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_flash/flash.c.o
[ 78%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_xip_cache/xip_cache.c.o
[ 78%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.o
[ 79%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.o
[ 79%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/device/usbd.c.o
[ 80%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/device/usbd_control.c.o
[ 81%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.o
[ 81%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.o
[ 82%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.o
[ 83%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.o
[ 83%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.o
[ 84%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.o
[ 85%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.o
[ 85%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.o
[ 86%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.o
[ 86%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.o
[ 87%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.o
[ 88%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/class/video/video_device.c.o
[ 88%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/tusb.c.o
[ 89%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.o
[ 90%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.o
[ 90%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_adc/adc.c.o
[ 91%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_i2c/i2c.c.o
[ 92%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_spi/spi.c.o
[ 92%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_dma/dma.c.o
[ 93%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_exception/exception.c.o
[ 93%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/hardware_pio/pio.c.o
[ 94%] Building C object CMakeFiles/PicoMite.dir/home/cpi/pico/pico-sdk/src/rp2_common/pico_multicore/multicore.c.o
[ 95%] Linking CXX executable PicoMite.elf
[ 95%] Built target PicoMite
[ 96%] Building ASM object pico-sdk/src/rp2040/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.o
[ 97%] Linking ASM executable bs2_default.elf
[ 97%] Built target bs2_default
[ 98%] Generating bs2_default.bin
[100%] Generating bs2_default_padded_checksummed.S
[100%] Building ASM object pico-sdk/src/rp2040/boot_stage2/CMakeFiles/bs2_default_library.dir/bs2_default_padded_checksummed.S.o
[100%] Built target bs2_default_library
I don’t see any mention of memmap_sdcard_app.ld
in the output though, so I’m not sure if that’s being used or not.
An updated release for V6.00.02RC17 is available here, with a timing fix for the keyboard disconnect issue which had been plaguing the updated releases (it was something I missed when merging in guu’s changes), and some keyboard mapping fixes (which aren’t in the older official PicoCalc release).
I haven’t tested the bootloader on Pico for a while, but I’m guessing it still has the problem I mentioned above. @Laika do you have any thoughts on that? I used the same version of the memmap_sdcard_app.ld and I think I pointed cmake to it correctly? Also, I haven’t been keeping up with the bootloader progress. Does it also support Pico2 now? If so, I’d be happy to build for that as well, assuming I can get it to work.
Since I’ve been tiring of having to press the physical button inside the PicoCalc case every time I want to upload a new firmware while testing, I decided to look into a software option instead…
Here’s an experimental build, with a new MMBasic OPTION I added. I tried to do it cleanly, but it’s still a bit of a hack.
Webmite for Pico2:
http://ffauploads.com/WebMite_WEBRP2350_V6.00.02RC17_USBBOOT.uf2
PicoMite for Pico:
http://ffauploads.com/PicoMite_PICO_V6.00.02RC17_USBBOOT.uf2
This can’t be used from inside a program (which wouldn’t make sense anyway), but from the prompt if you enter:
OPTION USBBOOT
then the PicoCalc will go into the firmware loading mode. If you then connect the USB cable to your PC, it should be mounted as a drive (just like if you had the device powered off and then pressed the button inside while powering on). Copy the new firmware over as usual, and when it’s done, disconnect the PicoCalc and power it off. When you power it back on, you should be good to go with the new firmware.
Source changes are here.
I’ll include it in the next release unless anyone is opposed to it.
For reference on the Colour Maximite 2 there is a command UPDATE FIRMWARE
rather than an OPTION
for this purpose.
Also note that you can force a Pico (that already has existing PicoMite firmware installed) into boot loader mode by connecting a serial terminal at 1200 baud, so on Linux when I want to upload firmware I issue the command:
screen /dev/ttyACM0 1200
Best wishes,
Tom
I have been waiting for a functioning version of WebMite, so thank you very much. I loaded your new firmware about an hour ago and so far it is working perfecting. I was ignoring the DEL key issue, so it is a nice bonus that it is now working.
As it turns out, UPDATE FIRMWARE
is in PicoMite as well. Thanks for pointing that out!
I just tried it on the PicoCalc and it worked fine. I’ll get rid of my hack. I guess I should have RTFM!
Whilst you are “messing” with the firmware there is a persistent OPTION PLATFORM
which usually defaults to the empty string, I would suggest that you change it to default to "PicoCalc"
, that way a program can use:
If Mm.Info(Option Platform) = "PicoCalc" Then ...
To implement PicoCalc specific behaviour.
At the moment I am working on a program that needs to do this and am checking MM.HRes
and MM.VRes
for the purposes of identification.
YMMV,
Tom