lsm6ds3.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. #ifndef LSM6DS3_H_
  2. #define LSM6DS3_H_
  3. #include "ets_sys.h"
  4. #include "driver/spi_interface.h"
  5. /*------------------------------------------------------------------------------*/
  6. // Debugging Flag(s)
  7. /*------------------------------------------------------------------------------*/
  8. #define LSM6DS3_DEBUG 1 // flag for printing data to aid debugging
  9. /*------------------------------------------------------------------------------*/
  10. /*------------------------------------------------------------------------------*/
  11. // Debugging Function(s)
  12. /*------------------------------------------------------------------------------*/
  13. #if LSM6DS3_DEBUG
  14. void lsm6ds3_xl_print(void);
  15. #endif
  16. /*------------------------------------------------------------------------------*/
  17. #define LSM6DS3_BIT(x) ((uint16_t)x)
  18. /*------------------------------------------------------------------------------*/
  19. // Device Registers
  20. /*------------------------------------------------------------------------------*/
  21. #define LSM6DS3_FUNC_CFG_ACCESS 0x01 // embedded functions config. reg.
  22. #define LSM6DS3_FUNC_CFG_EN BIT7
  23. /*------------------------------------------------------------------------------*/
  24. #define LSM6DS3_SENSOR_SYNC_TIME_FRAME 0x04 // sensor sync config. reg.
  25. /*------------------------------------------------------------------------------*/
  26. #define LSM6DS3_FIFO_CTRL1 0x06 // FIFO configuration regs.
  27. #define LSM6DS3_FIFO_CTRL2 0x07
  28. #define LSM6DS3_FIFO_CTRL3 0x08
  29. #define LSM6DS3_FIFO_CTRL4 0x09
  30. #define LSM6DS3_FIFO_CTRL5 0x0A
  31. /*------------------------------------------------------------------------------*/
  32. #define LSM6DS3_INT1_CTRL 0x0D // interrupt pin control regs.
  33. #define LSM6DS3_INT2_CTRL 0x0E
  34. /*------------------------------------------------------------------------------*/
  35. #define LSM6DS3_WHO_AM_I 0x0F // who i am ID
  36. /*------------------------------------------------------------------------------*/
  37. #define LSM6DS3_CTRL1_XL 0x10
  38. #define LSM6DS3_ODR_XL_POWERDOWN 0x00
  39. #define LSM6DS3_ODR_XL_13Hz 0x10
  40. #define LSM6DS3_ODR_XL_26Hz 0x20
  41. #define LSM6DS3_ODR_XL_52Hz 0x30
  42. #define LSM6DS3_ODR_XL_104Hz 0x40
  43. #define LSM6DS3_ODR_XL_208Hz 0x50
  44. #define LSM6DS3_ODR_XL_416Hz 0x60
  45. #define LSM6DS3_ODR_XL_833Hz 0x70
  46. #define LSM6DS3_ODR_XL_1_66kHz 0x80
  47. #define LSM6DS3_ODR_XL_3_33_kHz 0x90
  48. #define LSM6DS3_ODR_XL_6_66_kHz 0xA0
  49. #define LSM6DS3_FS_XL_2G 0x00
  50. #define LSM6DS3_FS_XL_16G 0x04
  51. #define LSM6DS3_FS_XL_4G 0x08
  52. #define LSM6DS3_FS_XL_8G 0x0C
  53. #define LSM6DS3_BW_XL_400Hz 0x00
  54. #define LSM6DS3_BW_XL_200Hz 0x01
  55. #define LSM6DS3_BW_XL_100Hz 0x02
  56. #define LSM6DS3_BW_XL_50Hz 0x03
  57. #define LSM6DS3_CTRL2_G 0x11
  58. #define LSM6DS3_ODR_G_POWERDOWN 0x00
  59. #define LSM6DS3_ODR_G_13Hz 0x10
  60. #define LSM6DS3_ODR_G_26Hz 0x20
  61. #define LSM6DS3_ODR_G_52Hz 0x30
  62. #define LSM6DS3_ODR_G_104Hz 0x40
  63. #define LSM6DS3_ODR_G_208Hz 0x50
  64. #define LSM6DS3_ODR_G_416Hz 0x60
  65. #define LSM6DS3_ODR_G_833Hz 0x70
  66. #define LSM6DS3_ODR_G_1_66kHz 0x80
  67. #define LSM6DS3_FS_G_245DPS 0x00
  68. #define LSM6DS3_FS_G_500DPS 0x04
  69. #define LSM6DS3_FS_G_1000DPS 0x08
  70. #define LSM6DS3_FS_G_2000DPS 0x0C
  71. #define LSM6DS3_FS_125 0x02
  72. #define LSM6DS3_CTRL3_C 0x12
  73. #define LSM6DS3_BOOT BIT7
  74. #define LSM6DS3_BDU BIT6
  75. #define LSM6DS3_H_LACTIVE BIT5
  76. #define LSM6DS3_PP_OD BIT4
  77. #define LSM6DS3_SIM BIT3
  78. #define LSM6DS3_IF_INC BIT2
  79. #define LSM6DS3_BLE BIT1
  80. #define LSM6DS3_SW_RESET BIT0
  81. #define LSM6DS3_CTRL4_C 0x13
  82. #define LSM6DS3_XL_SCAL_ODR BIT7
  83. #define LSM6DS3_SLEEP_G BIT6
  84. #define LSM6DS3_INT2_ON_INT1 BIT5
  85. #define LSM6DS3_FIFO_TEMP_EN BIT4
  86. #define LSM6DS3_DRDY_MASK BIT3
  87. #define LSM6DS3_I2C_DISABLE BIT2
  88. #define LSM6DS3_MODE3_EN BIT1
  89. #define LSM6DS3_STOP_ON_FTH BIT0
  90. #define LSM6DS3_CTRL5_C 0x14
  91. #define LSM6DS3_CTRL6_C 0x15
  92. #define LSM6DS3_TRIG_EN BIT7
  93. #define LSM6DS3_LVLEN BIT6
  94. #define LSM6DS3_LVL2_EN BIT5
  95. #define LSM6DS3_XL_HM_MODE BIT4
  96. #define LSM6DS3_CTRL7_G 0x16
  97. #define LSM6DS3_G_HM_MODE BIT7
  98. #define LSM6DS3_HP_G_EN BIT6
  99. #define LSM6DS3_HP_G_RST BIT5
  100. #define LSM6DS3_ROUNDING_STATUS BIT4
  101. #define LSM6DS3_HPCF_G_0_081Hz 0x00
  102. #define LSM6DS3_HPCF_G_0_324Hz 0x01
  103. #define LSM6DS3_HPCF_G_2_070Hz 0x02
  104. #define LSM6DS3_HPCF_G_1_632Hz 0x03
  105. #define LSM6DS3_CTRL8_XL 0x17
  106. #define LSM6DS3_LPF2_XL_EN BIT7
  107. #define LSM6DS3_HPCF_XL_SLOPE_D50 0x00
  108. #define LSM6DS3_HPCF_XL_HP_D100 0x20
  109. #define LSM6DS3_HPCF_XL_HP_D9 0x40
  110. #define LSM6DS3_HPCF_XL_HPD400 0x60
  111. #define LSM6DS3_CTRL9_XL 0x18
  112. #define LSM6DS3_CTRL10_C 0x19
  113. #define LSM6DS3_Z_EN_G BIT5
  114. #define LSM6DS3_Y_EN_G BIT4
  115. #define LSM6DS3_X_EN_G BIT3
  116. #define LSM6DS3_FUNC_EN BIT2
  117. #define LSM6DS3_PEDO_RST_STEP BIT1
  118. #define LSM6DS3_SIGN_MOTION_EN BIT0
  119. #define LSM6DS3_ORIENT_CFG_G 0x0B
  120. /*------------------------------------------------------------------------------*/
  121. #define LSM6DS3_MASTER_CONFIG 0x1A // I2C master config. reg.
  122. #define LSM6DS3_DRDY_ON_INT1 BIT7
  123. #define LSM6DS3_DATA_VALID_SEL_FIFO BIT6
  124. #define LSM6DS3_START_CONIFG BIT4
  125. #define LSM6DS3_PULL_UP_EN BIT3
  126. #define LSM6DS3_PASS_THROUGH_MODE BIT2
  127. #define LSM6DS3_IRON_EN BIT1
  128. #define LSM6DS3_MASTER_ON BIT0
  129. /*------------------------------------------------------------------------------*/
  130. #define LSM6DS3_WAKE_UP_SRC 0x1B // interrupt regs.
  131. #define LSM6DS3_TAP_SRC 0x1C
  132. #define LSM6DS3_D6D_SRC 0x1D
  133. /*------------------------------------------------------------------------------*/
  134. #define LSM6DS3_STATUS_REG 0x1E // status reg.
  135. /*------------------------------------------------------------------------------*/
  136. #define LSM6DS3_OUT_TEMP_L 0x20 // temp. output regs.
  137. #define LSM6DS3_OUT_TEMP_H 0x21
  138. /*------------------------------------------------------------------------------*/
  139. #define LSM6DS3_OUTX_L_G 0x22 // gyro. output regs.
  140. #define LSM6DS3_OUTX_H_G 0x23
  141. #define LSM6DS3_OUTY_L_G 0x24
  142. #define LSM6DS3_OUTY_H_G 0x25
  143. #define LSM6DS3_OUTZ_L_G 0x26
  144. #define LSM6DS3_OUTZ_H_G 0x27
  145. /*------------------------------------------------------------------------------*/
  146. #define LSM6DS3_OUTX_L_XL 0x28 // acc. output regs.
  147. #define LSM6DS3_OUTX_H_XL 0x29
  148. #define LSM6DS3_OUTY_L_XL 0x2A
  149. #define LSM6DS3_OUTY_H_XL 0x2B
  150. #define LSM6DS3_OUTZ_L_XL 0x2C
  151. #define LSM6DS3_OUTZ_H_XL 0x2D
  152. /*------------------------------------------------------------------------------*/
  153. #define LSM6DS3_SENSORHUB1_REG 0x2E // sensor hub output regs.
  154. #define LSM6DS3_SENSORHUB2_REG 0x2F
  155. #define LSM6DS3_SENSORHUB3_REG 0x30
  156. #define LSM6DS3_SENSORHUB4_REG 0x31
  157. #define LSM6DS3_SENSORHUB5_REG 0x32
  158. #define LSM6DS3_SENSORHUB6_REG 0x33
  159. #define LSM6DS3_SENSORHUB7_REG 0x34
  160. #define LSM6DS3_SENSORHUB8_REG 0x35
  161. #define LSM6DS3_SENSORHUB9_REG 0x36
  162. #define LSM6DS3_SENSORHUB10_REG 0x37
  163. #define LSM6DS3_SENSORHUB11_REG 0x38
  164. #define LSM6DS3_SENSORHUB12_REG 0x39
  165. /*------------------------------------------------------------------------------*/
  166. #define LSM6DS3_FIFO_STATUS1 0x3A // FIFO status regs.
  167. #define LSM6DS3_FIFO_STATUS2 0x3B
  168. /*------------------------------------------------------------------------------*/
  169. #define LSM6DS3_FIFO_EMPTY BIT4
  170. #define LSM6DS3_FIFO_FULL BIT5
  171. #define LSM6DS3_FIFO_OVER_RUN BIT6
  172. #define LSM6DS3_FIFO_THRESHOLD BIT7
  173. /*------------------------------------------------------------------------------*/
  174. #define LSM6DS3_FIFO_STATUS3 0x3C
  175. #define LSM6DS3_FIFO_STATUS4 0x3D
  176. /*------------------------------------------------------------------------------*/
  177. #define LSM6DS3_FIFO_DATA_OUT_L 0x3E // FIFO data output regs.
  178. #define LSM6DS3_FIFO_DATA_OUT_H 0x3F
  179. /*------------------------------------------------------------------------------*/
  180. #define LSM6DS3_TIMESTAMP0_REG 0x40 // time stamp output regs.
  181. #define LSM6DS3_TIMESTAMP1_REG 0x41
  182. #define LSM6DS3_TIMESTAMP2_REG 0x42
  183. /*------------------------------------------------------------------------------*/
  184. #define LSM6DS3_STEP_TIMESTAMP_L 0x49 // step counter timestamp regs.
  185. #define LSM6DS3_STEP_TIMESTAMP_H 0x4A
  186. #define LSM6DS3_STEP_COUNTER_L 0x4B // step counter output regs.
  187. #define LSM6DS3_STEP_COUNTER_H 0x4C
  188. /*------------------------------------------------------------------------------*/
  189. #define LSM6DS3_SENSORHUB13_REG 0x4D // sensor hub output regs.
  190. #define LSM6DS3_SENSORHUB14_REG 0x4E
  191. #define LSM6DS3_SENSORHUB15_REG 0x4F
  192. #define LSM6DS3_SENSORHUB16_REG 0x50
  193. #define LSM6DS3_SENSORHUB17_REG 0x51
  194. #define LSM6DS3_SENSORHUB18_REG 0x52
  195. /*------------------------------------------------------------------------------*/
  196. #define LSM6DS3_FUNC_SRC 0x53 // interrupt regs.
  197. #define LSM6DS3_TAP_CFG 0x58
  198. #define LSM6DS3_TIMER_EN BIT7
  199. #define LSM6DS3_PEDO_EN BIT6
  200. #define LSM6DS3_TILT_EN BIT5
  201. #define LSM6DS3_SLOPE_FDS BIT4
  202. #define LSM6DS3_TAP_X_EN BIT3
  203. #define LSM6DS3_TAP_Y_EN BIT2
  204. #define LSM6DS3_TAP_Z_EN BIT1
  205. #define LSM6DS3_LIR BIT0
  206. #define LSM6DS3_TAP_THS_6D 0x59
  207. #define LSM6DS3_INT_DUR2 0x5A
  208. #define LSM6DS3_WAKE_UP_THS 0x5B
  209. #define LSM6DS3_SINGLE_DOUBLE_TAP BIT7
  210. #define LSM6DS3_INACTIVITY BIT6
  211. #define LSM6DS3_WAKE_UP_DUR 0x5C
  212. #define LSM6DS3_FF_DUR5 BIT7
  213. #define LSM6DS3_TIMER_HR BIT4
  214. #define LSM6DS3_FREE_FALL 0x5D
  215. #define LSM6DS3_MD1_CFG 0x5E
  216. #define LSM6DS3_INT1_WU BIT5
  217. #define LSM6DS3_MD2_CFG 0x5F
  218. #define LSM6DS3_INT2_WU BIT5
  219. /*------------------------------------------------------------------------------*/
  220. #define LSM6DS3_OUT_MAG_RAW_X_L 0x66 // external mag. raw data output regs.
  221. #define LSM6DS3_OUT_MAG_RAW_X_H 0x67
  222. #define LSM6DS3_OUT_MAG_RAW_Y_L 0x68
  223. #define LSM6DS3_OUT_MAG_RAW_Y_H 0x69
  224. #define LSM6DS3_OUT_MAG_RAW_Z_L 0x6A
  225. #define LSM6DS3_OUT_MAG_RAW_Z_H 0x6B
  226. /*------------------------------------------------------------------------------*/
  227. /*------------------------------------------------------------------------------*/
  228. // Function Prototypes
  229. /*------------------------------------------------------------------------------*/
  230. int32_t LSM6DS3_Enable_I2C_Bridge(uint8_t enable);
  231. int32_t LSM6DS3_Enable_I2C_Pullups(uint8_t enable);
  232. /*------------------------------------------------------------------------------*/
  233. #endif /* INCLUDE_DRIVER_LSM6DS3_H_ */