SpaceTeam / STS1_COBC_SW

Software for the communication and onboard computer (COBC) of SpaceTeamSat1 (STS1)
MIT License
7 stars 2 forks source link

Implement persistent state #201

Open PatrickKa opened 8 months ago

PatrickKa commented 8 months ago

Description

The persistent state contains data for the bootloader, data of the current state of the COBC, housekeeping data as well as the EDU program status history and the EDU program queue. I totally forgot about the last two. We already have them implemented but only in RAM. I am not sure how to best move them to the FRAM. Either we only have them in the FRAM and load every time from there. Or we cache them in RAM and load periodically and/or when writing.

Regarding the rest, that is just a few variables that need hardly any space and should therefore be quick to read and write. Since they do contain very important things like the activeFirmwareImage I want to employ a self-healing mechanism for them (store three times, compare and eliminate difference on read). This should get its own abstraction called PersistentVariable.

To do

PatrickKa commented 8 months ago

Blocked by #185 and #192

PatrickKa commented 8 months ago

Also blocked by #207 because we need tests.

PatrickKa commented 8 months ago

I think it would be good if we employed some form of error detection and correction (EDAC) for the persistent state. The most simple to implement is probably triple modular redundancy, but this has a memory overhead of 200 %. The persistent state is not very large, however, if we want to use the same EDAC method also for the telemetry memory, then this is not feasible. Hamming or Reed–Solomon codes are better in regard to overhead, but there are lots of other options to choose from.

I created issue #239 for this and added it to this epic.

PatrickKa commented 5 months ago

I unblocked this Epic because the newly added #239 can already be worked on.

PatrickKa commented 5 months ago

I removed #239 from this epic since it is also related to the telemetry memory (#179) and should therefore be a standalone issue which blocks this one, so:

Blocked by #239

PatrickKa commented 4 months ago

No longer blocked by #239 since we will not implement it for everything in the persistent state.