Skyward boardcore
Loading...
Searching...
No Matches
Boardcore::MPU9250 Class Reference

Driver class for MPU9250. More...

#include <MPU9250.h>

Inheritance diagram for Boardcore::MPU9250:
Collaboration diagram for Boardcore::MPU9250:

Classes

union  MPU9250RawData
 

Public Types

enum  GyroFSR : uint8_t { GYRO_FSR_250DPS = 0x0 , GYRO_FSR_500DPS = 0x08 , GYRO_FSR_1000DPS = 0x10 , GYRO_FSR_2000DPS = 0x18 }
 
enum  AccelFSR : uint8_t { ACCEL_FSR_2G = 0x0 , ACCEL_FSR_4G = 0x08 , ACCEL_FSR_8G = 0x10 , ACCEL_FSR_16G = 0x18 }
 
enum  I2CMasterInterfaceClock : uint8_t {
  I2C_MST_IF_CLK_348 = 0x0 , I2C_MST_IF_CLK_333 = 0x1 , I2C_MST_IF_CLK_320 = 0x2 , I2C_MST_IF_CLK_308 = 0x3 ,
  I2C_MST_IF_CLK_296 = 0x4 , I2C_MST_IF_CLK_286 = 0x5 , I2C_MST_IF_CLK_276 = 0x6 , I2C_MST_IF_CLK_267 = 0x7 ,
  I2C_MST_IF_CLK_258 = 0x8 , I2C_MST_IF_CLK_500 = 0x9 , I2C_MST_IF_CLK_471 = 0xA , I2C_MST_IF_CLK_444 = 0xB ,
  I2C_MST_IF_CLK_421 = 0xC , I2C_MST_IF_CLK_400 = 0xD , I2C_MST_IF_CLK_381 = 0xE , I2C_MST_IF_CLK_364 = 0xF
}
 
enum  MPU9250Registers : uint8_t {
  REG_SMPLRT_DIV = 0x19 , REG_CONFIG = 0x1A , REG_GYRO_CONFIG = 0x1B , REG_ACCEL_CONFIG = 0x1C ,
  REG_FIFO_EN = 0x23 , REG_I2C_MST_CTRL = 0x24 , REG_I2C_SLV0_ADDR = 0x25 , REG_I2C_SLV0_REG = 0x26 ,
  REG_I2C_SLV0_CTRL = 0x27 , REG_I2C_SLV1_ADDR = 0x28 , REG_I2C_SLV1_REG = 0x29 , REG_I2C_SLV1_CTRL = 0x2A ,
  REG_I2C_SLV2_ADDR = 0x2B , REG_I2C_SLV2_REG = 0x2C , REG_I2C_SLV2_CTRL = 0x2D , REG_I2C_SLV3_ADDR = 0x2E ,
  REG_I2C_SLV3_REG = 0x2F , REG_I2C_SLV3_CTRL = 0x30 , REG_I2C_SLV4_ADDR = 0x31 , REG_I2C_SLV4_REG = 0x32 ,
  REG_I2C_SLV4_DO = 0x33 , REG_I2C_SLV4_CTRL = 0x34 , REG_INT_PIN_CFG = 0x37 , REG_INT_ENABLE = 0x38 ,
  REG_INT_STATUS = 0x3A , REG_ACCEL_XOUT_H = 0x3B , REG_ACCEL_XOUT_L = 0x3C , REG_ACCEL_YOUT_H = 0x3D ,
  REG_ACCEL_YOUT_L = 0x3E , REG_ACCEL_ZOUT_H = 0x3F , REG_ACCEL_ZOUT_L = 0x40 , REG_TEMP_OUT_H = 0x41 ,
  REG_TEMP_OUT_L = 0x42 , REG_GYRO_XOUT_H = 0x43 , REG_GYRO_XOUT_L = 0x44 , REG_GYRO_YOUT_H = 0x45 ,
  REG_GYRO_YOUT_L = 0x46 , REG_GYRO_ZOUT_H = 0x47 , REG_GYRO_ZOUT_L = 0x48 , REG_EXT_SENS_DATA_00 = 0x49 ,
  REG_I2C_SLV0_DO = 0x63 , REG_I2C_SLV1_DO = 0x64 , REG_I2C_SLV2_DO = 0x65 , REG_I2C_SLV3_DO = 0x66 ,
  REG_MST_DELAY_CTRL = 0x67 , REG_USER_CTRL = 0x6A , REG_PWR_MGMT_1 = 0x6B , REG_PWR_MGMT_2 = 0x6C ,
  REG_WHO_AM_I = 0x75
}
 
