【E1119】CCS811调试指南

2021-09-12 16:21:12      索炜达电子      615     

项目编号:E1119

文件大小:6K

源码说明:带中文注释

开发环境:C编译器

简要概述:

前言

最近使用CCS811这一款集成环境参数测量芯片,由于CCS811本身的原因,导致调试颇为不顺利。现在已经调试出来,把自己的经验分享给大家。主控芯片stm32f103。


问题一:无法正常读取硬件id及状态

这个问题有可能是:


1.进行了某些误操作,导致CCS811芯片本身跑飞,所以怎么复位都不能读取。解决办法是对芯片复位,即INT脚接地

2.IIC通讯本身有问题,讲IIC通讯的读和写里的延迟加大,至少5us


问题二:从boot模式转换到测量模式失败

当上面的参数能读取出来的时候,其实通讯本身已经没有问题,但是由于CCS811内部集成的MCU需要一定的时间转换模式,即当我们发送测量转换指令后,必须等待至少180us时间,才能够对ccs811进行读写操作,假如提前读写便导致CCS811跑飞。

解决办法,当发送转换指令时必须等待180us,代码如下


//测量数据前必须开启

void app_Start(void)

{

nWAKE=0;

delay_us(50);

IIC_Start(); 

IIC_Send_Byte(WRIT);    //发送写命令

if(IIC_Wait_Ack()){

IIC_Stop();return;}

IIC_Send_Byte(0xF4);

delay_us(180); //必须等待180us以上才能够收到应答

if(IIC_Wait_Ack()){IIC_Stop();return;}

IIC_Stop();

nWAKE=1;


}

问题三:进入测量模式但无法读取环境参数

这个问题也是CCS811内部集成的MCU的锅,当进入测量模式后,CCS811的IIC通讯就变慢了,也就是说,IIC通讯必须变慢,否则CCS811反应不过来。

解决办法是调整IIC读写速度,读写延迟至少50us。

代码如下:

//测量数据前必须开启

void IIC_Send_Byte(u8 txd)

{                        

    u8 t;   

SDA_OUT();     

    IIC_SCL=0;//拉低时钟开始数据传输

    for(t=0;t<8;t++)

    {              

if((txd&0x80)>>7)

IIC_SDA=1;

else

IIC_SDA=0;

txd<<=1;   

delay_us(50);   //对TEA5767这三个延时都是必须的

IIC_SCL=1;

delay_us(50); 

IIC_SCL=0;

delay_us(50); 

    }  


}     

//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   

u8 IIC_Read_Byte(unsigned char ack)

{

unsigned char i,receive=0;

SDA_IN();//SDA设置为输入

    for(i=0;i<8;i++ )

{

        IIC_SCL=0; 

        delay_us(50);

IIC_SCL=1;

        receive<<=1;

        if(READ_SDA)receive++;   

delay_us(50); 

    }  

    if (!ack)

        IIC_NAck();//发送nACK

    else

        IIC_Ack(); //发送ACK   

    return receive;

}

其他问题

按照器件手册上的介绍都可以解决


结束语

调试一块板子真的很不容易,尤其是官方文档写的奇奇怪怪的。一开始以为IIC有问题,调了两三天,后面才明白怎么回事,如果有一块逻辑分析仪应该不用这么久吧。附上我写的库,祝大家能够早日调出来。

目录│文件列表:

 └ HARDWARE.zip

TAGCCS811
  • 7 次
  • 1 分