mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-17 02:33:35 +08:00
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:
@@ -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",
|
||||
|
||||
@@ -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);
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user