Set BMI160 bus speed to 10MHz

Unliked the MPU6000 from which this driver was based, the bosch
sensor does not have a requirement to handle registers at different
speeds.
This commit is contained in:
Nate Weibley
2016-10-05 08:58:57 +02:00
committed by Julian Oes
parent 6d41ab9e16
commit 57d7a00261
2 changed files with 10 additions and 22 deletions
+8 -19
View File
@@ -19,7 +19,7 @@ const uint8_t BMI160::_checked_registers[BMI160_NUM_CHECKED_REGISTERS] = { BM
};
BMI160::BMI160(int bus, const char *path_accel, const char *path_gyro, spi_dev_e device, enum Rotation rotation) :
SPI("BMI160", path_accel, bus, device, SPIDEV_MODE3, BMI160_LOW_BUS_SPEED),
SPI("BMI160", path_accel, bus, device, SPIDEV_MODE3, BMI160_BUS_SPEED),
_gyro(new BMI160_gyro(this, path_gyro)),
_whoami(0),
_call{},
@@ -907,13 +907,10 @@ BMI160::gyro_ioctl(struct file *filp, int cmd, unsigned long arg)
}
uint8_t
BMI160::read_reg(unsigned reg, uint32_t speed)
BMI160::read_reg(unsigned reg)
{
uint8_t cmd[2] = { (uint8_t)(reg | DIR_READ), 0};
// general register transfer at low clock speed
set_frequency(speed);
transfer(cmd, cmd, sizeof(cmd));
return cmd[1];
@@ -924,9 +921,6 @@ BMI160::read_reg16(unsigned reg)
{
uint8_t cmd[3] = { (uint8_t)(reg | DIR_READ), 0, 0 };
// general register transfer at low clock speed
set_frequency(BMI160_LOW_BUS_SPEED);
transfer(cmd, cmd, sizeof(cmd));
return (uint16_t)(cmd[1] << 8) | cmd[2];
@@ -940,9 +934,6 @@ BMI160::write_reg(unsigned reg, uint8_t value)
cmd[0] = reg | DIR_WRITE;
cmd[1] = value;
// general register transfer at low clock speed
set_frequency(BMI160_LOW_BUS_SPEED);
transfer(cmd, nullptr, sizeof(cmd));
}
@@ -951,7 +942,7 @@ BMI160::modify_reg(unsigned reg, uint8_t clearbits, uint8_t setbits)
{
uint8_t val;
val = read_reg(reg, BMI160_LOW_BUS_SPEED);
val = read_reg(reg);
val &= ~clearbits;
val |= setbits;
write_checked_reg(reg, val);
@@ -1101,7 +1092,7 @@ BMI160::check_registers(void)
{
uint8_t v;
if ((v = read_reg(_checked_registers[_checked_next], BMI160_LOW_BUS_SPEED)) !=
if ((v = read_reg(_checked_registers[_checked_next])) !=
_checked_values[_checked_next]) {
_checked_bad[_checked_next] = v;
@@ -1167,9 +1158,7 @@ BMI160::measure()
*/
bmi_report.cmd = BMIREG_GYR_X_L | DIR_READ;
set_frequency(BMI160_LOW_BUS_SPEED);
uint8_t status = read_reg(BMIREG_STATUS, BMI160_LOW_BUS_SPEED);
uint8_t status = read_reg(BMIREG_STATUS);
if (OK != transfer((uint8_t *)&bmi_report, ((uint8_t *)&bmi_report), sizeof(bmi_report))) {
return;
@@ -1189,8 +1178,8 @@ BMI160::measure()
_last_accel[2] = bmi_report.accel_z;
_got_duplicate = false;
uint8_t temp_l = read_reg(BMIREG_TEMP_0, BMI160_LOW_BUS_SPEED);
uint8_t temp_h = read_reg(BMIREG_TEMP_1, BMI160_LOW_BUS_SPEED);
uint8_t temp_l = read_reg(BMIREG_TEMP_0);
uint8_t temp_h = read_reg(BMIREG_TEMP_1);
report.temp = ((temp_h << 8) + temp_l);
@@ -1376,7 +1365,7 @@ BMI160::print_info()
::printf("checked_next: %u\n", _checked_next);
for (uint8_t i = 0; i < BMI160_NUM_CHECKED_REGISTERS; i++) {
uint8_t v = read_reg(_checked_registers[i], BMI160_LOW_BUS_SPEED);
uint8_t v = read_reg(_checked_registers[i]);
if (v != _checked_values[i]) {
::printf("reg %02x:%02x should be %02x\n",
+2 -3
View File
@@ -238,8 +238,7 @@
#define BMI160_ONE_G 9.80665f
#define BMI160_LOW_BUS_SPEED 1000*1000
#define BMI160_HIGH_BUS_SPEED 11*1000*1000
#define BMI160_BUS_SPEED 10*1000*1000
#define BMI160_TIMER_REDUCTION 200
@@ -387,7 +386,7 @@ private:
* @param The register to read.
* @return The value that was read.
*/
uint8_t read_reg(unsigned reg, uint32_t speed = BMI160_LOW_BUS_SPEED);
uint8_t read_reg(unsigned reg);
uint16_t read_reg16(unsigned reg);
/**