Skip to content

Wakes v0.8.0

Latest

Choose a tag to compare

@github-actions github-actions released this 09 Oct 03:42
· 1 commit to main since this release
da0a787

What's New in v0.8.0

  • Storage: v0.8.0 introduces device storage. While in STANDBY (OFF, with USB plugged in), Wakes behaves like a removable card reader, and the SP-1 shows up on your computer as a drive. While storage activity is ongoing, you'll see a dancing pattern on the face LED's. Wait until the lights are fully dark before unplugging or trying to turn the SP-1 ON, otherwise you risk file corruption.
  • First-time users: flash wakes-sp1-fresh.bin once. It formats the SP-1's 4GB eMMC card and prepares Wakes' folders. This clears any data on the eMMC card. After that, use wakes-sp1.bin for future flashes to keep your storage.
  • PRST: save and retrieve full Wakes patches as .prst files, across four onboard slots. When turned ON, Wakes always loads the last-loaded slot. It saves to the currently selected slot when turned OFF or to STANDBY. Everything is saved except DJVU and VOL.
  • PRST browser: while holding SHFT, tap PLAY once (instead of holding it to ROTC) to see which slot you're on via a blinking LED. While the animation is still playing, tap PLAY again quickly to flip to the next slot. Letting go of SHFT or waiting a short moment takes you out of the browser. Moving to the next slot doesn't save the one you were on.
  • PRSTs on your computer: go to <SP-1>:/WAKES/PRST to find a folder for each of the four slots. The first file in alphabetical order loads into that slot, and any other files are ignored. If you rename .prst files, keep to simple characters.
  • 30s emergency shutdowns skip saving. Regardless, It's good to periodically back up your storage card.
  • ROTC has a new animation, and Ripping Out Marbles' Cables now leaves t2 > TRIG and X2 > FREQ connected, so PLAY's behaviour stays consistent.
  • Any Plaits engine from a PRST: a .prst can load any Plaits engine, even one that isn't in your engines.csv. This case has a special glyph: A fast flicker on all four face LED's.

Flashing

Read docs/SAFETY.md first. The SP-1 has no hardware reset pin.

  1. Wakes features new storage protocols for the SP-1. If you've never used Wakes before, you need to format your storage partition.
    To do that, Download the latest fresh bin below.
  2. If you've used Wakes before, and want to avoid touching your storage, Download the latest regular bin below.
  3. Older Wakes versions and release notes are available through the repo's releases page.
  4. Open https://solderless.engineering. Hold down T1+T4. Keep them held while connecting the SP-1 over USB-C.
  5. Follow solderless.engineering's instructions on how to connect to your SP-1 to flash it.
  6. Select the .bin in Solderless Engineering's "firmware utility" page, flash it, and once done, you can unplug.
  7. The first time you turn Wakes ON after flashing a fresh bin, it will perform a short format of the eMMC card. Give it a moment.

wakes-sp1.bin and wakes-sp1-fresh.bin are the same files as the versioned bins, under a fixed name, so the README's download link works.
When in doubt, check the files against SHA256SUMS before flashing.

Storage: wakes-sp1 vs wakes-sp1-fresh

  • wakes-sp1-*.bin never formats the SP-1's internal storage (the eMMC). Flash
    it to update: your presets and files stay where they are.
  • wakes-sp1-*-fresh.bin FORMATS the eMMC the first time it turns ON, and
    erases everything on it, including whatever another firmware left there (stock
    stems, tape-looper recordings). Flash it once to set the storage up, or to start
    over; a progress bar shows on T1-T4 while it formats. Flashing the same fresh file
    again does not format a second time. wakes-sp1-fresh.bin is the same file under
    a fixed name.
  • Without a formatted card, Wakes can still operate, but the storage features get turned off.

wakes-sp1-v0.8.0-fallback.bin is the test-tone recovery build. Plaits and Marbles are offline.
It never touches the eMMC, and is for diagnosing hardware only in case of issues.

Claude's Blurb

Size vs v0.7.2

plaits vs v0.7.2

Config: plaits

