CCS811 编程和端口指南

更新时间:2023-12-08 18:19:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

CCS811编程和端口指南 简介:

这篇应用说明详细叙述了为剑桥CMOS传感器CCS811数字瓦斯传感器的程序设计模型和推荐的端口技术。它告诉软件开发商如何把CCS811设备和另一个内核(例如一个传感芯片,传感整合器,电话,平板电脑或者数字显示设备)集成到一个环境。它详细叙述了用户软件如何接通,控制,使用和停止这传感器。 CCS811设备硬件概述:

CCS811框图如图一下所示:

数字主机接口采用I2 C总线。所有预先带有“n”的信号为低电平有效并可选的,除了nWAKE管脚(信号)。如果不用它们可以置高电平。特别强调的是nWAKE输入信号是由一个软件可配置的GPIO管脚控制的敏感应用程序来控制。在应用程序的电平并不是一个主要问题,它可以让nWAKE接地。

CCS811中配置和提取样本是通过主机在I 2 C接口中发出处理信号到CCS811中专门的地址来完成的。传感器可以工作在轮询方式,或者当它读取了一个eCO 2读数或到达一个临界值时可以发出一个中断在nINT上。

程序设计模型

为了灵活性和软件驱动程序维护简化CCS811不支持在I2C总线上直接寻址的寄存器。相反,它支持单个字节邮箱,来代替这些有特定功能和数据大小的寄存器。

访问一个寄存器,一个I2C传递必须和引用CCS811上的目标地址且二者保持一致一同发出。 当对CCS811进行读写操作时,所有I2C事务必须使用7位地址0x5A (I 2 C _ADDR low) 或者 0x5B (I 2 C _ADDR high)。CCS811寄存器图纸如表一所示。

状态寄存器(0 x00)

下表简述了状态寄存器中的各位: 7 6 5 - 4 3 2 1 - 0 ERROR FW_MODE -

APP_VALID DATA_READY - 表3:状态寄存器字段,叙述了寄存器中各位功能: BITS 7 6:5 4 3 FIELD FW_MODE APP_VALID DATA_READY DESCRIPTION 0:固件处于引导模式,并允许新固件加载 1:固件是在应用程序模式。CCS811准备好ADC测量 保留位 0:没有应用程序固件加载 1:有效的应用程序加载固件 0:没有新数据样本已经准备好 1:一个新的数据样本在ALG_RESULT_DATA,这位在 ALG_RESULT_DATA读I2 C接口时清零。 2:1 0 ERROR 保留位 0:没有错误发生在I2C或传感器 1:有错误发生在I2C或传感器, ERROR_ID寄存器包含在源错误里

表4:测量模式寄存器,表示了在测量模式寄存器中的字段。

7 - 6:4 3 2 THRESH 1 - 0 - DRIVE_MODE INTERRUPT 下表详细描述了在测量模式寄存器各字段。 BITS FIELD DESCIPTION 7 6:4 DRIVE_MODE 保留 000:闲置,不开启测量,这是最低电平模式。 001:IAQ Mode 1 – A,每秒钟执行测量。 010: IAQ Mode 2 – A,每10秒执行测量。 011: IAQ Mode 3 – A,每60秒执行测量。 100: IAQ Mode 4 – Raw Data Mode.外部算法,每隔250毫秒测量,例如酒精检测。 一个新样值被放在ALG_RESULT_DATA 和 RAW_DATA寄存器中。状态寄存器中的DATA_READY位设定测量的时间间隔。 3 INTERRUPT 0:中断生成是禁用的。 1:当一个新信号已经存在ALG_RESULT_DATA中时,nINT信号宣称低驱动。当ALG_RESULT_DATA被I2C端口读数时,就会停止并置为低电平。 2 THRESH 0:中断方式是程序在MEAS_MODE中断。 1:如果MEAS_MODE[INTERRUPT] = 1,当ALG_RESULT_DATA eCO2读取一个阈值的时候设置在THRESHOLDS寄存器,这位使得CCS811发出nINT信号,而不只是延迟。 1:0 保留位 表6:错误ID寄存器,表示了错误ID寄存器的字段。 7:6 5 HEATER SUPPLY 4 HEATER FAULT 3 2 1 0 MSG INVALID MAX MEASMODE READ_REG RESISTANCE INVALID INVALID

