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.
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: