Skip to content

Files over USB

Files reach the CrossPad over its main USB port in two ways. For players, the SD card can appear on the computer as an ordinary USB drive. For developers, a file-transfer tool reads and writes single files and sends the assets partition over the serial port.

Settings → USB → SD card as USB drive → Start restarts the CrossPad into transfer mode. The computer then sees the card as a USB drive, and you copy kits and samples onto it with your file manager. USB mass storage is a standard every desktop system reads, so it works with Linux, macOS and Windows. Copying runs at about 0.5–0.67 MB/s. The steps are in Your sounds.

  • Transfer mode is a start of its own. It starts only the screen, USB and the card: no sound, no kits, no apps. The card has one owner, the computer, so nothing on the CrossPad writes to it at the same time.
  • The CrossPad only passes on what the computer asks for. It never formats, repairs or rewrites the card itself.
  • Leaving is a restart. Exit and restart on the transfer screen (touch, the encoder or a click of the power button) starts the CrossPad as normal, and it reads the new kits. A power cycle or a reset always starts it as normal too.
  • You start it on the CrossPad. There is no way to start transfer mode over Bluetooth or MIDI, so a computer can never take the card by itself.
  • With no card in the slot, the transfer screen says No SD card and offers only Exit.

tools/fs_transfer.py in the firmware project reads and writes files on a running CrossPad. It needs the MIDI + Serial USB mode; from MIDI + Audio mode it asks the CrossPad to switch, and with Ask before USB serial on, the CrossPad asks you to Allow it first.

Terminal window
python3 tools/fs_transfer.py roots # the storage areas and their use
python3 tools/fs_transfer.py ls /sdcard/crosspad/kits
python3 tools/fs_transfer.py push kit.json /sdcard/crosspad/kits/MYKIT/kit.json
python3 tools/fs_transfer.py pull /sdcard/crosspad/recordings/rec_001.wav rec_001.wav
python3 tools/fs_transfer.py mkdir /sdcard/crosspad/kits/MYKIT
python3 tools/fs_transfer.py rm /sdcard/crosspad/recordings/rec_001.wav
RootWhat it is
/sdcardthe SD card, when one is in
/assetsthe assets partition (below)
/spiflasha 4 MB storage area in the CrossPad’s flash, which the firmware itself does not use

Paths outside these roots, and paths with .., are refused. A file you push is written next to its target first and put in place only when its checksum matches, so a file on the CrossPad is never half-replaced.

The assets partition holds the app icons, the fonts and the bundled pad controller firmware. A firmware update over USB writes the firmware only, so the assets partition travels separately: fs_transfer.py assets sends a whole new image. See Update firmware over USB.

  • The CrossPad receives the whole image into memory and checks it before it erases anything. It then writes the image, reads it back, checks it again and restarts.
  • The CrossPad does not need the assets partition to start. If the power fails during the write (about 10 s), it starts with plain tiles and still answers the transfer tool, so sending the image again restores it.
  • Firmware installed from a package on the SD card brings its own assets, and the CrossPad puts them in place when it starts. See Firmware updates.

The serial port carries file transfer, firmware updates and the console. With Settings → USB → Ask before USB serial on (the default), a computer that asks the CrossPad to switch to MIDI + Serial gets a question on the screen first: Allow switches, Deny keeps the mode, and after 30 s the question closes as Deny. Switching in Settings yourself never asks.