Self test boot program for testing icarus sensors

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_UARTConsole by Bluetooth Low Energy

Committer:
smigielski
Date:
Sun Apr 05 09:54:04 2015 +0000
Revision:
13:ef0ce8fa871f
Parent:
11:70359785c2a7
Child:
14:cb369746225d
Debug log working across modules. ; ADXL sensor test cleanuo; MPU device id test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
smigielski 10:3a24c970db40 1 #include "MPU9250Sensor.h"
smigielski 10:3a24c970db40 2 #include "mbed.h"
smigielski 10:3a24c970db40 3
smigielski 10:3a24c970db40 4 #ifndef LOG
smigielski 10:3a24c970db40 5 #define LOG(...) do printf(__VA_ARGS__); while (0)
smigielski 10:3a24c970db40 6 #endif
smigielski 10:3a24c970db40 7
smigielski 13:ef0ce8fa871f 8 MPU9250Sensor::MPU9250Sensor(SPI& spi_,DigitalOut& cs_,void (*debug_)(const char* format, ...)) : BaseSensor(debug_), spi(spi_), cs(cs_) {
smigielski 13:ef0ce8fa871f 9 cs = UP;
smigielski 10:3a24c970db40 10 //To prevent switching into I2C mode when using SPI, the I2C interface should be disabled by setting the I2C_IF_DIS
smigielski 10:3a24c970db40 11 //configuration bit. Setting this bit should be performed immediately after waiting for the time specified by the
smigielski 10:3a24c970db40 12 //“Start-Up Time for Register Read/Write” in Section 6.3.
smigielski 10:3a24c970db40 13
smigielski 10:3a24c970db40 14
smigielski 10:3a24c970db40 15 }
smigielski 10:3a24c970db40 16
smigielski 10:3a24c970db40 17 char* MPU9250Sensor::getSimpleName() {
smigielski 10:3a24c970db40 18 return "MPU9250";
smigielski 10:3a24c970db40 19 }
smigielski 10:3a24c970db40 20
smigielski 10:3a24c970db40 21
smigielski 10:3a24c970db40 22 uint32_t MPU9250Sensor::verifyIntegrity(uint32_t* errorResult) {
smigielski 10:3a24c970db40 23 LOG("Start verfication of MPU9250 Sensor");
smigielski 10:3a24c970db40 24 uint32_t errors = 0;
smigielski 11:70359785c2a7 25 //who am I register value is 0x71
smigielski 13:ef0ce8fa871f 26 uint8_t sensorId = readRegister(MPU9250_WHOAMI);
smigielski 10:3a24c970db40 27
smigielski 13:ef0ce8fa871f 28 if (sensorId !=0x71){
smigielski 13:ef0ce8fa871f 29 errorResult[errors++] = ERROR_WRONG_DEVICE_ID;
smigielski 13:ef0ce8fa871f 30 LOG("Wrong sensorId: %X",sensorId);
smigielski 13:ef0ce8fa871f 31 }
smigielski 10:3a24c970db40 32
smigielski 10:3a24c970db40 33 //check status registry
smigielski 13:ef0ce8fa871f 34 uint8_t status = readRegister(MPU9250_I2C_MST_STATUS);
smigielski 10:3a24c970db40 35
smigielski 10:3a24c970db40 36 //indicate that SEU error was detetcted
smigielski 13:ef0ce8fa871f 37 if (status & (1 << 7)){
smigielski 13:ef0ce8fa871f 38 errorResult[errors++] = ERROR_SEU_ERROR_DETECT;
smigielski 13:ef0ce8fa871f 39 LOG("SEU error detected: %X",status);
smigielski 13:ef0ce8fa871f 40 }
smigielski 10:3a24c970db40 41 //check that chip is in awaken state
smigielski 13:ef0ce8fa871f 42 if (!(status & (1 << 6))){
smigielski 13:ef0ce8fa871f 43 errorResult[errors++] = ERROR_DEVICE_SLEEPING;
smigielski 13:ef0ce8fa871f 44 LOG("Chip not awaken: %X",status);
smigielski 13:ef0ce8fa871f 45 }
smigielski 10:3a24c970db40 46
smigielski 10:3a24c970db40 47 //perform self test
smigielski 13:ef0ce8fa871f 48 errors+=selfTest(&errorResult[errors]);
smigielski 10:3a24c970db40 49
smigielski 10:3a24c970db40 50 return errors;
smigielski 10:3a24c970db40 51 }
smigielski 10:3a24c970db40 52
smigielski 13:ef0ce8fa871f 53 uint32_t MPU9250Sensor::selfTest(uint32_t* errorResult){
smigielski 13:ef0ce8fa871f 54 uint32_t errors = 0;
smigielski 13:ef0ce8fa871f 55
smigielski 13:ef0ce8fa871f 56 return errors;
smigielski 13:ef0ce8fa871f 57 }
smigielski 13:ef0ce8fa871f 58
smigielski 10:3a24c970db40 59 void MPU9250Sensor::getSensorDetails(sensor_t* sensorDetails) {
smigielski 10:3a24c970db40 60
smigielski 10:3a24c970db40 61 }
smigielski 11:70359785c2a7 62
smigielski 13:ef0ce8fa871f 63 uint8_t MPU9250Sensor::readRegister( uint8_t reg){
smigielski 13:ef0ce8fa871f 64 cs = DOWN;
smigielski 13:ef0ce8fa871f 65 spi.write(reg| MPU9250_READ_FLAG);
smigielski 13:ef0ce8fa871f 66 uint8_t val = spi.write(0x00);
smigielski 13:ef0ce8fa871f 67 cs = UP;
smigielski 13:ef0ce8fa871f 68 return val;
smigielski 13:ef0ce8fa871f 69 }
smigielski 11:70359785c2a7 70 //
smigielski 11:70359785c2a7 71 //void MPU9250Sensor::writeRegister( uint8_t reg, uint8_t cmd ){
smigielski 11:70359785c2a7 72 // cs->write(DOWN);
smigielski 11:70359785c2a7 73 // spi->write(reg);
smigielski 11:70359785c2a7 74 // spi->write(cmd);
smigielski 11:70359785c2a7 75 // cs->write(UP);
smigielski 11:70359785c2a7 76 //}