Skip to content

Commit

Permalink
runtime/i2c: more conservative timings
Browse files Browse the repository at this point in the history
sbourdeauducq committed Mar 23, 2016
1 parent 2bb4ad1 commit 799c2c7
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion artiq/runtime/i2c.c
Original file line number Diff line number Diff line change
@@ -139,6 +139,7 @@ int i2c_write(int busno, int b)
for(i=7;i>=0;i--) {
/* Set SCL low and set our bit on SDA */
i2c_scl_o(busno, 0);
i2c_halfperiod(); /* make sure SCL has settled low */
i2c_sda_oe(busno, b & (1 << i) ? 0 : 1);
i2c_halfperiod();
/* Set SCL high ; data is shifted on the rising edge of SCL */
@@ -148,8 +149,9 @@ int i2c_write(int busno, int b)
/* Check ack */
/* Set SCL low, then release SDA so that the I2C target can respond */
i2c_scl_o(busno, 0);
i2c_halfperiod();
i2c_halfperiod(); /* make sure SCL has settled low */
i2c_sda_oe(busno, 0);
i2c_halfperiod();
/* Set SCL high and check for ack */
i2c_scl_o(busno, 1);
i2c_halfperiod();
@@ -182,6 +184,7 @@ int i2c_read(int busno, int ack)
/* Send ack */
/* Set SCL low and pull SDA low when acking */
i2c_scl_o(busno, 0);
i2c_halfperiod(); /* make sure SCL has settled low */
if(ack)
i2c_sda_oe(busno, 1);
i2c_halfperiod();

0 comments on commit 799c2c7

Please sign in to comment.