Skip to content

Boards

Every custom board on the rover runs firmware from a project under src/. This section documents what each board does and the CAN messages it speaks.

BoardDirectoryPurposeConfig
ABSsrc/absabsolute encoderconfig/abs.yaml
BMCsrc/bmcbrushed motor controllerconfig/bmc.yaml
LIMsrc/limstandalone limit switch reporterconfig/lim.yaml
PDBsrc/pdlbpower distribution and autonomy status LEDnone
SCIsrc/scienceatmospheric sensor suitenone

src/tests/* are firmware test fixtures rather than boards, and src/canalyzer is an early-stage project developed on its own branch.

Every message carries a base ID from the DBC plus a source and destination node ID packed into the arbitration ID:

arbitration_id = base_id + (src_id << 8) + dest_id

The node IDs are the boards’ configured can_id and host_can_id. The rover-side host is 0x10. See esw.can for the host-side API.

Base IDs are grouped by board:

RangeBoard
0x8010 - 0x8013BMC
0x8020 - 0x8022ABS
0x8030 - 0x8031LIM
0x8051, 0x8060 - 0x8061SCI
0x8070 - 0x8071PDB
0x80F0 - 0x80F2shared, all boards

Three messages are common to the boards that have a configuration.

MessageBase IDDLCDirectionSignals
ESWConfigCmd0x80F000006to boardaddress (8), value (32), apply (1)
ESWProbe0x80F100004to boarddata (32)
ESWAck0x80F200004from boarddata (32)

ESWConfigCmd writes one configuration register; with apply clear it reads the register back instead, answering with ESWAck. ESWProbe is a liveness check that echoes its payload back in an ESWAck.

PDB and SCI implement neither, since neither has a configuration file.

See Configuration for how registers are defined and pushed.

Copy _template.md in this directory as the starting point for a new board page, then add it to the nav in zensical.toml.