野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12567|回复: 1

I2C驱动问题

[复制链接]
发表于 2016-8-20 21:39:33 | 显示全部楼层 |阅读模式
你好,火哥,我依据AT24C02芯片手册自行的编写EEPROM的驱动,最后调试时发现:在对EEPROM连续操作时,第二次操作总会陷入等待某个信号中,后来我看了你的工程,发现你每次对EEPROM操作后都有如下的一段函数:
/**
  * @brief  Wait for EEPROM Standby state
  * @param  ÎÞ
  * @retval ÎÞ
  */
void I2C_EE_WaitEepromStandbyState(void)      
{
     vu16 SR1_Tmp = 0;

     do
    {
                /* Send START condition */
                I2C_GenerateSTART(macI2Cx, ENABLE);
                /* Read I2C1 SR1 register */
               SR1_Tmp = I2C_ReadRegister(macI2Cx, I2C_Register_SR1);
              /* Send EEPROM address for write */
              I2C_Send7bitAddress(macI2Cx, EEPROM_ADDRESS, I2C_Direction_Transmitter);
             }while(!(I2C_ReadRegister(macI2Cx, I2C_Register_SR1) & 0x0002));
  
              /* Clear AF flag */
             I2C_ClearFlag(macI2Cx, I2C_FLAG_AF);
           /* STOP condition */   
             I2C_GenerateSTOP(macI2Cx, ENABLE);
}
请问这是为什么呢??另外能不能讲一下你是如何发现要添加这段函数的呢(因为我没有在芯片手册中发现相关的介绍的),谢谢,谢谢!

第二个问题:
请问你为什么在对EEPROM操作的时候,无论读或者写操作,你在使用I2C_Send7bitAddress();函数时都是用同一个地址呢??不是地址的最后一位0或者1表示读或者写吗??

谢谢!!!


回复

使用道具 举报

发表于 2016-8-20 21:47:50 来自手机 | 显示全部楼层
帮顶,我们也是参考官方的完善的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 16:59 , Processed in 0.025709 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表