Self test boot program for testing icarus sensors
Dependencies: BLE_API mbed nRF51822
Fork of BLE_UARTConsole by
MPU9250Sensor.cpp@13:ef0ce8fa871f, 2015-04-05 (annotated)
- 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?
User | Revision | Line number | New 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 | //} |