AT24Cxx 芯片sot-23没有Ax地址,这个地址应该是多少?<已解决>

2019-12-17 21:34发布

本帖最后由 zhcj66 于 2018-9-30 08:49 编辑

如题"AT24Cxx 芯片sot-23没有Ax地址管脚,这个地址应该是多少? "

这个芯片和常规的so-8封装的有什么区别 ,除了地址


在这里统一回复一下,芯片读写成功地址是0;问题还是出在程序上,用成了24CL64的程序了,这个芯片是24C02

下面是我的代码


  1. //AT24C02读写程序,测试成功。mcu采用的STM32 72MHz
  2. #define IIC_SDA_RCC                RCC_APB2Periph_GPIOC
  3. #define IIC_SDA_PIN     GPIO_Pin_4
  4. #define IIC_SDA_GPIOx   GPIOC

  5. #define IIC_SCL_RCC                RCC_APB2Periph_GPIOC
  6. #define IIC_SCL_PIN     GPIO_Pin_5
  7. #define IIC_SCL_GPIOx   GPIOC


  8. #define IIC_SDA_SET            GPIO_SetBits(IIC_SDA_GPIOx,IIC_SDA_PIN)
  9. #define IIC_SDA_CLR            GPIO_ResetBits(IIC_SDA_GPIOx,IIC_SDA_PIN)
  10. #define IIC_SDA_Get     GPIO_ReadInputDataBit(IIC_SDA_GPIOx, IIC_SDA_PIN)

  11. #define IIC_SCL_SET            GPIO_SetBits(IIC_SCL_GPIOx,IIC_SCL_PIN)
  12. #define IIC_SCL_CLR            GPIO_ResetBits(IIC_SCL_GPIOx,IIC_SCL_PIN)
  13. #define IIC_SCL_Get     GPIO_ReadInputDataBit(IIC_SCL_GPIOx, IIC_SCL_PIN)

  14. #define        IIC_ReadAddr         0xA1                //器件地址以及读取操作
  15. #define        IIC_WriteAddr    0xA0                //器件地址以及写入操作
  16. #define        IIC_MaxAddr      0xFF                //AT24C02最大地址

  17. void IIC_Delays(unsigned char ms)       
  18. {
  19. static unsigned char i;
  20.         while(ms--)
  21.         {
  22.                 for(i = 0; i < 50; i++);
  23.         }
  24. }

  25. void NOP(void)
  26. {
  27.         ;
  28. }

  29. //把SDA管脚设置为输入
  30. void IIC_SDA_IN(void)
  31. {
  32.        
  33. }

  34. //把SDA管脚设置为输出
  35. void IIC_SDA_OUT(void)
  36. {
  37.        
  38. }

  39. void IIC_Start(void)
  40. {
  41.         IIC_SDA_OUT();

  42.         IIC_SDA_SET;
  43.         IIC_SCL_SET;
  44.         NOP();
  45.         NOP();
  46.         IIC_SDA_CLR;
  47.         NOP();
  48.         NOP();
  49.         NOP();
  50.         NOP();
  51.         IIC_SCL_CLR;
  52. }

  53. void IIC_Stop(void)
  54. {
  55.         IIC_SDA_OUT();

  56.         IIC_SDA_CLR;
  57.         NOP();
  58.         NOP();
  59.         IIC_SCL_SET;
  60.         NOP();
  61.         NOP();
  62.         NOP();
  63.         NOP();
  64.         IIC_SDA_SET;
  65. }

  66. void IIC_Send(unsigned char Byte)
  67. {
  68. static unsigned char i;

  69.         IIC_SDA_OUT();

  70.         for (i = 0; i < 8; i++)
  71.         {
  72.                 if((Byte & 0x80) == 0x80)
  73.                 {
  74.                         IIC_SDA_SET;
  75.                 }
  76.                 else
  77.                 {
  78.                         IIC_SDA_CLR;
  79.                 }
  80.                 NOP();
  81.                 IIC_SCL_SET;
  82.                 NOP();
  83.                 NOP();
  84.                 IIC_SCL_CLR;
  85.                 Byte = Byte << 1;
  86.         }
  87.         IIC_SDA_SET;
  88.         NOP();
  89.         NOP();
  90.         IIC_SCL_SET;
  91.         NOP();
  92.         NOP();
  93.         NOP();
  94.         NOP();
  95.         IIC_SCL_CLR;
  96. }

  97. unsigned char IIC_Read(void)
  98. {       
  99. unsigned char i,read_data=0;

  100.         IIC_SDA_IN();

  101.         for (i = 0; i < 8; i++)
  102.         {
  103.                 IIC_SCL_SET;
  104.                 read_data <<= 1;
  105.                 if(IIC_SDA_Get)
  106.                 {
  107.                         read_data = read_data | 0x01;
  108.                 }
  109.                 IIC_SCL_CLR;
  110.         }
  111.         return read_data;
  112. }

  113. void IIC_WriteByte(unsigned char Addr,unsigned char Data)
  114. {
  115.         IIC_Start();
  116.         IIC_Send(IIC_WriteAddr);
  117.         IIC_Send(Addr);
  118.         IIC_Send(Data);
  119.         IIC_Stop();
  120.         IIC_Delays(90);//如果填写偶数失败时,可以增加延时时间               
  121. }

  122. void IIC_FillByte(unsigned char Data)//填充数据Data到整个EEPROM内
  123. {
  124. static unsigned char i;
  125.         for(i = 0; i < IIC_MaxAddr; i++)
  126.         {
  127.                 IIC_WriteByte(i, Data);
  128.         }
  129. }

  130. unsigned char IIC_ReadByte(unsigned int ReadAddr)
  131. {
  132. static unsigned char read_data;
  133.        
  134.         IIC_Start();
  135.         IIC_Send(IIC_WriteAddr);
  136.         IIC_Send(ReadAddr);
  137.         IIC_Start();
  138.         IIC_Send(IIC_ReadAddr);
  139.         read_data = IIC_Read();
  140.         IIC_Stop();
  141.         IIC_Delays(45);
  142.         return read_data;
  143. }


  144. void IIC_Init(void)
  145. {
  146.         GPIO_InitTypeDef GPIO_InitStructure;
  147.        
  148.         RCC_APB2PeriphClockCmd(IIC_SDA_RCC|IIC_SCL_RCC,ENABLE);
  149.        
  150.         GPIO_InitStructure.GPIO_Pin = IIC_SDA_PIN;
  151.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  152.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  153.     GPIO_Init(IIC_SDA_GPIOx,&GPIO_InitStructure);
  154.        
  155.         GPIO_InitStructure.GPIO_Pin = IIC_SCL_PIN;
  156.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  157.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  158.     GPIO_Init(IIC_SCL_GPIOx,&GPIO_InitStructure);
  159. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。