sb10q I think, the problem seems to be the way how the device DB is generated or the master/compiler intepreting it. Yes, channels are assigned correctly but I2C access is performed always locally on the master crate.
This is an excerpt of our master json file
{
"type": "urukul",
"ports": [3, 4],
...
"synchronization": true
},
{
"type": "urukul",
"ports": [5, 6],
...
"synchronization": true
},
This is satellite 1 (which by chances has the same EEM ports as the Urukuls on the master)
{
"type": "urukul",
"ports": [3, 4],
...
"synchronization": true
},
{
"type": "urukul",
"ports": [5, 6],
}
And here finally satellite 2
{
"type": "urukul",
"ports": [4, 5],
...
"synchronization": true
},
{
"type": "urukul",
"ports": [6, 7],
...
"synchronization": true
},
{
"type": "urukul",
"ports": [10, 11],
...
"synchronization": true
},
The device db has been derived via artiq_ddb_template -s 2 yb-satellite.json -s 1 yb-satellite2.json yb-master.json > device_db_auto.py
which resulted in entries like this:
# Master
device_db["eeprom_urukul0"] = {
"type": "local",
"module": "artiq.coredevice.kasli_i2c",
"class": "KasliEEPROM",
"arguments": {"port": "EEM3"}
}
device_db["eeprom_urukul1"] = {
...
"arguments": {"port": "EEM5"}
}
# Satellite 1
device_db["eeprom_urukul2"] = {
"type": "local",
"module": "artiq.coredevice.kasli_i2c",
"class": "KasliEEPROM",
"arguments": {"port": "EEM3"}
}
device_db["eeprom_urukul3"] = {
...
"arguments": {"port": "EEM5"}
}
# Satellite 2
device_db["eeprom_urukul4"] = {
"type": "local",
"module": "artiq.coredevice.kasli_i2c",
"class": "KasliEEPROM",
"arguments": {"port": "EEM4"}
}
device_db["eeprom_urukul5"] = {
...
"arguments": {"port": "EEM6"}
}
device_db["eeprom_urukul6"] = {
...
"arguments": {"port": "EEM10"}
}
Assessment
- Satellite 1's Urukuls access the same EEPROM as on the master.
- Satellite 2's first two Urukuls access an EEPROM offset by +1 on the master (which - due to how we connected the urukuls on the master - is again the masters Urukul EEPROMs).
- But the third Urukul on Satellite 2 now wants to access an EEPROM on EEM10 (which is not populated on the master).
- No satellite access the EEPROMs on the respective satellite via remote I2C
Since you pointed out remote I2C: It simply seems like this feature does not work as intended with the ddb above. If one could figure out, how to make this work, it would be the most elegant solution TBH.