Si72xxKit Drivers

Macros

#define SI7200_ADDR_0   (0x30 << 1)
 
#define SI7200_ADDR_1   (0x31 << 1)
 
#define SI7200_ADDR_2   (0x32 << 1)
 
#define SI7200_ADDR_3   (0x33 << 1)
 
#define SI72XX_A0   0xCA
 
#define SI72XX_A1   0xCB
 
#define SI72XX_A2   0xCC
 
#define SI72XX_A3   0xCE
 
#define SI72XX_A4   0xCF
 
#define SI72XX_A5   0xD0
 
#define SI72XX_ARAUTOINC   0xC5
 
#define SI72XX_CTRL1   0xC6
 
#define SI72XX_CTRL2   0xC7
 
#define SI72XX_CTRL3   0xC9
 
#define SI72XX_CTRL4   0xCD
 
#define SI72XX_DSPSIGL   0xC2
 
#define SI72XX_DSPSIGM   0xC1
 
#define SI72XX_DSPSIGSEL   0xC3
 
#define SI72XX_ERROR_BUSY   0xfe
 
#define SI72XX_ERROR_NODATA   0xfd
 
#define SI72XX_HREVID   0xC0
 
#define SI72XX_OTP_200MT_ADDR   0x27
 
#define SI72XX_OTP_20MT_ADDR   0x21
 
#define SI72XX_OTP_ADDR   0xE1
 
#define SI72XX_OTP_CTRL   0xE3
 
#define SI72XX_OTP_DATA   0xE2
 
#define SI72XX_POWER_CTRL   0xC4
 
#define SI72XX_SLTIME   0xC8
 
#define SI72XX_TM_FG   0xE4
 

Enumerations

enum  Si72xxFieldScale_t {
  SI7210_20MT,
  SI7210_200MT
}
 
enum  Si72xxSleepMode_t {
  SI72XX_SLEEP_MODE,
  SI72XX_SLTIMEENA_MODE
}
 

Functions

int32_t Si72xx_ConvertDataCodesToMagneticField (Si72xxFieldScale_t fieldScale, int16_t dataCode)
 Convert Si7210 I2C Data Readings to Magnetic Field in microTeslas.
 
uint32_t Si72xx_EnterLatchMode (I2C_TypeDef *i2c, uint8_t addr)
 Wake-up Si72xx, and configures output for Latch mode. Switch point = 0mT w/ 0.2mT hysteresis.
 
uint32_t Si72xx_EnterSleepMode (I2C_TypeDef *i2c, uint8_t addr, Si72xxSleepMode_t sleepMode)
 Wake-up Si72xx, and set sleep-mode option. If Si72xx is in a sleep-mode, it requires a wake-up command first. Useful for placing Si72xx in SLTIMEENA mode from SLEEP mode, or vice-versa.
 
uint32_t Si72xx_FromIdle_GoToSleep (I2C_TypeDef *i2c, uint8_t addr)
 Puts Si72xx into Sleep mode (lowest power).. Command can only be issued if Si72xx is idle mode.
 
uint32_t Si72xx_FromIdle_GoToSltimeena (I2C_TypeDef *i2c, uint8_t addr)
 Puts Si72xx into Sleep-Timer-Enable mode. Si72xx periodically wakes-up, samples the magnetic field, updates the output, and goes back to sleep-timer-enabled mode. Command can only be issued if Si72xx is idle mode.
 
uint32_t Si72xx_IdentifyAndSleep (I2C_TypeDef *i2c, uint8_t addr, uint8_t *partId, uint8_t *partRev)
 
uint32_t Si72xx_Read_MagField_Data (I2C_TypeDef *i2c, uint8_t addr, int16_t *magData)
 Read out Si72xx Magnetic Field Conversion Data Command can only be issued if Si72xx is idle mode.
 
uint32_t Si72xx_Read_Register (I2C_TypeDef *i2c, uint8_t addr, uint8_t reg, uint8_t *data)
 Reads register from the Si72xx sensor. Command can only be issued if Si72xx is idle mode.
 