enum  AK8963Registers : uint8_t {
  AK8963_REG_WHO_AM_I = 0x0 , AK8963_REG_ST1 = 0x2 , AK8963_REG_HXL = 0x3 , AK8963_REG_HXH = 0x4 ,
  AK8963_REG_HYL = 0x5 , AK8963_REG_HYH = 0x6 , AK8963_REG_HZL = 0x7 , AK8963_REG_HZH = 0x8 ,
  AK8963_REG_ST2 = 0x9 , AK8963_REG_CNTL1 = 0xA , AK8963_REG_CNTL2 = 0xB , AK8963_REG_ASAX = 0x10 ,
  AK8963_REG_ASAY = 0x11 , AK8963_REG_ASAZ = 0x12
}
 
- Public Types inherited from Boardcore::Sensor< MPU9250Data >
using DataType
 

Public Member Functions

 MPU9250 (SPIBusInterface &bus, miosix::GpioPin cs, SPIBusConfig config=getDefaultSPIConfig(), unsigned short samplingRate=100, GyroFSR gyroFsr=GYRO_FSR_250DPS, AccelFSR accelFsr=ACCEL_FSR_2G)
 Instantiates the driver.
 
bool init () override
 Initialize the device.
 
bool selfTest () override
 Self test.
 
- Public Member Functions inherited from Boardcore::Sensor< MPU9250Data >
 Sensor ()
 
 Sensor (Sensor &&other)
 
virtual ~Sensor ()
 
void sample () override
 Sample the sensor.
 
virtual MPU9250Data getLastSample ()
 
- Public Member Functions inherited from Boardcore::AbstractSensor
virtual ~AbstractSensor ()
 
SensorErrors getLastError ()
 Get last error for debugging purposes. Avoid silent fails.
 

Static Public Member Functions

static SPIBusConfig getDefaultSPIConfig ()
 Constructs the default config for SPI Bus.
 

Public Attributes

const float ACCELERATION_FS_MAP [4] = {2.0, 4.0, 8.0, 16.0}
 
const float GYROSCOPE_FS_MAP [4] = {250, 500, 1000, 2000}
 

Static Public Attributes

static constexpr uint8_t REG_CONFIG_DLPF_CFG_1 = 0x1
 
static constexpr uint8_t REG_USER_CTRL_I2C_MST_EN = 0x20
 
static constexpr uint8_t REG_I2C_SLV_CTRL_EN = 0x80
 
static constexpr uint8_t REG_PWR_MGMT_1_BIT_H_RESET = 0x80
 
static constexpr uint8_t REG_PWR_MGMT_1_CLKSEL_AUTO = 0x1
 
static constexpr uint8_t REG_WHO_AM_I_VAL = 0x71
 
static constexpr uint8_t AK8963_ADDR = 0xC
 
static constexpr uint8_t AK8963_REG_WHO_AM_I_VAL = 0x48
 
static constexpr uint8_t AK8963_REG_CNTL1_POWER_DOWN_MODE = 0x0
 
static constexpr uint8_t AK8963_REG_CNTL1_SINGLE_MES_MODE = 0x11
 
static constexpr uint8_t AK8963_REG_CNTL1_CONT_MES_MODE_1 = 0x12
 
static constexpr uint8_t AK8963_REG_CNTL1_CONT_MES_MODE_2 = 0x16
 
static constexpr uint8_t AK8963_REG_CNTL1_SELF_TEST_MODE = 0x8
 
static constexpr uint8_t AK8963_REG_CNTL1_FUSE_ROM_ACCESS_MODE = 0xF
 
static constexpr uint8_t AK8963_REG_CNTL1_BIT_16_BIT_OUT = 0xF
 
static constexpr uint8_t AK8963_REG_CNTL2_BIT_SRST = 0x1
 

Protected Member Functions

MPU9250Data sampleImpl () override
 Read a data sample from the sensor. In case of errors, the method should return the last available correct sample.
 

Additional Inherited Members

- Protected Attributes inherited from Boardcore::Sensor< MPU9250Data >
DataType lastSample
 
miosix::FastMutex mutex
 
- Protected Attributes inherited from Boardcore::AbstractSensor
SensorErrors lastError = SensorErrors::NO_ERRORS
 

Detailed Description

Driver class for MPU9250.

Definition at line 37 of file MPU9250.h.

Member Enumeration Documentation

◆ AccelFSR

Enumerator
ACCEL_FSR_2G 
ACCEL_FSR_4G 
ACCEL_FSR_8G 
ACCEL_FSR_16G 

Definition at line 48 of file MPU9250.h.

◆ AK8963Registers

Enumerator
AK8963_REG_WHO_AM_I 
AK8963_REG_ST1 
AK8963_REG_HXL 
AK8963_REG_HXH 
AK8963_REG_HYL 
AK8963_REG_HYH 
AK8963_REG_HZL 
AK8963_REG_HZH 
AK8963_REG_ST2 
AK8963_REG_CNTL1 
AK8963_REG_CNTL2 
AK8963_REG_ASAX 
AK8963_REG_ASAY 
AK8963_REG_ASAZ 

