Appendix C — Configuration Memory Address Space Map
OpenLCB defines a set of well-known address spaces accessed via the Memory Configuration Protocol (datagrams). Each space has an 8-bit identifier and contains a specific type of data. This appendix documents all address spaces supported by the library.
C.1 Address Space Summary
| Space ID | Constant | Name | Access | Description |
|---|---|---|---|---|
0xFF |
CONFIG_MEM_SPACE_CONFIGURATION_DEFINITION_INFO |
CDI | Read-only | Configuration Description Information -- XML document describing the node's configurable options |
0xFE |
CONFIG_MEM_SPACE_ALL |
All | Read/Write | Virtual space combining all other spaces -- addresses map to the underlying space |
0xFD |
CONFIG_MEM_SPACE_CONFIGURATION_MEMORY |
Config Memory | Read/Write | User-configurable data -- the primary space for node settings stored in EEPROM/Flash |
0xFC |
CONFIG_MEM_SPACE_ACDI_MANUFACTURER_ACCESS |
ACDI Manufacturer | Read-only | Manufacturer identification strings (name, model, hardware/software version) |
0xFB |
CONFIG_MEM_SPACE_ACDI_USER_ACCESS |
ACDI User | Read/Write | User-assignable node name and description strings |
0xFA |
CONFIG_MEM_SPACE_TRAIN_FUNCTION_DEFINITION_INFO |
FDI | Read-only | Function Description Information -- XML document describing train functions |
0xF9 |
CONFIG_MEM_SPACE_TRAIN_FUNCTION_CONFIGURATION_MEMORY |
Train Fn Config | Read/Write | Train function configuration memory (function names, properties) |
0xEF |
CONFIG_MEM_SPACE_FIRMWARE |
Firmware | Write-only | Firmware upgrade data -- only accessible when node is in Firmware Upgrade state |
C.2 ACDI Manufacturer Space Layout (0xFC)
The ACDI Manufacturer space provides read-only access to the same identification strings reported via SNIP:
| Address | Constant | Length | Content |
|---|---|---|---|
0x00 | CONFIG_MEM_ACDI_MANUFACTURER_VERSION_ADDRESS | 1 byte | Version byte (always 0x01) |
0x01 | CONFIG_MEM_ACDI_MANUFACTURER_ADDRESS | 41 bytes | Manufacturer name (null-terminated) |
0x2A | CONFIG_MEM_ACDI_MODEL_ADDRESS | 41 bytes | Model name (null-terminated) |
0x53 | CONFIG_MEM_ACDI_HARDWARE_VERSION_ADDRESS | 21 bytes | Hardware version (null-terminated) |
0x68 | CONFIG_MEM_ACDI_SOFTWARE_VERSION_ADDRESS | 21 bytes | Software version (null-terminated) |
C.3 ACDI User Space Layout (0xFB)
The ACDI User space provides read/write access to user-assignable identification strings:
| Address | Constant | Length | Content |
|---|---|---|---|
0x00 | CONFIG_MEM_ACDI_USER_VERSION_ADDRESS | 1 byte | Version byte (always 0x01) |
0x01 | CONFIG_MEM_ACDI_USER_NAME_ADDRESS | 63 bytes | User-assigned node name (null-terminated) |
0x40 | CONFIG_MEM_ACDI_USER_DESCRIPTION_ADDRESS | 64 bytes | User description (null-terminated) |
C.4 Address Space in node_parameters_t
Each address space has a corresponding user_address_space_info_t entry in node_parameters_t that describes its properties:
typedef struct {
bool present : 1; // Space exists on this node
bool read_only : 1; // Space is read-only
bool low_address_valid : 1; // low_address field is meaningful
uint8_t address_space; // Space identifier (0x00-0xFF)
uint32_t highest_address; // Highest valid address in space
uint32_t low_address; // Lowest valid address (if low_address_valid)
char description[59]; // Human-readable description
} user_address_space_info_t;
The node_parameters_t structure contains one entry for each well-known space:
| Field Name | Space |
|---|---|
address_space_configuration_definition | 0xFF (CDI) |
address_space_all | 0xFE (All) |
address_space_config_memory | 0xFD (Config Memory) |
address_space_acdi_manufacturer | 0xFC (ACDI Manufacturer) |
address_space_acdi_user | 0xFB (ACDI User) |
address_space_train_function_definition_info | 0xFA (FDI) |
address_space_train_function_config_memory | 0xF9 (Train Fn Config) |
address_space_firmware | 0xEF (Firmware) |
C.5 Command Encoding
Configuration memory commands use the datagram protocol. The first byte of the datagram payload is always 0x20 (CONFIG_MEM_CONFIGURATION), and the second byte is the command code. The address space is encoded either in the command byte itself (for spaces 0xFD-0xFF) or in byte 6 of the payload:
| Command | Space in Cmd Byte | Space in Byte 6 |
|---|---|---|
| Read 0xFF | 0x43 | -- |
| Read 0xFE | 0x42 | -- |
| Read 0xFD | 0x41 | -- |
| Read other | 0x40 | Space ID |
| Write 0xFF | 0x03 | -- |
| Write 0xFE | 0x02 | -- |
| Write 0xFD | 0x01 | -- |
| Write other | 0x00 | Space ID |
Address space constants are defined in openlcb_defines.h (groups address_spaces, acdi_manufacturer_layout, acdi_user_layout). The user_address_space_info_t structure is defined in openlcb_types.h.