Bootloader Addressing
Communicating with the C0-microSD is achieved through block read and write operations. The following specification contains the different address offsets you can use to communicate with the device while in Bootloader mode.
Address space | Address Start | Size | Operation | Description |
---|---|---|---|---|
CONFIGURATION_ID_OFFSET | 0x020000 | 4 Bytes | R | Offset for configuration ID |
CONFIGURATION_VERSION_OFFSET | 0x020004 | 4 Bytes | R | Offset for configuration version |
CONFIGURATION_STATE_OFFSET | 0x020008 | 4 Bytes | R | Offset for configuration state |
BOOTLOADER_SWITCH_CONFIG_OFFSET | 0x040000 | 4 Bytes | W | Offset for switching operation modes |
BOOTLOADER_UNLOCK_OFFSET | 0x060000 | 4 Bytes | W | Offset for locking/unlocking bootloader |
BOOTLOADER_BITSTREAM_OFFSET * | 0x080000 | 512 KiB | R/W** | Bootloader bitstream region |
SIGNALOID_CORE_BITSTREAM_OFFSET * | 0x100000 | 512 KiB | R/W** | Signaloid SoC bitstream region |
USER_BITSTREAM_OFFSET * | 0x180000 | 512 KiB | R/W | Custom user bitstream region |
USER_DATA_OFFSET * | 0x200000 | 14 MiB | R/W | User data space region |
* Address space corresponds to on-board flash memory data.
** Address space needs unlocking for write operation.
CONFIGURATION_ID_OFFSET
This 4-byte word stores the ID of the active configuration (in this case the Bootloader). This is used by the toolkit to identify the active mode of operation of the C0-microSD.
CONFIGURATION_VERSION_OFFSET
This 4-byte word stores the current version of the active configuration (in this case the Bootloader). Specifically:
Active Configuration | Word |
---|---|
Bootloader | b”SBLD” |
Signaloid SoC | b”SSOC” |
CONFIGURATION_STATE_OFFSET
This 4-byte word stores the current state of the active configuration (in this case the Bootloader). Currently, this is used by the toolkit to verify whether the C0-microSD is in SWITCHING
state.
BOOTLOADER_SWITCH_CONFIG_OFFSET
This offset is used for switching between operation modes. To achieve this, you can write the 4-byte word SBLD
(ASCII encoded) to this offset.
BOOTLOADER_UNLOCK_OFFSET
Address spaces BOOTLOADER_BITSTREAM_OFFSET
and SIGNALOID_CORE_BITSTREAM_OFFSET
are locked by default. This is to prevent accidental overriding of the Bootloader or Signaloid SoC bitstreams, which could render the device inoperable. To flash these address spaces, you must first write a special 4-byte word (ASCII encoded UBLD
) to this offset. You can re-lock the bootloader by writing anything else to the same offset.
BOOTLOADER_BITSTREAM_OFFSET
In this address space, the Bootloader bitstream is stored. You first need to unlock the bootloader to write to this address space.
SIGNALOID_CORE_BITSTREAM_OFFSET
In this address space, the Signaloid SoC bitstream is stored. You first need to unlock the bootloader to write to this address space.
USER_BITSTREAM_OFFSET
In this address space, the custom user bitstream is stored.
USER_DATA_OFFSET
This 14 MiB address space can be used to store data, or binary files to be used either by the custom user bitstream, or the Signaloid SoC configuration. Specifically, the Signaloid SoC initializes its memory by copying the first 128 KiB section of this address space, before starting its execution.
Important notes
The SD interface mandates the support of read and write operations for the entire available address space. This is in contrast to the supported operation in each address space as described above. For that reason, the following rules apply:
- R: Reading from this address space will return valid data. Writing to this address space will succeed, but will have no effect.
- W: Reading from this address will succeed, but will return invalid data. Writing data to this address space will succeed, and will have an effect on the device.
-
R/W: Reading from this address space will return valid data. Writing data to this address space will succeed, and will have an effect on the device.
- N/A: Reading from this address will succeed, but will return invalid data. Writing to this address space will succeed, but will have no effect.
Address spaces that are not mentioned in the table above can be considered as N/A.