关于iic对at24c16读写中一段NACK 的疑问

2019-12-31 19:18发布

本帖最后由 湛泸骏驰 于 2014-10-24 18:54 编辑

今天用野火的stm32例程,对at24c16进行了读写。在分析iic 的时候发现有很多的NACK 出现 tu11.png (19 KB, 下载次数: 0) 下载附件 2014-10-24 18:54 上传 这样的现象正常吗?以前没有分析过这个呢,今天学习者看了一下逻辑分析仪出来的波形、
中间通信不成功,再次进行写地址,这是必须的吧。。这个分析过程中,有很长的一段都是写完地址后NACK  .. 这个中间出现了好几段。

  1. /**
  2.   * @brief  I2C(AT24C02)读写测试
  3.   * @param  无
  4.   * @retval 无
  5.   */
  6. void I2C_Test(void)
  7. {
  8.         u16 i;

  9.         printf("写入的数据 ");
  10.    
  11.         for ( i=0; i<256; i++ ) //填充缓冲
  12.   {   
  13.     I2c_Buf_Write[i] = i;

  14.     printf("0x%02X ", I2c_Buf_Write[i]);
  15.     if(i%16 == 15)   
  16.         printf(" ");   
  17.    }

  18.   //将I2c_Buf_Write中顺序递增的数据写入EERPOM中
  19.    //LED1(ON);
  20.         I2C_EE_BufferWrite( I2c_Buf_Write, EEP_Firstpage, 256);
  21.         //LED1(OFF);   
  22.   
  23.   printf(" 写成功 ");
  24.    
  25.    printf(" 读出的数据 ");
  26.   //将EEPROM读出数据顺序保持到I2c_Buf_Read中
  27.     //LED2(ON);   
  28.         I2C_EE_BufferRead(I2c_Buf_Read, EEP_Firstpage, 256);
  29.    //LED2(OFF);

  30.   //将I2c_Buf_Read中的数据通过串口打印
  31.         for (i=0; i<256; i++)
  32.         {       
  33.                 if(I2c_Buf_Read[i] != I2c_Buf_Write[i])
  34.                 {
  35.                         printf("0x%02X ", I2c_Buf_Read[i]);
  36.                         printf("错误:I2C EEPROM写入与读出的数据不一致 ");
  37.                         return;
  38.                 }
  39.     printf("0x%02X ", I2c_Buf_Read[i]);
  40.     if(i%16 == 15)   
  41.         printf(" ");   
  42.         }
  43.   printf("I2C(AT24C02)读写测试成功 ");
  44. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。