Definition at line 148 of file MPU9250.h.

◆ GyroFSR

Enumerator
GYRO_FSR_250DPS 
GYRO_FSR_500DPS 
GYRO_FSR_1000DPS 
GYRO_FSR_2000DPS 

Definition at line 40 of file MPU9250.h.

◆ I2CMasterInterfaceClock

Enumerator
I2C_MST_IF_CLK_348 
I2C_MST_IF_CLK_333 
I2C_MST_IF_CLK_320 
I2C_MST_IF_CLK_308 
I2C_MST_IF_CLK_296 
I2C_MST_IF_CLK_286 
I2C_MST_IF_CLK_276 
I2C_MST_IF_CLK_267 
I2C_MST_IF_CLK_258 
I2C_MST_IF_CLK_500 
I2C_MST_IF_CLK_471 
I2C_MST_IF_CLK_444 
I2C_MST_IF_CLK_421 
I2C_MST_IF_CLK_400 
I2C_MST_IF_CLK_381 
I2C_MST_IF_CLK_364 

Definition at line 56 of file MPU9250.h.

◆ MPU9250Registers

Enumerator
REG_SMPLRT_DIV 
REG_CONFIG 
REG_GYRO_CONFIG 
REG_ACCEL_CONFIG 
REG_FIFO_EN 
REG_I2C_MST_CTRL 
REG_I2C_SLV0_ADDR 
REG_I2C_SLV0_REG 
REG_I2C_SLV0_CTRL 
REG_I2C_SLV1_ADDR 
REG_I2C_SLV1_REG 
REG_I2C_SLV1_CTRL 
REG_I2C_SLV2_ADDR 
REG_I2C_SLV2_REG 
REG_I2C_SLV2_CTRL 
REG_I2C_SLV3_ADDR 
REG_I2C_SLV3_REG 
REG_I2C_SLV3_CTRL 
REG_I2C_SLV4_ADDR 
REG_I2C_SLV4_REG 
REG_I2C_SLV4_DO 
REG_I2C_SLV4_CTRL 
REG_INT_PIN_CFG 
REG_INT_ENABLE 
REG_INT_STATUS 
REG_ACCEL_XOUT_H 
REG_ACCEL_XOUT_L 
REG_ACCEL_YOUT_H 
REG_ACCEL_YOUT_L 
REG_ACCEL_ZOUT_H 
REG_ACCEL_ZOUT_L 
REG_TEMP_OUT_H 
REG_TEMP_OUT_L 
REG_GYRO_XOUT_H 
REG_GYRO_XOUT_L 
REG_GYRO_YOUT_H 
REG_GYRO_YOUT_L 
REG_GYRO_ZOUT_H 
REG_GYRO_ZOUT_L 
REG_EXT_SENS_DATA_00 
REG_I2C_SLV0_DO 
REG_I2C_SLV1_DO 
REG_I2C_SLV2_DO 
REG_I2C_SLV3_DO 
REG_MST_DELAY_CTRL 
REG_USER_CTRL 
REG_PWR_MGMT_1 
REG_PWR_MGMT_2 
REG_WHO_AM_I 

Definition at line 95 of file MPU9250.h.

Constructor & Destructor Documentation

◆ MPU9250()

Boardcore::MPU9250::MPU9250 ( SPIBusInterface & bus,
miosix::GpioPin cs,
SPIBusConfig config = getDefaultSPIConfig(),
unsigned short samplingRate = 100,
GyroFSR gyroFsr = GYRO_FSR_250DPS,
AccelFSR accelFsr = ACCEL_FSR_2G )
explicit

Instantiates the driver.

Parameters
highSpeedSpiClockDividerClocl diver for 20MHz SPI communication with the device

Definition at line 32 of file MPU9250.cpp.

Member Function Documentation

◆ getDefaultSPIConfig()

SPIBusConfig Boardcore::MPU9250::getDefaultSPIConfig ( )
static

Constructs the default config for SPI Bus.

Returns
the default SPIBusConfig

Definition at line 40 of file MPU9250.cpp.

◆ init()

bool Boardcore::MPU9250::init ( )
overridevirtual

Initialize the device.

The AK8963 is initialized such ad its data are read by the MPU9250 at each sample cycle, the host only needs to communicate with the MPU9250

Implements Boardcore::AbstractSensor.

Definition at line 48 of file MPU9250.cpp.

◆ sampleImpl()

MPU9250Data Boardcore::MPU9250::sampleImpl ( )
overrideprotectedvirtual

Read a data sample from the sensor. In case of errors, the method should return the last available correct sample.

Returns
sensor data sample

Implements Boardcore::Sensor< MPU9250Data >.

Definition at line 100 of file MPU9250.cpp.

◆ selfTest()

