I2C读数据时对时错

阅读: 评论:0

I2C读数据时对时错

I2C读数据时对时错

出现的问题:读取数据一般正确,一般出错255。

   分析可知:数据读完没有直接发送NACK,而是读完ACK后再发的NACK,可能这个NACK没接收到了。

 

uint8_t HMC5883L_ReadByte(uint8_t _ucRegAddr)
{
    uint8_t ucData;

    i2c_Start();                              /* 总线开始信号 */
    i2c_SendByte(HMC5883L_SLAVE_ADDRESS);    /* 发送设备地址+写信号 */
    i2c_WaitAck();
    i2c_SendByte(_ucRegAddr);                 /* 发送存储单元地址 */
    i2c_WaitAck();

    i2c_Start();                              /* 总线开始信号 */

    i2c_SendByte(HMC5883L_SLAVE_ADDRESS+1);     /* 发送设备地址+读信号 */
    i2c_WaitAck();

    ucData = i2c_ReadByte();                   /* 读出寄存器数据 */
    i2c_NAck();
    i2c_Stop();                              /* 总线停止信号 */
    return ucData;
}


/*
*********************************************************************************************************
*    函 数 名: HMC5883L_ReadData
*    功能说明: 读取 MPU-6050 数据寄存器, 结果保存在全局变量 g_tMag.  主程序可以定时调用该程序刷新数据
*    形    参: 无
*    返 回 值: 无
*********************************************************************************************************
*/
void HMC5883L_ReadData(void)
{
    uint8_t ucReadBuf[7];
    uint8_t i;

#if 1 /* 连续读 */
    i2c_Start();                              /* 总线开始信号 */
    i2c_SendByte(HMC5883L_SLAVE_ADDRESS);    /* 发送设备地址+写信号 */
    i2c_WaitAck();
    i2c_SendByte(DATA_OUT_X);             /* 发送存储单元地址  */
    i2c_WaitAck();

    i2c_Start();                              /* 总线开始信号 */

    i2c_SendByte(HMC5883L_SLAVE_ADDRESS + 1); /* 发送设备地址+读信号 */
    i2c_WaitAck();

    for (i = 0; i < 6; i++)
    {
        ucReadBuf[i] = i2c_ReadByte();                   /* 读出寄存器数据 */
        i2c_Ack();
    }

    /* 读最后一个字节,时给 NAck */
    ucReadBuf[6] = i2c_ReadByte();
    i2c_NAck();

    i2c_Stop();                              /* 总线停止信号 */

#else    /* 单字节读 */
    for (i = 0 ; i < 7; i++)
    {
        ucReadBuf[i] = HMC5883L_ReadByte(DATA_OUT_X + i);
    }
#endif

 

代码来自安富莱电子

本文发布于:2024-02-02 17:38:05,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170686668645382.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:读数   I2C
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23