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

AddressConstantLengthContent
0x00CONFIG_MEM_ACDI_MANUFACTURER_VERSION_ADDRESS1 byteVersion byte (always 0x01)
0x01CONFIG_MEM_ACDI_MANUFACTURER_ADDRESS41 bytesManufacturer name (null-terminated)
0x2ACONFIG_MEM_ACDI_MODEL_ADDRESS41 bytesModel name (null-terminated)
0x53CONFIG_MEM_ACDI_HARDWARE_VERSION_ADDRESS21 bytesHardware version (null-terminated)
0x68CONFIG_MEM_ACDI_SOFTWARE_VERSION_ADDRESS21 bytesSoftware version (null-terminated)

C.3 ACDI User Space Layout (0xFB)

The ACDI User space provides read/write access to user-assignable identification strings:

AddressConstantLengthContent
0x00CONFIG_MEM_ACDI_USER_VERSION_ADDRESS1 byteVersion byte (always 0x01)
0x01CONFIG_MEM_ACDI_USER_NAME_ADDRESS63 bytesUser-assigned node name (null-terminated)
0x40CONFIG_MEM_ACDI_USER_DESCRIPTION_ADDRESS64 bytesUser 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 NameSpace
address_space_configuration_definition0xFF (CDI)
address_space_all0xFE (All)
address_space_config_memory0xFD (Config Memory)
address_space_acdi_manufacturer0xFC (ACDI Manufacturer)
address_space_acdi_user0xFB (ACDI User)
address_space_train_function_definition_info0xFA (FDI)
address_space_train_function_config_memory0xF9 (Train Fn Config)
address_space_firmware0xEF (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:

CommandSpace in Cmd ByteSpace in Byte 6
Read 0xFF0x43--
Read 0xFE0x42--
Read 0xFD0x41--
Read other0x40Space ID
Write 0xFF0x03--
Write 0xFE0x02--
Write 0xFD0x01--
Write other0x00Space ID
Source Reference

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.

← Prev: Appendix B — CAN Frame Format Next: Appendix D — Event ID Encoding →