From fa1ecda3fdaecd89b86bb63930a6521c8f63fe90 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Thu, 31 Jul 2014 10:39:52 +0100
Subject: [PATCH] stmhal, accel: Increase start-up times to 30ms; add extra
 30ms delay.

For accel to start-up reliably, need to wait 30ms between on/off, and
30ms for it to enter active mode.  With this fix the accel can be read
immediately after initialising it.

Addresses issue #763.
---
 stmhal/accel.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/stmhal/accel.c b/stmhal/accel.c
index cfc80f9d3..e846ca4e7 100644
--- a/stmhal/accel.c
+++ b/stmhal/accel.c
@@ -83,11 +83,11 @@ STATIC void accel_start(void) {
     I2CHandle1.Init.OwnAddress2     = 0xfe; // unused
     i2c_init(&I2CHandle1);
 
-    // turn off AVDD, wait 20ms, turn on AVDD, wait 20ms again
+    // turn off AVDD, wait 30ms, turn on AVDD, wait 30ms again
     GPIOB->BSRRH = GPIO_PIN_5; // turn off
-    HAL_Delay(20);
+    HAL_Delay(30);
     GPIOB->BSRRL = GPIO_PIN_5; // turn on
-    HAL_Delay(20);
+    HAL_Delay(30);
 
     HAL_StatusTypeDef status;
 
@@ -100,11 +100,12 @@ STATIC void accel_start(void) {
         }
     }
 
-    //printf("MemWrite\n");
-    uint8_t data[1];
-    data[0] = 1; // active mode
+    // set MMA to active mode
+    uint8_t data[1] = {1}; // active mode
     status = HAL_I2C_Mem_Write(&I2CHandle1, MMA_ADDR, MMA_REG_MODE, I2C_MEMADD_SIZE_8BIT, data, 1, 200);
-    //printf("  got %d\n", status);
+
+    // wait for MMA to become active
+    HAL_Delay(30);
 }
 
 /******************************************************************************/
-- 
GitLab