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

Dependents:   test_BMI160 TFT_test_MAX32630FTHR

Committer:
Rhyme
Date:
Tue Sep 12 00:52:49 2017 +0000
Revision:
4:93f16677f730
Parent:
3:9d3079170b35
documents addded

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 4:93f16677f730 54
Rhyme 4:93f16677f730 55 /**
Rhyme 4:93f16677f730 56 * get range of Acc (0x41)
Rhyme 4:93f16677f730 57 * @param none
Rhyme 4:93f16677f730 58 * @returns accelerometer g-range
Rhyme 4:93f16677f730 59 * @note the value is 2, 4, or 8
Rhyme 4:93f16677f730 60 */
Rhyme 1:d56df81c389b 61 uint8_t getAccRange(void) ;
Rhyme 4:93f16677f730 62
Rhyme 4:93f16677f730 63 /**
Rhyme 4:93f16677f730 64 * get range of Gyr (0x43)
Rhyme 4:93f16677f730 65 * @param none
Rhyme 4:93f16677f730 66 * @returns Angular Rate Range and Resolution
Rhyme 4:93f16677f730 67 * @note the values are
Rhyme 4:93f16677f730 68 * @note 2000 ( 16.4 LSB/deg/s <-> 61.0 mdeg/s/LSB)
Rhyme 4:93f16677f730 69 * @note 1000 ( 32.8 LSB/deg/s <-> 30.5 mdeg/s/LSB)
Rhyme 4:93f16677f730 70 * @note 500 ( 65.6 LSB/deg/s <-> 15.3 mdeg/s/LSB)
Rhyme 4:93f16677f730 71 * @note 250 (131.2 LSB/deg/s <-> 7.6 mdeg/s/LSB)
Rhyme 4:93f16677f730 72 * @note 125 (262.4 LSB/deg/s <-> 3.8 mdeg/s/LSB)
Rhyme 4:93f16677f730 73 */
Rhyme 1:d56df81c389b 74 int16_t getGyrRange(void) ;
Rhyme 4:93f16677f730 75
Rhyme 4:93f16677f730 76 /**
Rhyme 4:93f16677f730 77 * get Raw acc x value
Rhyme 4:93f16677f730 78 * @param none
Rhyme 4:93f16677f730 79 * @returns 16bit signed value
Rhyme 4:93f16677f730 80 */
Rhyme 4:93f16677f730 81 int16_t getAccRawX(void) ;
Rhyme 3:9d3079170b35 82
Rhyme 4:93f16677f730 83 /**
Rhyme 4:93f16677f730 84 * get Raw acc y value
Rhyme 4:93f16677f730 85 * @param none
Rhyme 4:93f16677f730 86 * @returns 16bit signed value
Rhyme 4:93f16677f730 87 */
Rhyme 3:9d3079170b35 88 int16_t getAccRawY(void) ;
Rhyme 4:93f16677f730 89
Rhyme 4:93f16677f730 90 /**
Rhyme 4:93f16677f730 91 * get Raw acc z value
Rhyme 4:93f16677f730 92 * @param none
Rhyme 4:93f16677f730 93 * @returns 16bit signed value
Rhyme 4:93f16677f730 94 */
Rhyme 3:9d3079170b35 95 int16_t getAccRawZ(void) ;
Rhyme 4:93f16677f730 96
Rhyme 4:93f16677f730 97 /**
Rhyme 4:93f16677f730 98 * get Raw gyr x value
Rhyme 4:93f16677f730 99 * @param none
Rhyme 4:93f16677f730 100 * @returns 16bit signed value
Rhyme 4:93f16677f730 101 */
Rhyme 3:9d3079170b35 102 int16_t getGyrRawX(void) ;
Rhyme 4:93f16677f730 103
Rhyme 4:93f16677f730 104 /**
Rhyme 4:93f16677f730 105 * get Raw gyr y value
Rhyme 4:93f16677f730 106 * @param none
Rhyme 4:93f16677f730 107 * @returns 16bit signed value
Rhyme 4:93f16677f730 108 */
Rhyme 3:9d3079170b35 109 int16_t getGyrRawY(void) ;
Rhyme 4:93f16677f730 110
Rhyme 4:93f16677f730 111 /**
Rhyme 4:93f16677f730 112 * get Raw gyr z value
Rhyme 4:93f16677f730 113 * @param none
Rhyme 4:93f16677f730 114 * @returns 16bit signed value
Rhyme 4:93f16677f730 115 */
Rhyme 3:9d3079170b35 116 int16_t getGyrRawZ(void) ;
Rhyme 4:93f16677f730 117
Rhyme 4:93f16677f730 118 /**
Rhyme 4:93f16677f730 119 * get Raw acc x,y,z values
Rhyme 4:93f16677f730 120 * @param 16bit array address to receive the data
Rhyme 4:93f16677f730 121 * @returns none
Rhyme 4:93f16677f730 122 */
Rhyme 3:9d3079170b35 123 void getAccRaw(int16_t *value) ;
Rhyme 1:d56df81c389b 124
Rhyme 4:93f16677f730 125 /**
Rhyme 4:93f16677f730 126 * get Raw gyr x,y,z values
Rhyme 4:93f16677f730 127 * @param 16bit array address to receive the data
Rhyme 4:93f16677f730 128 * @returns none
Rhyme 4:93f16677f730 129 */
Rhyme 4:93f16677f730 130 void getGyrRaw(int16_t *value) ;
Rhyme 4:93f16677f730 131
Rhyme 4:93f16677f730 132 /**
Rhyme 4:93f16677f730 133 * get acc x value
Rhyme 4:93f16677f730 134 * @param none
Rhyme 4:93f16677f730 135 * @returns value (-acc_range ~ +acc_range)
Rhyme 4:93f16677f730 136 */
Rhyme 3:9d3079170b35 137 float getAccX(void) ;
Rhyme 4:93f16677f730 138
Rhyme 4:93f16677f730 139 /**
Rhyme 4:93f16677f730 140 * get acc y value
Rhyme 4:93f16677f730 141 * @param none
Rhyme 4:93f16677f730 142 * @returns value (-acc_range ~ +acc_range)
Rhyme 4:93f16677f730 143 */
Rhyme 3:9d3079170b35 144 float getAccY(void) ;
Rhyme 4:93f16677f730 145
Rhyme 4:93f16677f730 146 /**
Rhyme 4:93f16677f730 147 * get acc z value
Rhyme 4:93f16677f730 148 * @param none
Rhyme 4:93f16677f730 149 * @returns value (-acc_range ~ +acc_range)
Rhyme 4:93f16677f730 150 */
Rhyme 3:9d3079170b35 151 float getAccZ(void) ;
Rhyme 4:93f16677f730 152
Rhyme 4:93f16677f730 153 /**
Rhyme 4:93f16677f730 154 * get gyr x value
Rhyme 4:93f16677f730 155 * @param none
Rhyme 4:93f16677f730 156 * @returns value (-gyr_range ~ +gyr_range)
Rhyme 4:93f16677f730 157 */
Rhyme 3:9d3079170b35 158 float getGyrX(void) ;
Rhyme 4:93f16677f730 159
Rhyme 4:93f16677f730 160 /**
Rhyme 4:93f16677f730 161 * get gyr y value
Rhyme 4:93f16677f730 162 * @param none
Rhyme 4:93f16677f730 163 * @returns value (-gyr_range ~ +gyr_range)
Rhyme 4:93f16677f730 164 */
Rhyme 3:9d3079170b35 165 float getGyrY(void) ;
Rhyme 4:93f16677f730 166
Rhyme 4:93f16677f730 167 /**
Rhyme 4:93f16677f730 168 * get gyr z value
Rhyme 4:93f16677f730 169 * @param none
Rhyme 4:93f16677f730 170 * @returns value (-gyr_range ~ +gyr_range)
Rhyme 4:93f16677f730 171 */
Rhyme 3:9d3079170b35 172 float getGyrZ(void) ;
Rhyme 4:93f16677f730 173
Rhyme 4:93f16677f730 174 /**
Rhyme 4:93f16677f730 175 * get acc x, y, z values
Rhyme 4:93f16677f730 176 * @param float array address to receive the values
Rhyme 4:93f16677f730 177 * @returns none
Rhyme 4:93f16677f730 178 * @note the value range is (-acc_range ~ +acc_range)
Rhyme 4:93f16677f730 179 */
Rhyme 3:9d3079170b35 180 void getAcc(float *value) ;
Rhyme 4:93f16677f730 181
Rhyme 4:93f16677f730 182 /**
Rhyme 4:93f16677f730 183 * get gyr x, y, z values
Rhyme 4:93f16677f730 184 * @param float array address to receive the values
Rhyme 4:93f16677f730 185 * @returns none
Rhyme 4:93f16677f730 186 * @note the value range is (-gyr_range ~ +gyr_range)
Rhyme 4:93f16677f730 187 */
Rhyme 3:9d3079170b35 188 void getGyr(float *value) ;
Rhyme 3:9d3079170b35 189
Rhyme 0:9aed6f5a35c0 190 private:
Rhyme 0:9aed6f5a35c0 191 SPI *m_spi ;
Rhyme 0:9aed6f5a35c0 192 I2C *m_i2c ;
Rhyme 0:9aed6f5a35c0 193 DigitalOut *m_cs ;
Rhyme 0:9aed6f5a35c0 194 int m_addr ;
Rhyme 3:9d3079170b35 195 int acc_range ;
Rhyme 3:9d3079170b35 196 int gyr_range ;
Rhyme 0:9aed6f5a35c0 197
Rhyme 0:9aed6f5a35c0 198 void init(void) ;
Rhyme 0:9aed6f5a35c0 199 void i2c_readRegs(int addr, uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 200 void i2c_writeRegs(uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 201 void spi_readRegs(int addr, uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 202 void spi_writeRegs(uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 203 void readRegs(int addr, uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 204 void writeRegs(uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 205 } ;
Rhyme 0:9aed6f5a35c0 206
Rhyme 1:d56df81c389b 207 #define ACC_PMU_SUSPEND 0x00
Rhyme 1:d56df81c389b 208 #define ACC_PMU_NORMAL 0x01
Rhyme 1:d56df81c389b 209 #define ACC_PMU_LOWPOWER 0x02
Rhyme 1:d56df81c389b 210 #define GYR_PMU_SUSPEND 0x00
Rhyme 1:d56df81c389b 211 #define GYR_PMU_NORMAL 0x01
Rhyme 1:d56df81c389b 212 #define GYR_PMU_FASTSU 0x03
Rhyme 1:d56df81c389b 213 #define MAG_PMU_SUSPEND 0x00
Rhyme 1:d56df81c389b 214 #define MAG_PMU_NORMAL 0x01
Rhyme 1:d56df81c389b 215 #define MAG_PMU_LOWPOWER 0x02
Rhyme 0:9aed6f5a35c0 216 #endif /* _BMI160_H_ */