si549: use recommended i2c read sequence

This commit is contained in:
Sebastien Bourdeauducq 2019-11-28 17:49:02 +08:00
parent 2e55e39ac7
commit 87894102e5

View File

@ -105,16 +105,6 @@ mod i2c {
half_period(); half_period();
} }
pub fn restart(dcxo: Dcxo) {
// Set SCL low then SDA high */
scl_o(dcxo, false);
half_period();
sda_oe(dcxo, false);
half_period();
// Do a regular start
start(dcxo);
}
pub fn stop(dcxo: Dcxo) { pub fn stop(dcxo: Dcxo) {
// First, make sure SCL is low, so that the target releases the SDA line // First, make sure SCL is low, so that the target releases the SDA line
scl_o(dcxo, false); scl_o(dcxo, false);
@ -223,12 +213,15 @@ mod si549 {
if !i2c::write(dcxo, reg) { if !i2c::write(dcxo, reg) {
return Err("Si549 failed to ack register") return Err("Si549 failed to ack register")
} }
i2c::restart(dcxo); i2c::stop(dcxo);
i2c::start(dcxo);
if !i2c::write(dcxo, (ADDRESS << 1) | 1) { if !i2c::write(dcxo, (ADDRESS << 1) | 1) {
return Err("Si549 failed to ack read address") return Err("Si549 failed to ack read address")
} }
let val = i2c::read(dcxo, false); let val = i2c::read(dcxo, false);
i2c::stop(dcxo); i2c::stop(dcxo);
Ok(val) Ok(val)
} }