可以读/写EEPROM地址,但是只能读/写第一个存储页面



edit: 我对位和字节,文档指定位,而不是字节,而不是字节读取littes。这解释了我的错误。为什么制造商使用位代替字节来指定容量?有点令人困惑。; - )


我在备用板上找到了ATMEL 24C02N 2KB EEPROM,并想尝试一下该芯片中有什么样的数据,以及是否可以重复使用。从未完成阅读/编写外部记忆。接线很容易(I2C),而且效果很好。

运行I2CSCANNER,并在总线上找到了8个地址,0x50 .. 0x57。首先想到:"奇怪的是,一个设备的8个地址。"该文档描述了有8x256字节,所以好的,8页的8个地址为256个字节。

但是,当我想访问另一个页面时,例如0x51,我获得了相同的数据,并且似乎写入同一内存页面。我在这里想念什么吗?


这是我使用电线库的示例代码:

#include <Wire.h>
int     A24C_PAGE_COUNT     = 8;
uint8_t A24C_PAGE_ADDR[8]   = { 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57 };
int     A24C_PAGE_SIZE      = 256;  
uint8_t eepromReadAddress(int address, int from_addr) 
{
  Wire.beginTransmission(address);
  Wire.write(from_addr);
  Wire.requestFrom(address, 1);
  uint8_t iResult = (Wire.available())?Wire.read():0x32;
  Wire.endTransmission();
  return iResult;
}    
void eepromWriteAddress(uint8_t address, uint8_t from_addr, uint8_t* data) 
{
  Wire.beginTransmission(address);
  Wire.write(from_addr);
  while( *data )
   { Wire.write( *data++ ); }
  Wire.endTransmission();
}
void eepromRead()
{
  int iByte = 0;
  int iPage = 0;
  while( iPage < A24C_PAGE_COUNT )
  {
    Serial.print( "PAGE: " );
    Serial.println( iPage+1 );
    while( iByte < A24C_PAGE_SIZE )
    {
      //Serial.print( "0x" );
      Serial.print( (char)eepromReadAddress( A24C_PAGE_ADDR[ iPage ], iByte ) );
      ++iByte;
      Serial.print(( iByte % 16 == 0 )?"n":",");
    }
    iByte=0;
    ++iPage;
  } 
}
void setup() 
{
  Wire.begin();
  Serial.begin(9600);
  delay( 1000 );
  //eepromWriteAddress( 0x50, 128, "Hello world!" );
  eepromRead();
}
void loop() {
} 

一旦写出" Hello World!"输出输出。到位于128位置的第一页,我将得到:

PAGE: 1
G, ,?,?,, ,,k, ,, ,, ,., ,
 ,, ,!,,,,?, ,,!,?, ,Q,?,4
 ,?, ,,I,?, ,<, ,?,?,?,?,?,?,?
?, ,D, ,,<, ,,?, ,, ,,t, ,
?, ,?,?,?,?,?, , , , , , , , ,
 , , , , , , , , , , , , , , ,
 , , , , , ,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,H,e,l,l,o, ,w,o,r,l,d,!,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
PAGE: 2
G, ,?,?,, ,,k, ,, ,, ,., ,
 ,, ,!,,,,?, ,,!,?, ,Q,?,4
 ,?, ,,I,?, ,<, ,?,?,?,?,?,?,?
?, ,D, ,,<, ,,?, ,, ,,t, ,
?, ,?,?,?,?,?, , , , , , , , ,
 , , , , , , , , , , , , , , ,
 , , , , , ,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,H,e,l,l,o, ,w,o,r,l,d,!,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
PAGE: 3
G, ,?,?,, ,,k, ,, ,, ,., ,
 ,, ,!,,,,?, ,,!,?, ,Q,?,4
 ,?, ,,I,?, ,<, ,?,?,?,?,?,?,?
?, ,D, ,,<, ,,?, ,, ,,t, ,
?, ,?,?,?,?,?, , , , , , , , ,
 , , , , , , , , , , , , , , ,
 , , , , , ,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,H,e,l,l,o, ,w,o,r,l,d,!,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
PAGE: 4
G, ,?,?,, ,,k, ,, ,, ,., ,
 ,, ,!,,,,?, ,,!,?, ,Q,?,4
 ,?, ,,I,?, ,<, ,?,?,?,?,?,?,?
?, ,D, ,,<, ,,?, ,, ,,t, ,
?, ,?,?,?,?,?, , , , , , , , ,
 , , , , , , , , , , , , , , ,
 , , , , , ,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,H,e,l,l,o, ,w,o,r,l,d,!,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
PAGE: 5
G, ,?,?,, ,,k, ,, ,, ,., ,
 ,, ,!,,,,?, ,,!,?, ,Q,?,4
 ,?, ,,I,?, ,<, ,?,?,?,?,?,?,?
?, ,D, ,,<, ,,?, ,, ,,t, ,
?, ,?,?,?,?,?, , , , , , , , ,
 , , , , , , , , , , , , , , ,
 , , , , , ,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,H,e,l,l,o, ,w,o,r,l,d,!,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
PAGE: 6
G, ,?,?,, ,,k, ,, ,, ,., ,
 ,, ,!,,,,?, ,,!,?, ,Q,?,4
 ,?, ,,I,?, ,<, ,?,?,?,?,?,?,?
?, ,D, ,,<, ,,?, ,, ,,t, ,
?, ,?,?,?,?,?, , , , , , , , ,
 , , , , , , , , , , , , , , ,
 , , , , , ,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,H,e,l,l,o, ,w,o,r,l,d,!,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
PAGE: 7
G, ,?,?,, ,,k, ,, ,, ,., ,
 ,, ,!,,,,?, ,,!,?, ,Q,?,4
 ,?, ,,I,?, ,<, ,?,?,?,?,?,?,?
?, ,D, ,,<, ,,?, ,, ,,t, ,
?, ,?,?,?,?,?, , , , , , , , ,
 , , , , , , , , , , , , , , ,
 , , , , , ,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,H,e,l,l,o, ,w,o,r,l,d,!,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
PAGE: 8
G, ,?,?,, ,,k, ,, ,, ,., ,
 ,, ,!,,,,?, ,,!,?, ,Q,?,4
 ,?, ,,I,?, ,<, ,?,?,?,?,?,?,?
?, ,D, ,,<, ,,?, ,, ,,t, ,
?, ,?,?,?,?,?, , , , , , , , ,
 , , , , , , , , , , , , , , ,
 , , , , , ,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,H,e,l,l,o, ,w,o,r,l,d,!,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?

每个地址指向同一页面????

好吧,另一种方法,更改了以下变量以读取一个大页(只是尝试看看会发生什么):

int     A24C_PAGE_COUNT     = 1;
int     A24C_PAGE_SIZE      = 2048;

相同的结果,仅显示第一页,但是重复了8次。那我怎么了?为什么无论如何都有一个设备的8个地址?

RAM和ROM的内存容量通常在 bits 中表达,而不是您似乎假设的 bytes

因此,您指的是Eeprom的8 x 256 ,您似乎期望的记忆比实际上更多 - 您可以存储256 bytes 在那个芯片中。

低容量的芯片显然使用相同的地址解码机制,而不是容量较高的芯片,因此,您似乎看到的是一个简单的地址包裹,而您一遍又一遍地阅读相同的字节(请参阅"滚动"的数据表的第10页。

关于您的"对一个以上I2C地址的答案" - 您是如何连接A0,A1,A2行的?他们需要用力界线才能创建设备的地址。

相关内容

  • 没有找到相关文章

最新更新