uint32_t Si72xx_ReadCorrectedTempAndSleep (I2C_TypeDef *i2c, uint8_t addr, int16_t offsetData, int16_t gainData, int32_t *correctedTemp)
 Wakes up SI72xx, performs a temperature conversion, and places sensor back to sleep. Temperature calculation is performed using compensation data.
 
uint32_t Si72xx_ReadMagFieldDataAndSleep (I2C_TypeDef *i2c, uint8_t addr, Si72xxFieldScale_t mTScale, Si72xxSleepMode_t sleepMode, int16_t *magFieldData)
 Wake-up SI72xx, performs a magnetic-field conversion with FIR, and places Si72xx back to sleep-mode.
 
uint32_t Si72xx_ReadTempCorrectionDataAndSleep (I2C_TypeDef *i2c, uint8_t addr, int16_t *offsetValue, int16_t *gainValue)
 Wakes up SI72xx, performs temperature conversion and places Si72xx into SI72XX_SLEEP sleep-mode.
 
uint32_t Si72xx_ReadTemperatureAndSleep (I2C_TypeDef *i2c, uint8_t addr, int32_t *rawTemp)
 Wakes up SI72xx, performs temperature conversion and places Si72xx into SI72XX_SLEEP sleep-mode.
 
uint32_t Si72xx_ReadVariantAndSleep (I2C_TypeDef *i2c, uint8_t addr, uint8_t *basePn, uint8_t *pnVariant)
 
uint32_t Si72xx_WakeUpAndIdle (I2C_TypeDef *i2c, uint8_t addr)
 Wake-up Si72xx and places sensor in idle-mode.
 
uint32_t Si72xx_Write_Register (I2C_TypeDef *i2c, uint8_t addr, uint8_t reg, uint8_t data)
 Writes register in the Si72xx sensor. Command can only be issued if Si72xx is idle mode.
 

Macro Definition Documentation

#define SI7200_ADDR_0   (0x30 << 1)

I2C device address for Si72xx

Definition at line 38 of file si72xx.h.

#define SI72XX_HREVID   0xC0

I2C registers for Si72xx

Definition at line 44 of file si72xx.h.

Enumeration Type Documentation

Si72xx magnetic field full-scales

Definition at line 76 of file si72xx.h.

Si72xx sleep modes

Definition at line 82 of file si72xx.h.

Function Documentation

int32_t Si72xx_ConvertDataCodesToMagneticField ( Si72xxFieldScale_t  fieldScale,
int16_t  dataCode 
)

Convert Si7210 I2C Data Readings to Magnetic Field in microTeslas.

Parameters
[in]fieldScale20mT or 200mT full-scale magnetic field range
[in]dataCodessigned 15bit value read from hall sensor after magnetic field conversion
Returns
microTeslas

Definition at line 429 of file si72xx.c.

uint32_t Si72xx_EnterLatchMode ( I2C_TypeDef i2c,
uint8_t  addr 
)

Wake-up Si72xx, and configures output for Latch mode. Switch point = 0mT w/ 0.2mT hysteresis.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor

Definition at line 481 of file si72xx.c.

References Si72xx_Read_Register(), Si72xx_WakeUpAndIdle(), and Si72xx_Write_Register().

uint32_t Si72xx_EnterSleepMode ( I2C_TypeDef i2c,
uint8_t  addr,
Si72xxSleepMode_t  sleepMode 
)

Wake-up Si72xx, and set sleep-mode option. If Si72xx is in a sleep-mode, it requires a wake-up command first. Useful for placing Si72xx in SLTIMEENA mode from SLEEP mode, or vice-versa.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor
[in]sleepModeSI72XX_SLEEP: Puts Si72xx into sleep mode. Lowest power & doesn't update SI72XX_SLTIMEENA: Si72xx into sltimeena mode. Updates output periodically

Definition at line 458 of file si72xx.c.

References Si72xx_FromIdle_GoToSleep(), Si72xx_FromIdle_GoToSltimeena(), and Si72xx_WakeUpAndIdle().

uint32_t Si72xx_FromIdle_GoToSleep ( I2C_TypeDef i2c,
uint8_t  addr 
)

Puts Si72xx into Sleep mode (lowest power).. Command can only be issued if Si72xx is idle mode.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor.

