aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2013-11-28 20:29:33 +1100
committerAndrew Tridgell <tridge@samba.org>2013-11-30 20:20:23 +1100
commitcb76f07d3153895e379f15f6ca388ef04c6384dc (patch)
treea4023cffd11bd86dfe67e4f96356666e8189f162
parent720f6ab313ab869b89a4767d202ec2e64ddb22e9 (diff)
downloadpx4-firmware-cb76f07d3153895e379f15f6ca388ef04c6384dc.tar.gz
px4-firmware-cb76f07d3153895e379f15f6ca388ef04c6384dc.tar.bz2
px4-firmware-cb76f07d3153895e379f15f6ca388ef04c6384dc.zip
l3gd20: added I2C disable based on method from ST engineering support
-rw-r--r--src/drivers/l3gd20/l3gd20.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/drivers/l3gd20/l3gd20.cpp b/src/drivers/l3gd20/l3gd20.cpp
index 8f5674823..31e38fbd9 100644
--- a/src/drivers/l3gd20/l3gd20.cpp
+++ b/src/drivers/l3gd20/l3gd20.cpp
@@ -219,6 +219,11 @@ private:
void reset();
/**
+ * disable I2C on the chip
+ */
+ void disable_i2c();
+
+ /**
* Static trampoline from the hrt_call context; because we don't have a
* generic hrt wrapper yet.
*
@@ -574,6 +579,7 @@ L3GD20::read_reg(unsigned reg)
uint8_t cmd[2];
cmd[0] = reg | DIR_READ;
+ cmd[1] = 0;
transfer(cmd, cmd, sizeof(cmd));
@@ -700,8 +706,18 @@ L3GD20::stop()
}
void
+L3GD20::disable_i2c(void)
+{
+ uint8_t a = read_reg(0x05);
+ write_reg(0x05, (0x20 | a));
+}
+
+void
L3GD20::reset()
{
+ // ensure the chip doesn't interpret any other bus traffic as I2C
+ disable_i2c();
+
/* set default configuration */
write_reg(ADDR_CTRL_REG1, REG1_POWER_NORMAL | REG1_Z_ENABLE | REG1_Y_ENABLE | REG1_X_ENABLE);
write_reg(ADDR_CTRL_REG2, 0); /* disable high-pass filters */
@@ -753,6 +769,7 @@ L3GD20::measure()
perf_begin(_sample_perf);
/* fetch data from the sensor */
+ memset(&raw_report, 0, sizeof(raw_report));
raw_report.cmd = ADDR_OUT_TEMP | DIR_READ | ADDR_INCREMENT;
transfer((uint8_t *)&raw_report, (uint8_t *)&raw_report, sizeof(raw_report));