Overview

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.

_images/overview.svg

Epicardium

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

  • Dispatcher: The dispatcher task handles API calls from core 1.

  • PMIC: The power manager task checks the battery level and other interesting statistics that can be gathered from our power manager IC (MAX77650).

  • Serial: Handles serial communication via UART, CDC ACM and possibly Bluetooth.

  • BHI160: Housekeeping task for interaction with the BHI160.

Todo

The following tasks have not yet been implemented/are currently in the works:

  • Bluetooth: The bluetooth stack (#23)

  • Payload Controller: Control what is running on core 1

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

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.

L0dables

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 at build time. To do this, run bootstrap.sh with the option -Djailbreak_card10=true and rebuild the firmware as described in How To Build.

Todo

Provide more details how this works

Program Flow Diagram

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

_images/firmware-flow.svg