Colibri EEPROM Layout
Jump to navigation
Jump to search
All the Colibri I/O modules come with a 1Mbit EEPROM on board, that serves to store a few different things;
- Vendor, Model and Revision of 'this' board.
- Calibration parameters needed to compensate for hardware tolerances.
- Test report (if any) from factory.
- The driver(s) (i.e. code) of the board, to be executed in the MCU module on behalf of the board.
- Any additional parameters, configuration that should survive over time.
- Any storage space an on-module co-MCU needs.
Memory Layout
The canonical memory layout is found in Colibri SDK GitHub repo.
"Reserved future use" means that the Colibri Runtime firmware may introduce features in the future that needs additional EEPROM space, and these regions MUST NOT be used by vendors. "Vendor area" is guaranteed that the Colibri Runtime firmware will NOT use in the future, and vendors may use it any way they want.
typedef struct __attribute__((packed))
{
uint32_t fingerprint; // 0x0000
uint32_t serial_number; // 0x0004
uint8_t reserved1[8]; // 0x0008
uint32_t vendor_id; // 0x0010
uint32_t vendor_model_id; // 0x0014
uint32_t vendor_revision; // 0x0018
uint8_t reserved2[4]; // 0x001C
uint32_t vendor_name_ptr; // 0x0020
uint32_t vendor_name_len; // 0x0024
uint32_t vendor_model_ptr; // 0x0028
uint32_t vendor_model_len; // 0x002C
uint32_t product_link_ptr; // 0x0030
uint32_t product_link_len; // 0x0034
uint32_t doc_link_ptr; // 0x0038
uint32_t doc_link_len; // 0x003C
uint32_t code_pic_len; // 0x0040
char reserved3[60]; // 0x0044
uint8_t calibration_data[128]; // 0x0080
uint8_t test_reports[256]; // 0x0100
char text_area[2048]; // 0x0200
uint8_t reserved4[1536]; // 0x0A00
uint8_t vendor_area[12288]; // 0x1000
uint8_t pic_arm[8192]; // 0x4000
} eeprom_layout_t;
| Address | Length | Description |
|---|---|---|
| 0x0000 | 4 | Contains the value 0xfacedead to indicate that it has been initialized. |
| 0x0004 | 4 | Serial Number |
| 0x0008 | 8 | Reserved for future use. |
| 0x0010 | 4 | Vendor ID, according to table below. |
| 0x0014 | 4 | Vendor Model identifier. This is specific to each vendor. Vendors are encouraged to add their tables on this page. |
| 0x0018 | 4 | Vendor Hardware Revision, where revision 'A' is written as 0x00000041 and revision 'AC' is 0x00004341 |
| 0x001c | 4 | Reserved for future use. |
| 0x0020 | 4 | Pointer to Vendor name, in ASCII. |
| 0x0024 | 4 | Length of Vendor name |
| 0x0028 | 4 | Pointer to Model name, in ASCII. |
| 0x002c | 4 | Length of Model name. |
| 0x0030 | 4 | Pointer to Product Link |
| 0x0034 | 4 | Length of Product Link |
| 0x0038 | 4 | Pointer to Documentation Link |
| 0x003c | 4 | Length of Documentation Link |
| 0x0040 | 4 | Size of ARM PIC (Position Independent Code). |
| 0x0044 | 60 | Reserved for future use. |
| 0x0080 | 128 | Calibration data, see each I/O module for details |
| 0x0100 | 256 | Test Reports, see each I/O module for details |
| 0x0200 | 2048 | Text area. Links points to here, i.e. Vendor name, model name, documentation link and product link. |
| 0x0A00 | 1536 | Reserved for future use. |
| 0x1000 | 12288 | Vendor area |
| 0x4000 | 8192 | Driver software/code. ARM PIC |
| 0x6000 | 4096 | Reserved future use |
| 0x8000 | 32768 | Vendor area |
| 0x10000 | 65536 | Vendor Area, intended for co-MCU usage. |
Vendor ID
Contact us at info@currentmakers.com if you have products you want added.