接前一篇文章:ICM-20948 Wake on Motion功能开发全过程(6)
探索工作
深入探索
上一回讲到,笔者在InvenSense官网上找到了实现Wake on Motion功能的指导文档。其中主要步骤如下:
本回就来结合文档中的步骤,详细讲解每一步。
(1)第1步 —— 初始化所有配置
注意,文档中提到的寄存器是针对于IAM-20680的,需要将其“对”到ICM-20948中。
IAM-20680手册中的相关内容如下:
而在ICM-20948手册中,与IAM-20680一样,DEVICE_RESET位也是在PWR_MGMT_1寄存器中。如下所示:
当然,两个寄存器的地址有所区别,这一点在写代码的时候需要注意。
这一部分对应的代码如下:
//Step 1: Initialize all configurations
ret = icm20948_reset(icm20948);
if (ret != ESP_OK)
{
ESP_LOGE(TAG, "icm20948_reset failed");
return ret;
}
vTaskDelay(10 / portTICK_PERIOD_MS);
esp_err_t icm20948_reset(icm20948_handle_t sensor)
{
esp_err_t ret;
uint8_t tmp;
ret = icm20948_read(sensor, ICM20948_PWR_MGMT_1, &tmp, 1);
if (ret != ESP_OK)
return ret;
tmp |= 0x80; //bit7: DEVICE_RESET
ret = icm20948_writ