bool Boardcore::MPU9250::selfTest ( )
inlineoverridevirtual

Self test.

Returns
True if everything ok

Implements Boardcore::AbstractSensor.

Definition at line 221 of file MPU9250.h.

Member Data Documentation

◆ ACCELERATION_FS_MAP

const float Boardcore::MPU9250::ACCELERATION_FS_MAP[4] = {2.0, 4.0, 8.0, 16.0}

Definition at line 186 of file MPU9250.h.

◆ AK8963_ADDR

constexpr uint8_t Boardcore::MPU9250::AK8963_ADDR = 0xC
staticconstexpr

Definition at line 175 of file MPU9250.h.

◆ AK8963_REG_CNTL1_BIT_16_BIT_OUT

constexpr uint8_t Boardcore::MPU9250::AK8963_REG_CNTL1_BIT_16_BIT_OUT = 0xF
staticconstexpr

Definition at line 183 of file MPU9250.h.

◆ AK8963_REG_CNTL1_CONT_MES_MODE_1

constexpr uint8_t Boardcore::MPU9250::AK8963_REG_CNTL1_CONT_MES_MODE_1 = 0x12
staticconstexpr

Definition at line 179 of file MPU9250.h.

◆ AK8963_REG_CNTL1_CONT_MES_MODE_2

constexpr uint8_t Boardcore::MPU9250::AK8963_REG_CNTL1_CONT_MES_MODE_2 = 0x16
staticconstexpr

Definition at line 180 of file MPU9250.h.

◆ AK8963_REG_CNTL1_FUSE_ROM_ACCESS_MODE

constexpr uint8_t Boardcore::MPU9250::AK8963_REG_CNTL1_FUSE_ROM_ACCESS_MODE = 0xF
staticconstexpr

Definition at line 182 of file MPU9250.h.

◆ AK8963_REG_CNTL1_POWER_DOWN_MODE

constexpr uint8_t Boardcore::MPU9250::AK8963_REG_CNTL1_POWER_DOWN_MODE = 0x0
staticconstexpr

Definition at line 177 of file MPU9250.h.

◆ AK8963_REG_CNTL1_SELF_TEST_MODE

constexpr uint8_t Boardcore::MPU9250::AK8963_REG_CNTL1_SELF_TEST_MODE = 0x8
staticconstexpr

Definition at line 181 of file MPU9250.h.

◆ AK8963_REG_CNTL1_SINGLE_MES_MODE

constexpr uint8_t Boardcore::MPU9250::AK8963_REG_CNTL1_SINGLE_MES_MODE = 0x11
staticconstexpr

Definition at line 178 of file MPU9250.h.

◆ AK8963_REG_CNTL2_BIT_SRST

constexpr uint8_t Boardcore::MPU9250::AK8963_REG_CNTL2_BIT_SRST = 0x1
staticconstexpr

Definition at line 184 of file MPU9250.h.

◆ AK8963_REG_WHO_AM_I_VAL

constexpr uint8_t Boardcore::MPU9250::AK8963_REG_WHO_AM_I_VAL = 0x48
staticconstexpr

Definition at line 176 of file MPU9250.h.

◆ GYROSCOPE_FS_MAP

const float Boardcore::MPU9250::GYROSCOPE_FS_MAP[4] = {250, 500, 1000, 2000}

Definition at line 187 of file MPU9250.h.

◆ REG_CONFIG_DLPF_CFG_1

constexpr uint8_t Boardcore::MPU9250::REG_CONFIG_DLPF_CFG_1 = 0x1
staticconstexpr

Definition at line 167 of file MPU9250.h.

◆ REG_I2C_SLV_CTRL_EN

constexpr uint8_t Boardcore::MPU9250::REG_I2C_SLV_CTRL_EN = 0x80
staticconstexpr

Definition at line 169 of file MPU9250.h.

◆ REG_PWR_MGMT_1_BIT_H_RESET

constexpr uint8_t Boardcore::MPU9250::REG_PWR_MGMT_1_BIT_H_RESET = 0x80
staticconstexpr

Definition at line 170 of file MPU9250.h.

◆ REG_PWR_MGMT_1_CLKSEL_AUTO

constexpr uint8_t Boardcore::MPU9250::REG_PWR_MGMT_1_CLKSEL_AUTO = 0x1
staticconstexpr

Definition at line 171 of file MPU9250.h.

◆ REG_USER_CTRL_I2C_MST_EN

constexpr uint8_t Boardcore::MPU9250::REG_USER_CTRL_I2C_MST_EN = 0x20
staticconstexpr

Definition at line 168 of file MPU9250.h.

◆ REG_WHO_AM_I_VAL

constexpr uint8_t Boardcore::MPU9250::REG_WHO_AM_I_VAL = 0x71
staticconstexpr

Definition at line 172 of file MPU9250.h.


The documentation for this class was generated from the following files: