赞
踩
在开发过程中遇到的小问题,模拟IIC驱动SGP30二氧化碳传感器的时候,发送读取器件指令没有添加延时
void SGP30_Write(uint8_t cmd1, uint8_t cmd2) { i2c_Start(DEV_SGP30);/* 总线开始信号 */ i2c_SendByte(DEV_SGP30,SGP30_write);//发送器件地址+写指令 i2c_WaitAck(DEV_SGP30); /*等待应答*/ i2c_SendByte(DEV_SGP30,cmd1); i2c_WaitAck(DEV_SGP30); i2c_SendByte(DEV_SGP30,cmd2); i2c_WaitAck(DEV_SGP30); i2c_Stop(DEV_SGP30); //DEBUG 指令写入需要延时不能过快写入,不然有可能器件读取失败 //bsp_DelayMS(100); }
导致图中读取B1之后,器件返回NACK,无应答,原因是没有添加bsp_DelayMS(100);
void SGP30_Write(uint8_t cmd1, uint8_t cmd2) { i2c_Start(DEV_SGP30);/* 总线开始信号 */ i2c_SendByte(DEV_SGP30,SGP30_write);//发送器件地址+写指令 i2c_WaitAck(DEV_SGP30); /*等待应答*/ i2c_SendByte(DEV_SGP30,cmd1); i2c_WaitAck(DEV_SGP30); i2c_SendByte(DEV_SGP30,cmd2); i2c_WaitAck(DEV_SGP30); i2c_Stop(DEV_SGP30); //DEBUG 指令写入需要延时不能过快写入,不然有可能器件读取失败 bsp_DelayMS(100); }
图中写入B1读地址之后,器件应答,开始返回数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。