Definition at line 211 of file si72xx.c.

References Si72xx_Read_Register(), and Si72xx_Write_Register().

Referenced by Si72xx_EnterSleepMode(), Si72xx_ReadCorrectedTempAndSleep(), Si72xx_ReadMagFieldDataAndSleep(), Si72xx_ReadTempCorrectionDataAndSleep(), and Si72xx_ReadTemperatureAndSleep().

uint32_t Si72xx_FromIdle_GoToSltimeena ( I2C_TypeDef i2c,
uint8_t  addr 
)

Puts Si72xx into Sleep-Timer-Enable mode. Si72xx periodically wakes-up, samples the magnetic field, updates the output, and goes back to sleep-timer-enabled mode. Command can only be issued if Si72xx is idle mode.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor.

Definition at line 236 of file si72xx.c.

References Si72xx_Read_Register(), and Si72xx_Write_Register().

Referenced by Si72xx_EnterSleepMode(), and Si72xx_ReadMagFieldDataAndSleep().

uint32_t Si72xx_Read_MagField_Data ( I2C_TypeDef i2c,
uint8_t  addr,
int16_t *  magData 
)

Read out Si72xx Magnetic Field Conversion Data Command can only be issued if Si72xx is idle mode.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor
[out]magDataMag-field conversion reading, signed 16-bit integer

Definition at line 177 of file si72xx.c.

References Si72xx_Read_Register().

Referenced by Si72xx_ReadMagFieldDataAndSleep().

uint32_t Si72xx_Read_Register ( I2C_TypeDef i2c,
uint8_t  addr,
uint8_t  reg,
uint8_t *  data 
)

Reads register from the Si72xx sensor. Command can only be issued if Si72xx is idle mode.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor.
[out]dataThe data read from the sensor.
[in]regThe register address to read from in the sensor.
Returns
Returns number of bytes read on success. Otherwise returns error codes based on the I2CSPM.

Definition at line 96 of file si72xx.c.

References I2C_TransferSeq_TypeDef::addr, I2C_TransferSeq_TypeDef::buf, I2C_TransferSeq_TypeDef::data, I2C_TransferSeq_TypeDef::flags, I2C_FLAG_WRITE_READ, I2CSPM_Transfer(), i2cTransferDone, and I2C_TransferSeq_TypeDef::len.

Referenced by Si72xx_EnterLatchMode(), Si72xx_FromIdle_GoToSleep(), Si72xx_FromIdle_GoToSltimeena(), Si72xx_Read_MagField_Data(), Si72xx_Read_OTP(), Si72xx_ReadCorrectedTempAndSleep(), Si72xx_ReadMagFieldDataAndSleep(), Si72xx_ReadTempCorrectionDataAndSleep(), and Si72xx_ReadTemperatureAndSleep().

uint32_t Si72xx_ReadCorrectedTempAndSleep ( I2C_TypeDef i2c,
uint8_t  addr,
int16_t  offsetData,
int16_t  gainData,
int32_t *  correctedTemp 
)

Wakes up SI72xx, performs a temperature conversion, and places sensor back to sleep. Temperature calculation is performed using compensation data.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor
[out]tempTemperature measurement in millidegree Celsius
[in]offsetDataOffset correction data
[in]gainDataGain correction data

Definition at line 645 of file si72xx.c.

References Si72xx_FromIdle_GoToSleep(), Si72xx_Read_Register(), Si72xx_WakeUpAndIdle(), and Si72xx_Write_Register().

uint32_t Si72xx_ReadMagFieldDataAndSleep ( I2C_TypeDef i2c,
uint8_t  addr,
Si72xxFieldScale_t  mTScale,
Si72xxSleepMode_t  sleepMode,
int16_t *  magFieldData 
)

Wake-up SI72xx, performs a magnetic-field conversion with FIR, and places Si72xx back to sleep-mode.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor
[in]mTScalemTScale= Si7210_20MT: 20mT full-scale magnetic-field range mTScale= Si7210_200MT: 200mT full-scale magnetic-field range
[in]sleepModeSI72XX_SLEEP: Sleep mode. Lowest power & doesn't update output SI72XX_SLTIMEENA: Sleep-Timer-Enabled mode. Updates output periodically
[out]magFieldDataMagnetic-field conversion reading, signed 16-bit integer