base head Δ of total
FLASH (.bin) 427,776 459,736 +31,960 50.33%
RAM 178,427 204,935 +26,508 78.18%
Sections that changed
section base head Δ
text 243,852 269,892 +26,040
bss 57,719 76,763 +19,044
noinit 117,352 124,212 +6,860
rodata 179,168 184,412 +5,244
datas 2,882 3,260 +378
k_mem_slab_area 64 128 +64
_static_thread_data_area 0 48 +48
k_msgq_area 44 88 +44
k_mutex_area 0 40 +40
net_buf_pool_area 80 120 +40
usbd_class_fs_area 72 96 +24
usbd_msc_lun_area 0 16 +16
check_image
check_image: build/zephyr
  [PASS] _vector_table at 0x20000  (0x20000)
  [PASS] no load segment below 0x20000  (lowest LMA 0x20000)
  [PASS] no load segment at or above 0xFF000  (image ends 0x903d8)
  [PASS] wakes-sp1.bin matches the ELF's loadable span  (459736 B vs 459736 B)
  [PASS] .map: FLASH region origin 0x20000  (0x20000)
  [PASS] .map: FLASH region ends at 0xFF000  (0xff000)
  [PASS] .map: _vector_table at 0x20000  (0x0000000000020000)
  [PASS] CONFIG_USE_DT_CODE_PARTITION=y  (got y)
  [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000  (got 0x20000)
  [PASS] CONFIG_WATCHDOG=y  (got y)
  [PASS] CONFIG_REBOOT=y  (got y)
  [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y  (got y)
  [PASS] one layout per Plaits/Marbles class  (175 classes)
  [PASS] plaits::sp1_zero calls nothing (#36)  (152 B, leaf)
  [PASS] ParticleEngine::Reset clears without memset (#36)  (no libc fill)
  [PASS] String::Reset clears without memset (#36)  (no libc fill)
  [PASS] uacring_push copies without memcpy/memset (M5c)  (word copies)
  [PASS] uacring_pop copies without memcpy/memset (M5c)  (word copies)
  [PASS] frames_copy copies without memcpy/memset (M5c)  (word copies)
  [PASS] storage: a failed mount never formats (FS_FATFS_MOUNT_MKFS off)  (got None)
  [PASS] storage: normal image contains no formatter  (no f_mkfs)
  [PASS] SP1_FORCE_CALIB is 0  (got 0)
wakes-sp1.bin: 459736 B (50.33% of the slot), plaits config
OK: safe to hand over for flashing

fresh

Config: plaits

size of total
FLASH (.bin) 464,616 50.87%
RAM 205,833 78.52%

The base (v0.7.2) did not build; no diff.

check_image
check_image: build/zephyr
  [PASS] _vector_table at 0x20000  (0x20000)
  [PASS] no load segment below 0x20000  (lowest LMA 0x20000)
  [PASS] no load segment at or above 0xFF000  (image ends 0x916e8)
  [PASS] wakes-sp1.bin matches the ELF's loadable span  (464616 B vs 464616 B)
  [PASS] .map: FLASH region origin 0x20000  (0x20000)
  [PASS] .map: FLASH region ends at 0xFF000  (0xff000)
  [PASS] .map: _vector_table at 0x20000  (0x0000000000020000)
  [PASS] CONFIG_USE_DT_CODE_PARTITION=y  (got y)
  [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000  (got 0x20000)
  [PASS] CONFIG_WATCHDOG=y  (got y)
  [PASS] CONFIG_REBOOT=y  (got y)
  [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y  (got y)
  [PASS] one layout per Plaits/Marbles class  (175 classes)
  [PASS] plaits::sp1_zero calls nothing (#36)  (152 B, leaf)
  [PASS] ParticleEngine::Reset clears without memset (#36)  (no libc fill)
  [PASS] String::Reset clears without memset (#36)  (no libc fill)
  [PASS] uacring_push copies without memcpy/memset (M5c)  (word copies)
  [PASS] uacring_pop copies without memcpy/memset (M5c)  (word copies)
  [PASS] frames_copy copies without memcpy/memset (M5c)  (word copies)
  [PASS] storage: a failed mount never formats (FS_FATFS_MOUNT_MKFS off)  (got None)
  [PASS] storage: FRESH image links the formatter  (f_mkfs present)
  [NOTE] FRESH IMAGE: formats the eMMC on its first entry to ON. Ship it as wakes-sp1-fresh, never as wakes-sp1.
  [PASS] SP1_FORCE_CALIB is 0  (got 0)
wakes-sp1.bin: 464616 B (50.87% of the slot), plaits config
OK: safe to hand over for flashing

fallback vs v0.7.2

Config: fallback

base head Δ of total
FLASH (.bin) 86,560 86,648 +88 9.49%
RAM 124,499 124,503 +4 47.49%
Sections that changed
section base head Δ
text 74,272 74,332 +60
rodata 9,300 9,324 +24
bss 5,683 5,687 +4
check_image
check_image: build/zephyr
  [PASS] _vector_table at 0x20000  (0x20000)
  [PASS] no load segment below 0x20000  (lowest LMA 0x20000)
  [PASS] no load segment at or above 0xFF000  (image ends 0x35278)
  [PASS] wakes-sp1.bin matches the ELF's loadable span  (86648 B vs 86648 B)
  [PASS] .map: FLASH region origin 0x20000  (0x20000)
  [PASS] .map: FLASH region ends at 0xFF000  (0xff000)
  [PASS] .map: _vector_table at 0x20000  (0x0000000000020000)
  [PASS] CONFIG_USE_DT_CODE_PARTITION=y  (got y)
  [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000  (got 0x20000)
  [PASS] CONFIG_WATCHDOG=y  (got y)
  [PASS] CONFIG_REBOOT=y  (got y)
  [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y  (got y)
  [PASS] SP1_FORCE_CALIB is 0  (got 0)
wakes-sp1.bin: 86648 B (9.49% of the slot), fallback config
OK: safe to hand over for flashing

SHA-256

11530dc0b11f10a6839f27849a849465363b620189dfb0d1115b9a02676baa5d  wakes-sp1-fresh.bin
ff26399faa6c8fc1cad8eeb7bcb343c7e515c728924a6d3dc9597dfd1f30b020  wakes-sp1-v0.8.0-fallback.bin
11530dc0b11f10a6839f27849a849465363b620189dfb0d1115b9a02676baa5d  wakes-sp1-v0.8.0-fresh.bin
161773f2eb6d82fee9ba74784f35f4084b5b325c12808ab965ce6365beb2eac6  wakes-sp1-v0.8.0.bin
161773f2eb6d82fee9ba74784f35f4084b5b325c12808ab965ce6365beb2eac6  wakes-sp1.bin