• ICM-20948芯片详解(8)


    接前一篇文章:ICM-20948芯片详解(7)

    六、寄存器详解

    1. 总述

    ICM-20948共有user bank 0~3共4组寄存器。

    • USER BANK 0寄存器图

    USER BANK 0所包含的寄存器如下图所示:

    • USER BANK 1寄存器图

    USER BANK 1所包含的寄存器如下图所示:

    • USER BANK 2寄存器图

    USER BANK 2所包含的寄存器如下图所示:

    • USER BANK 3寄存器图

     USER BANK 3所包含的寄存器如下图所示:

    2. USER BANK 0寄存器详述

    (1)WHO_AM_I

    此寄存器向用户指示正在访问哪个设备。
    ICM-20948的值为0xEA。

    参考代码(节选自https://github.com/listout/icm20948_driver,下同):

    1. #define ICM20948_WHO_AM_I 0x00
    2. esp_err_t
    3. icm20948_get_deviceid(icm20948_handle_t sensor, uint8_t *const deviceid)
    4. {
    5. return icm20948_read(sensor, ICM20948_WHO_AM_I, deviceid, 1);
    6. }
    1. static esp_err_t
    2. icm20948_configure(icm20948_acce_fs_t acce_fs, icm20948_gyro_fs_t gyro_fs)
    3. {
    4. esp_err_t ret;
    5. ……
    6. uint8_t device_id;
    7. ret = icm20948_get_deviceid(icm20948, &device_id);
    8. if (ret != ESP_OK)
    9. return ret;
    10. ESP_LOGI(TAG, "0x%02X", device_id);
    11. if (device_id != ICM20948_WHO_AM_I_VAL)
    12. return ESP_FAIL;
    13. ……
    14. return ret;
    15. }

    (2)USER_CTRL

    参考代码:

    无。

    (3)LP_CONFIG

    参考代码:

    无。

    (4)PWR_MGMT_1

    参考代码:

    1. #define ICM20948_PWR_MGMT_1 0x06
    2. esp_err_t
    3. icm20948_wake_up(icm20948_handle_t sensor)
    4. {
    5. esp_err_t ret;
    6. uint8_t tmp;
    7. ret = icm20948_read(sensor, ICM20948_PWR_MGMT_1, &tmp, 1);
    8. if (ESP_OK != ret) {
    9. return ret;
    10. }
    11. tmp &= (~BIT6);
    12. ret = icm20948_write(sensor, ICM20948_PWR_MGMT_1, &tmp, 1);
    13. return ret;
    14. }
    15. esp_err_t
    16. icm20948_sleep(icm20948_handle_t sensor)
    17. {
    18. esp_err_t ret;
    19. uint8_t tmp;
    20. ret = icm20948_read(sensor, ICM20948_PWR_MGMT_1, &tmp, 1);
    21. if (ESP_OK != ret) {
    22. return ret;
    23. }
    24. tmp |= BIT6;
    25. ret = icm20948_write(sensor, ICM20948_PWR_MGMT_1, &tmp, 1);
    26. return ret;
    27. }
    28. esp_err_t
    29. icm20948_reset(icm20948_handle_t sensor)
    30. {
    31. esp_err_t ret;
    32. uint8_t tmp;
    33. ret = icm20948_read(sensor, ICM20948_PWR_MGMT_1, &tmp, 1);
    34. if (ret != ESP_OK)
    35. return ret;
    36. tmp |= 0x80;
    37. ret = icm20948_write(sensor, ICM20948_PWR_MGMT_1, &tmp, 1);
    38. if (ret != ESP_OK)
    39. return ret;
    40. return ret;
    41. }

    (5)PWR_MGMT_2

    参考代码:

    无。

    USER BANK 0更多寄存器内容请看下回。

  • 相关阅读:
    python试题实例
    『忘了再学』Shell基础 — 3、echo命令的介绍与使用
    LAXCUS分布式操作系统相比LINUX的优势
    生成式模型和判别式模型
    【CSS3】
    长连接和短连接有什么区别?
    文本生成系列之retrieval augmentation(进阶篇Atlas)
    【uni-app】
    【python入门篇】元组、字典和集合(3)
    DFS-组合的输出
  • 原文地址:https://blog.csdn.net/phmatthaus/article/details/140952704