Definition at line 375 of file si72xx.c.

References Si72xx_FromIdle_GoToSleep(), Si72xx_FromIdle_GoToSltimeena(), Si72xx_Read_MagField_Data(), Si72xx_Read_Register(), Si72xx_Set_mT_Range(), Si72xx_WakeUpAndIdle(), and Si72xx_Write_Register().

uint32_t Si72xx_ReadTempCorrectionDataAndSleep ( I2C_TypeDef i2c,
uint8_t  addr,
int16_t *  offsetValue,
int16_t *  gainValue 
)

Wakes up SI72xx, performs temperature conversion and places Si72xx into SI72XX_SLEEP sleep-mode.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor
[out]offsetValueTemperature offset correction
[out]gainValueTemperature gain correction

Definition at line 597 of file si72xx.c.

References Si72xx_FromIdle_GoToSleep(), Si72xx_Read_OTP(), Si72xx_Read_Register(), Si72xx_WakeUpAndIdle(), and Si72xx_Write_Register().

uint32_t Si72xx_ReadTemperatureAndSleep ( I2C_TypeDef i2c,
uint8_t  addr,
int32_t *  rawTemp 
)

Wakes up SI72xx, performs temperature conversion and places Si72xx into SI72XX_SLEEP sleep-mode.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor
[out]tempTemperature measurement in millidegree Celsius

Definition at line 527 of file si72xx.c.

References Si72xx_FromIdle_GoToSleep(), Si72xx_Read_Register(), Si72xx_WakeUpAndIdle(), and Si72xx_Write_Register().

uint32_t Si72xx_WakeUpAndIdle ( I2C_TypeDef i2c,
uint8_t  addr 
)

Wake-up Si72xx and places sensor in idle-mode.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor.
Returns
Returns zero on success. Otherwise returns error codes based on the I2CCSPM

Definition at line 263 of file si72xx.c.

References I2C_TransferSeq_TypeDef::addr, I2C_TransferSeq_TypeDef::buf, I2C_TransferSeq_TypeDef::data, I2C_TransferSeq_TypeDef::flags, I2C_FLAG_WRITE, I2CSPM_Transfer(), i2cTransferDone, and I2C_TransferSeq_TypeDef::len.

Referenced by Si72xx_EnterLatchMode(), Si72xx_EnterSleepMode(), Si72xx_ReadCorrectedTempAndSleep(), Si72xx_ReadMagFieldDataAndSleep(), Si72xx_ReadTempCorrectionDataAndSleep(), and Si72xx_ReadTemperatureAndSleep().

uint32_t Si72xx_Write_Register ( I2C_TypeDef i2c,
uint8_t  addr,
uint8_t  reg,
uint8_t  data 
)

Writes register in the Si72xx sensor. Command can only be issued if Si72xx is idle mode.

Parameters
[in]i2cThe I2C peripheral to use (not used).
[in]addrThe I2C address of the sensor.
[in]dataThe data to write to the sensor.
[in]regThe register address to write to in the sensor.
Returns
Returns zero on success. Otherwise returns error codes based on the I2CCSPM

Definition at line 139 of file si72xx.c.

References I2C_TransferSeq_TypeDef::addr, I2C_TransferSeq_TypeDef::buf, I2C_TransferSeq_TypeDef::data, I2C_TransferSeq_TypeDef::flags, I2C_FLAG_WRITE, I2CSPM_Transfer(), i2cTransferDone, and I2C_TransferSeq_TypeDef::len.

Referenced by Si72xx_EnterLatchMode(), Si72xx_FromIdle_GoToSleep(), Si72xx_FromIdle_GoToSltimeena(), Si72xx_Read_OTP(), Si72xx_ReadCorrectedTempAndSleep(), Si72xx_ReadMagFieldDataAndSleep(), Si72xx_ReadTempCorrectionDataAndSleep(), Si72xx_ReadTemperatureAndSleep(), and Si72xx_Set_mT_Range().