To make the most of card10’s dual-core processor, its firmware will have been divided into two parts: The “main” firmware running on core 0 which will have been called Epicardium and the “user-code” running on core 1. In most cases this will have been Pycardium, our MicroPython port.



Epicardium is based on FreeRTOS. There are a number of tasks that will have been keeping card10 running. These are:


ID Global




pmic_task_id (static)


Power Management (and Reset Button)


lifecycle_task (static)


Control of the payload running on core 1.


ble_task_id (static)


Bluetooth Low Energy Stack




Serial Output via UART/CDC-ACM/BLE




Epicardium API dispatcher


interrupts_task (static)


Interrupt dispatcher worker




LED Animations


max30001_task_id (static)


MAX30001 ECG driver


bhi160_task_id (static)


BHI160 sensor fusion driver

Epicardium API

Epicardium exposes lots of functionality via the Epicardium API. The technical details of this API can be found in this overview. If you are interested in adding new API calls, you should probably read the Epicardium API Development guide.


Pycardium is our MicroPython fork. Its purpose is to make it as easy as possible to interact with card10. If you are interested in working on Pycardium, take a look at the Pycardium Module Development guide.


Next to Pycardium, other bare-metal code can also run on core 1. For example, a Rustcardium or C-cardium. These l0dables must be compiled using our special linker script and should link against the api-caller library so they can interface with the Epicardium API.

Note: this feature is disabled by default and has to be enabled in card10.cfg. A card10.cfg file dropped into the USB File Transfer of the badge containing execute_elf = true is enough.

l0dables are currently built within the source tree of the main repository. See l0dables/blinky for an example of a hello-world-like program. Within those programs, you can access the Epicardium API to control the hardware and behaviour of the badge.

Once you have a built ELF file, you can drop it into the FAT filesystem of the flash (eg. via USB File Transfer) and it will be available from the menu program of the badge.

Program Flow Diagram

The following diagram is a rough overview of the program flow in this fimware: