diff --git a/artiq/firmware/libboard_misoc/i2c.rs b/artiq/firmware/libboard_misoc/i2c.rs index acade0c24..9e62a97ff 100644 --- a/artiq/firmware/libboard_misoc/i2c.rs +++ b/artiq/firmware/libboard_misoc/i2c.rs @@ -183,8 +183,11 @@ mod imp { if !write(busno, address << 1)? { return Err("PCA9548 failed to ack write address") } - if !write(busno, channels)? { - return Err("PCA9548 failed to ack control word") + // Duplicate control byte: one for SCL, one for SDA + for _ in 0..2 { + if !write(busno, channels)? { + return Err("PCA9548 failed to ack control word") + } } stop(busno)?; Ok(())