My implementation of Bosh BMI160 Only I2C is tested so far.

Dependents:   test_BMI160 TFT_test_MAX32630FTHR

Committer:
Rhyme
Date:
Tue Sep 12 00:34:16 2017 +0000
Revision:
3:9d3079170b35
Parent:
2:4cc456503e9f
Child:
4:93f16677f730
started adding documents

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:9aed6f5a35c0 1 #ifndef _BMI160_H_
Rhyme 0:9aed6f5a35c0 2 #define _BMI160_H_
Rhyme 2:4cc456503e9f 3 /**
Rhyme 2:4cc456503e9f 4 * @brief BMI160 Bosch Small, low power inertial measurement unit
Rhyme 2:4cc456503e9f 5 *
Rhyme 2:4cc456503e9f 6 */
Rhyme 0:9aed6f5a35c0 7 class BMI160 {
Rhyme 0:9aed6f5a35c0 8 public:
Rhyme 0:9aed6f5a35c0 9 /**
Rhyme 0:9aed6f5a35c0 10 * BMI160 I2C Interface
Rhyme 0:9aed6f5a35c0 11 *
Rhyme 0:9aed6f5a35c0 12 * @param sda SDA pin
Rhyme 0:9aed6f5a35c0 13 * @param scl SCL pin
Rhyme 0:9aed6f5a35c0 14 * @param addr address of the I2C peripheral
Rhyme 0:9aed6f5a35c0 15 */
Rhyme 0:9aed6f5a35c0 16 BMI160(PinName sda, PinName scl, int addr) ;
Rhyme 0:9aed6f5a35c0 17
Rhyme 0:9aed6f5a35c0 18 /**
Rhyme 0:9aed6f5a35c0 19 * BMI160 SPI Interface
Rhyme 0:9aed6f5a35c0 20 *
Rhyme 0:9aed6f5a35c0 21 * @param sck SPI SCKL pin
Rhyme 0:9aed6f5a35c0 22 * @param miso SPI Master In Slave Out pin
Rhyme 0:9aed6f5a35c0 23 * @param mosi SPI Master Out Slave In pin
Rhyme 0:9aed6f5a35c0 24 * @param cs SPI Chip Select pin
Rhyme 0:9aed6f5a35c0 25 */
Rhyme 0:9aed6f5a35c0 26 BMI160(PinName sck, PinName miso, PinName mosi, PinName cs) ;
Rhyme 0:9aed6f5a35c0 27
Rhyme 0:9aed6f5a35c0 28 /**
Rhyme 0:9aed6f5a35c0 29 * BMI160 destructor
Rhyme 0:9aed6f5a35c0 30 */
Rhyme 0:9aed6f5a35c0 31 ~BMI160() ;
Rhyme 3:9d3079170b35 32
Rhyme 3:9d3079170b35 33 /**
Rhyme 3:9d3079170b35 34 * setCMD set value to the CMD register (0x7E)
Rhyme 3:9d3079170b35 35 *
Rhyme 3:9d3079170b35 36 * @param cmd uint8_t value to write
Rhyme 3:9d3079170b35 37 * @returns none
Rhyme 3:9d3079170b35 38 */
Rhyme 1:d56df81c389b 39 void setCMD(uint8_t cmd) ;
Rhyme 3:9d3079170b35 40
Rhyme 3:9d3079170b35 41 /**
Rhyme 3:9d3079170b35 42 * getStatus get value of the STATUS register (0x1B)
Rhyme 3:9d3079170b35 43 * @param none
Rhyme 3:9d3079170b35 44 * @returns the value of the STATUS register
Rhyme 3:9d3079170b35 45 */
Rhyme 1:d56df81c389b 46 uint8_t getStatus(void) ;
Rhyme 3:9d3079170b35 47
Rhyme 3:9d3079170b35 48 /**
Rhyme 3:9d3079170b35 49 * getChipID get value of the CHIP_ID register (0x10)
Rhyme 3:9d3079170b35 50 * @param none
Rhyme 3:9d3079170b35 51 * @returns the chip ID (supposed to be 0xD1)
Rhyme 3:9d3079170b35 52 */
Rhyme 0:9aed6f5a35c0 53 uint8_t getChipID(void) ;
Rhyme 1:d56df81c389b 54 uint8_t getAccRange(void) ;
Rhyme 1:d56df81c389b 55 int16_t getGyrRange(void) ;
Rhyme 3:9d3079170b35 56
Rhyme 3:9d3079170b35 57 int16_t getAccRawX(void) ;
Rhyme 3:9d3079170b35 58 int16_t getAccRawY(void) ;
Rhyme 3:9d3079170b35 59 int16_t getAccRawZ(void) ;
Rhyme 3:9d3079170b35 60 int16_t getGyrRawX(void) ;
Rhyme 3:9d3079170b35 61 int16_t getGyrRawY(void) ;
Rhyme 3:9d3079170b35 62 int16_t getGyrRawZ(void) ;
Rhyme 3:9d3079170b35 63 void getAccRaw(int16_t *value) ;
Rhyme 3:9d3079170b35 64 void getGyrRaw(int16_t *value) ;
Rhyme 1:d56df81c389b 65
Rhyme 3:9d3079170b35 66 float getAccX(void) ;
Rhyme 3:9d3079170b35 67 float getAccY(void) ;
Rhyme 3:9d3079170b35 68 float getAccZ(void) ;
Rhyme 3:9d3079170b35 69 float getGyrX(void) ;
Rhyme 3:9d3079170b35 70 float getGyrY(void) ;
Rhyme 3:9d3079170b35 71 float getGyrZ(void) ;
Rhyme 3:9d3079170b35 72 void getAcc(float *value) ;
Rhyme 3:9d3079170b35 73 void getGyr(float *value) ;
Rhyme 3:9d3079170b35 74
Rhyme 0:9aed6f5a35c0 75 private:
Rhyme 0:9aed6f5a35c0 76 SPI *m_spi ;
Rhyme 0:9aed6f5a35c0 77 I2C *m_i2c ;
Rhyme 0:9aed6f5a35c0 78 DigitalOut *m_cs ;
Rhyme 0:9aed6f5a35c0 79 int m_addr ;
Rhyme 3:9d3079170b35 80 int acc_range ;
Rhyme 3:9d3079170b35 81 int gyr_range ;
Rhyme 0:9aed6f5a35c0 82
Rhyme 0:9aed6f5a35c0 83 void init(void) ;
Rhyme 0:9aed6f5a35c0 84 void i2c_readRegs(int addr, uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 85 void i2c_writeRegs(uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 86 void spi_readRegs(int addr, uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 87 void spi_writeRegs(uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 88 void readRegs(int addr, uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 89 void writeRegs(uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 90 } ;
Rhyme 0:9aed6f5a35c0 91
Rhyme 1:d56df81c389b 92 #define ACC_PMU_SUSPEND 0x00
Rhyme 1:d56df81c389b 93 #define ACC_PMU_NORMAL 0x01
Rhyme 1:d56df81c389b 94 #define ACC_PMU_LOWPOWER 0x02
Rhyme 1:d56df81c389b 95 #define GYR_PMU_SUSPEND 0x00
Rhyme 1:d56df81c389b 96 #define GYR_PMU_NORMAL 0x01
Rhyme 1:d56df81c389b 97 #define GYR_PMU_FASTSU 0x03
Rhyme 1:d56df81c389b 98 #define MAG_PMU_SUSPEND 0x00
Rhyme 1:d56df81c389b 99 #define MAG_PMU_NORMAL 0x01
Rhyme 1:d56df81c389b 100 #define MAG_PMU_LOWPOWER 0x02
Rhyme 0:9aed6f5a35c0 101 #endif /* _BMI160_H_ */