Skip to main content

Xadow - ストレージ

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

ほとんどのAVRには、小さなEEPROMが搭載されており、変数や設定などを保存するために使用できます。例えば、Xadowメインボードで使用されているAtmega32u4チップには、1Kバイトの内部EEPROMがあります。Xadowプロジェクトでより多くのストレージが必要な場合、このモジュールが最適です!このモジュールは、プロジェクトに追加の32Kバイトを提供します。Xadowストレージは3.3Vで動作し、Xadowシステムと互換性があります。

仕様


  • 動作電圧: 3.3V

  • 制御モード: I2C

  • EEPROM: AT24C256C

  • I2Cアドレスは変更可能

  • 寸法: 25.43mm x 20.35mm

I2Cアドレス設定


Xadowストレージの2つのAT24C256は、共通の2線式バスを共有しています。各AT24C256には、スレーブアドレスと呼ばれる8ビットのハードウェアアドレスがあります。このスレーブアドレスは、A2、A1、およびA0のアドレス選択入力によって構成されます。A2、A1、およびA0ピンはデバイスアドレス入力であり、直接GNDまたはVCCに接続されます。これらのピンが浮遊状態の場合、A2、A1、およびA0ピンは内部的にGNDにプルダウンされます。

スレーブアドレス[A6 - A0] A2、A1、およびA0入力状態
A2 A1 A0
1010000(0x50)GND/浮遊GND/浮遊GND/浮遊
1010001(0x51) GND/浮遊 GND/浮遊 VCC
1010010(0x52) GND/浮遊 VCC GND/浮遊
1010011(0x53) GND/浮遊 VCC VCC
1010100(0x54) VCC GND/浮遊 GND/浮遊
1010101(デフォルト 0x55) VCC GND/浮遊 VCC
1010110(0x56) VCC VCC GND/浮遊
1010111(0x57) VCC VCC VCC

デフォルトモードでは、1つのAT24C256(U1)のI2Cアドレスは0x50で、もう1つのAT24C256(U2)のI2Cアドレスは0x51です(Xadowストレージを参照)。

デモンストレーション


Xadowストレージを使用すると、電源がオフになってもデータを永続的に保存できます。ここでは、ストレージにデータを書き込み、それを読み取るデモを示します。

ハードウェアのインストール:

注意: XadowストレージをXadowメインボードに接続する際には、接続方向に注意してください。接続方法は、1つのXadowモジュールの未充填コーナーを、別のモジュールの直角コーナーに接続することです(各Xadowモジュールの4つのコーナーを参照)。

デモコード:

#include <Wire.h> // I2Cライブラリ
void setup()
{
char somedata[] = "これはEEPROMからのデータです"; // 書き込むデータ
Wire.begin(); // 接続を初期化
Serial.begin(9600);
i2c_eeprom_write_page(0x51, 0, (byte *)somedata, sizeof(somedata)); // EEPROMに書き込み

delay(10); // 小さな遅延を追加

Serial.println("メモリに書き込みました");
}
void loop()
{
int addr=0; // 最初のアドレス
byte b = i2c_eeprom_read_byte(0x51, 0); // メモリの最初のアドレスにアクセス

while (b!=0)
{
Serial.print((char)b); // シリアルポートに内容を出力
addr++; // アドレスを増加
b = i2c_eeprom_read_byte(0x51, addr); // メモリのアドレスにアクセス
}
Serial.println(" ");
delay(2000);
}
void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data ) {
int rdata = data;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.write(rdata);
Wire.endTransmission();
}

// 注意: アドレスはページアドレスであり、6ビットの終端がラップアラウンドします
// また、データは約30バイトが最大です。Wireライブラリには32バイトのバッファがあります
void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length ) {
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddresspage >> 8)); // MSB
Wire.write((int)(eeaddresspage & 0xFF)); // LSB
byte c;
for ( c = 0; c < length; c++)
Wire.write(data[c]);
Wire.endTransmission();
}
byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) {
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
if (Wire.available()) rdata = Wire.read();
return rdata;
}
// 30または32バイト以上を一度に読み取らないようにしましょう!
void i2c_eeprom_read_buffer( int deviceaddress, unsigned int eeaddress, byte *buffer, int length ) {
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,length);
int c = 0;
for ( c = 0; c < length; c++ )
if (Wire.available()) buffer[c] = Wire.read();
}

回路図オンラインビューア

リソース


技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます!お客様が弊社製品をスムーズにご利用いただけるよう、さまざまなサポートを提供しております。異なる好みやニーズに対応するため、複数のコミュニケーションチャネルをご用意しています。

Loading Comments...