使用逻辑分析仪分析I2C数据(AHT20温湿度传感器)

目录

引言

硬件配置

分析仪配置

数据分析

操作视频

结语


引言

前面已经介绍了使用SLogic Combo 8逻辑分析仪分析UART数据-CSDN博客。今天分享一下使用逻辑分析仪分析I2C数据。

硬件配置

我使用的硬件是前一段时间测试星闪技术使用的润和的W63E套件,有关内容可以参考星闪技术_神一样的老师的博客-CSDN博客。测试软件采用的是【星闪开发连载】WS63E模块实时显示当前环境温湿度_润和星闪-CSDN博客。硬件相关的知识参见vendor/HiHope_NearLink_DK_WS63E_V03/demo/environment · HiSpark/fbb_ws63 - 码云 - 开源中国

通过环境监测板原理图可以看出环境监测板板SDA与底板TX、SCL与底板RX。我将I2C的SCL引脚连接到分析仪的D0通道,SDA引脚连接到D1通道,如下图所示。 

e32b1ad369ef4c8e86da1c10c565d2c0.jpeg

分析仪配置

分析仪的基本使用方法在使用SLogic Combo 8逻辑分析仪分析UART数据-CSDN博客已经介绍了。如果分析I2C数据点击顶部工具栏黄蓝波形图标,搜索I2C,双击选择第一项。

2611db5dd615491fa6506cbdc0bfcaa1.png

点击波形显示窗口新增的I2C通道的协议标签。点击新增的I2C协议标签,设置的SCL、SDA所在通道。

b5011e74256146a3a787716d4431d984.png

数据分析

为了确保抓到数据,将采样点数改为500M,然后点击run就可以抓到数据了。下面就是抓到的数据。

5c521b81652b4295b0bb563ed6bb3381.png

从图中可以看到AHT20传感器的地址是38,这个从程序中也可以看到。

#define AHT20_DEVICE_ADDR 0x38

 接下来写入了ACH、33H和00H三个命令字。ACH是触发测量命令。这点从程序中也可以找到对应代码:

/**
 * 传感器在采集时需要时间,主机发出测量指令(0xAC)后,延时75毫秒以上再读取转换后的数据并判断返回的状态位是否正常。
 * 若状态比特位[Bit7]为0代表数据可正常读取,为1时传感器为忙状态,主机需要等待数据处理完成。
 **/
#define AHT20_CMD_TRIGGER 0xAC // 触发测量命令
#define AHT20_CMD_TRIGGER_ARG0 0x33
#define AHT20_CMD_TRIGGER_ARG1 0x00

// 发送 触发测量 命令,开始测量
uint32_t AHT20_StartMeasure(void)
{
    uint8_t triggerCmd[] = {AHT20_CMD_TRIGGER, AHT20_CMD_TRIGGER_ARG0, AHT20_CMD_TRIGGER_ARG1};
    return AHT20_Write(triggerCmd, sizeof(triggerCmd));
}

通过获取状态命令,共读到6个字节的数据,其中第一个是状态数据。对应的程序段落是:

// 接收测量结果,拼接转换为标准值
uint32_t AHT20_GetMeasureResult(float *temp, float *humi)
{
    uint32_t retval = 0, i = 0;
    if (temp == NULL || humi == NULL) {
        return 0;
    }

    uint8_t buffer[AHT20_STATUS_RESPONSE_MAX] = {0};
    memset_s(&buffer, sizeof(buffer), 0x0, sizeof(buffer));
    retval = AHT20_Read(buffer, sizeof(buffer)); // recv status command result
    if (retval != 0) {
        return retval;
    }

    for (i = 0; aht20_status_busy(buffer[0]) && i < AHT20_MAX_RETRY; i++) {
        osDelay(10);
        retval = AHT20_Read(buffer, sizeof(buffer)); // recv status command result
        if (retval != 0) {
            return retval;
        }
    }
    if (i >= AHT20_MAX_RETRY) {
        printf("AHT20 device always busy!\r\n");
        return 0;
    }

    uint32_t humiRaw = buffer[1];
    humiRaw = (humiRaw << 8) | buffer[2]; // 左移8位或buff[2]得到数据,具体可以看芯片手册
    humiRaw = (humiRaw << 4) | ((buffer[3] & 0xF0) >> 4); // 左移4位或buff[3]得到数据,具体可以看芯片手册
    *humi = humiRaw / (float)AHT20_RESLUTION * 100;       // 100量程

    uint32_t tempRaw = buffer[3] & 0x0F;
    tempRaw = (tempRaw << 8) | buffer[4]; /*  左移8位或buff[4]得到数据,具体可以看芯片手册 */
    tempRaw = (tempRaw << 8) | buffer[5]; // 左移8位或buff[5]得到数据,具体可以看芯片手册
    *temp = tempRaw / (float)AHT20_RESLUTION * 200 - 50; /* 200 50量程 */
    return 0;
}

AHT20的数据格式如下图所示。完整的手册参考常见问题FAQ · Issue #I6WPSS · HiSpark/hi3861_hdu_iot_application - Gitee.com 里面的AHT20.pdf。6个字节中的第一个是状态,后面5个字节,温湿度各占一半。

46e674110bc7401cacbd2afbd49ccf9c.png

操作视频

以上操作过程,可以参考我的B站视频:使用逻辑分析仪分析I2C协议——以AHT20温湿度传感器为例_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1m4UBYUEHE/?spm_id_from=333.1007.top_right_bar_window_dynamic.content.click

结语

逻辑分析仪对于硬件接口调试而言是不可缺少的工具,有了它可以轻松看到底层数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神一样的老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值