sinara-hw / meta

Meta-Project for Sinara: Wiki, inter-board design, incubator for new projects
50 stars 4 forks source link

sinara-hw EEPROM #38

Closed TheCakeIsAPi closed 4 years ago

TheCakeIsAPi commented 5 years ago

Most of the sinara-hw contains I2C EEPROM chips (eg 24AA02E48T-I on Urukul). Some questions.

@TheCakeIsAPi and @jbqubit

gkasprow commented 5 years ago

Technosystem does not program the chips. Creotech is reading the unique ID during the tests, but AFAIK they don't program their either. @kaolpr am I right?

jordens commented 5 years ago

QUARTIQ programs the one on Kasli and has defined a data format that is also used by the persistent data storage on urukul.

gkasprow commented 5 years ago

Is there easy to use tool that can be used in a production environment to write EEPROMs?

jordens commented 5 years ago

Sure. We published our deployment tooling long ago. https://github.com/quartiq/kasli-i2c . And I guess Pawel has been using it. It would be great if creotech and Technosystem would contribute to test and production tooling as well.

kaolpr commented 5 years ago

@gkasprow you're right. Creotech is only reading and storing ID during test procedure. We're not writing anything to the EEPROM, but it can be implemented right away.

jmatyas commented 4 years ago

SINARA EEPROM contents guide

I took the liberty to prepare a short guide for Sinara hardware vendros on what should be put into modules' EEPROM. It's mainly a description of deployment tools @jordens published a while ago and it is backwards compatible with what has been flashed onto many Sinara devices so far.

Each board (apart from Kasli) is equipped with one EEPROM per EEM connector. It might be a good idea to agree a common standard for its contents.

EEPROM Layout

Bytes Field Description
4 CRC32 control sum
2 magic 0x391E (control value)
10 name human readable board name
2 board board ID
1 data_rev EEPROM data format rev.
1 major board major rev.
1 minor board minor rev.
1 variant board variant (e.g. Urukul variant)
1 port port number the board is connected to
1 vendor vendor ID
8 vendor_data e.g. board serial number
16 project_data
16 user_data
64 board_data
122 padding default value: b'\xff' each byte
6 EUI-48 EEPROM EUI-48

EEPROM used in Sinara HW is 24AA02E48 - 2 Kbit memory with I2C interface. Because the upper half of the array is write-protected, the 122-bytes-wide padding is needed. The EEPROM contents should be interpreted as bytes following layout from the above table. Bytes are big-endian and unsigned int is of standard size of 4 (Python ">I" format identifier when converting Python values to C structs).

CRC32 is computed for values [4:end] (including padding and EUI-48). EEPROM EUI-48 has to be read from EEPROM and put into the data struct first, otherwise EEPROM readout won't result with valid values after flashing.

BOARD IDs

ID BOARD NAME
0 invalid
1 VHDCI_Carrier
2 Sayma_RTM
4 Sayma_AMC
5 Metlino
6 Kasli
7 DIO_BNC
8 DIO_SMA
9 DIO_RJ45
10 Urukul
11 Zotino
12 Novogorny
13 Sampler
14 Grabber
15 Mirny
16 Banker
17 Humpback
18 Stabilizer
19 Fastino
20 Phaser

VENDOR IDs

ID VENDOR
0 invalid
1 Technosystem
2 Creotech
3 QUARTIQ
#... ...

BOARD VARIANTS

BOARD VARIANTS
Urukul AD9910
AD9912
Phaser Baseband
Upconverter

I wasn't able to retrive information on what to place in the fileds _project_data, user_data or boarddata, co @jordens could you specify if you had some specific information in mind for these fields, or perhaps you just reserved it for the 'future feature'?

Does anybody perhaps have a suggestion on particular data field or contents that should be included in EEPROM?

kaolpr commented 4 years ago

I'll add a few words of comment here. At WUT we'd like to work out an agreement with manufacturers to have uniform EEPROM contents. But before it happens we'd like to make sure that we all agree on the contents format. That's why @jmatyas was asked to go through @jordens codes and make a format description. When the format is agreed, he will make guidelines for manufacturers to apply.

jordens commented 4 years ago

Let's not hijack closed issues. The top post is answered and resolved. Since the place where the work was done is the repository I mentioned, please file the issue there.