表7:错误ID寄存器的原因和反应,描述了在错误ID寄存器中的字段和反应,当STATUS[ERROR] = 1时,寄存器是非0.。 错误 MSG_INVALID 潜在原因 CCS811收到一个I2C向本站的写请求,但是邮箱ID或者大小错误。 CCS811收到一个I2C读请求,对应的邮箱ID是无效的。 推荐行动 检查主机发送一个正确的序列 READ_REG_INVALID 检查主机发送目的序列 检查主机写一个支持模式 MEASMODE_INVALID CCS811收到I2C对MEAS_MODE不支持的写模式 MAX_RESISTANCE 氧化物材料不再正常运行,可能是: *坏了*非常环境 *加热器不操作 检查加热器故障标志 确保传感器在一个典型的大气和记录任何传感器可能以前见过的环境 HEATER_FAULT HEATER_SUPPLY

焊接,PCB或损坏问题 焊接或PCB的问题 检查焊接。在一个无源的板块上5和6之间应该有大约的38欧姆。 检查焊接。在一个无源的板块上5和6之间应该有大约的38欧姆。 错误ID寄存器在下列情况下将会清空:

●应用程序软件在I2 C接口上执行读取错误寄存器操作。

● 应用软件执行SW_RESET序列通过给SW_RESET邮箱编写相应的代码。 ●触发复位功能 ●发出nRESET信号

可能超过1错误标志设置在这个寄存器,因此每次读这个寄存器时应用软件应该单独检查每一位。

下面的例子将使用下面的伪代码来帮助说明CCS811所必需的功能和编程。 #define STATUS_REG 0x00

#define MEAS_MODE_REG 0x01 #define ALG_RESULT_DATA 0x02 #define ENV_DATA 0x05 #define NTC_REG 0x06 #define THRESHOLDS 0x10 #define BASELINE 0x11 #define HW_ID_REG 0x20 #define ERROR_ID_REG 0xE0 #define APP_START_REG 0xF4 #define SW_RESET 0xFF

#define CCS_811_ADDRESS 0x5A #define GPIO_WAKE 0x5 #define DRIVE_MODE_IDLE 0x0 #define DRIVE_MODE_1SEC 0x10 #define DRIVE_MODE_10SEC 0x20 #define DRIVE_MODE_60SEC 0x30 #define INTERRUPT_DRIVEN 0x8 #define THRESHOLDS_ENABLED 0x4 u8 i2c_buff[8];

boolwake_gpio_enabled = true;

void i2c_write(u8 address, u8 register, u8 *tx_data_ptr, u8 length); void i2c_read(u8 address, u8 *rx_data_ptr, u8 length); voidgpio_write(u8 gpio_id, u8 level);

伪代码使用全局数组,i2c_buff,来支持传输数据和接收数据。为了便于说明,假设读事务之前不会自动执行设置写。一些环境抽象这个API。I2 C功能原型基本是不言自明的:

●u8 address:这个参数的值是CCS811地址(CCS_811_ADDRESS)。 ● u8 register:这个参数是邮箱ID

● u8 rx_data_ptr/tx_data_ptr:指向缓冲区的指针调用函数将在那里访问数据,写入CCS811或存储

读取CCS811的数据,i2c_buff在下面大部分的例子中

gpio_write函数使用的主机写GPIO输出(输入CCS811)逻辑高或低电平。其参数如下所述:

● u8 gpio_id:GPIO数写到逻辑高或低。 ● u8 gpio_id:0为逻辑低,1用于逻辑高。

更多信息可参考如何使用它,可参考Handling nWAKE Using a GPIO文档。 为简单起见,这例子不显任何物理层的处理操作,例如I2C中止和超时。

CCS811 I2C数据字节顺序

当读写多个字节的用户必须注意CCS811使用的字节顺序。CCS811假定最重要级别的字节排在较小的

重要性字节的前面。 例如阅读一个16位标量值为0 x11aa,总线上值为0x11的字节出现在字节0 xaa之前。

本文来源:https://www.bwwdw.com/article/e4ut.html

Top