My implementation of Bosh BMI160 Only I2C is tested so far.
Dependents: test_BMI160 TFT_test_MAX32630FTHR
BMI160.h@4:93f16677f730, 2017-09-12 (annotated)
- 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?
User | Revision | Line number | New 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_ */ |