あなたがメーカーであり、メモリを操作しなければならないいくつかのDIYプロジェクトを行っている場合、フラッシュ(スケッチとブートローダーが保存されている場所に不揮発性)など、Arduinoが統合するさまざまなメモリがどのように機能するかをすでに知っています。 SRAM(処理中にプログラム変数が残る高速で揮発性のメモリ)、および EEPROM (不揮発性であり、再起動情報を保存するために使用できます)。
さて、Arduinoに含まれているEEPROMに加えて、の外部チップを使用することもできます この種の記憶として もうXNUMXつのコンポーネント。 それらを理解することも、それらと相互作用してアクセス(書き込みおよび読み取り)または保存された情報の更新を生成することも複雑ではありません。 ここでは、これらのタイプの思い出を使い始めるために知っておく必要のあるすべてを見つけることができます...
EEPROMとは何ですか?
La EEPROM(電気的に消去可能でプログラム可能な赤のみのメモリ) これはROMメモリの一種です。つまり、電源が取り外されてもデータが永続的に保存される不揮発性メモリです。 これにより、RAM(ランダムアクセスメモリ)の反対側に配置され、電源が入っていないときにすべてのデータが失われます。
EEPROMの場合、ROMのようなメモリではなく、データが書き込まれ、変更できなくなります。 フラッシュのようなEEPROM、 変更されたことを認める 必要に応じて。 つまり、一部のデータを保存および消去して、別のデータを保存できます。
実際、その頭字語が示すように、それは 電気的に消去可能なメモリ (電気的に消去可能)再プログラミング用。 これは、EPROMのように消去可能な他のタイプのROMとは異なりますが、この場合、メモリセルの消去に電気は使用されず、代わりにチップ上にクォーツの「ウィンドウ」があり、UV光を投影できます。それは消去されました。
その特徴 EPROM それはそれらをやや不快にし、それらを消去するためにそれらの光線を投影しなければなりませんでした。 そして、最悪の場合、このタイプの放射線にさらされると、誤って消去される可能性があります。 EEPROMでは、より快適で安全な方法で、電圧を介してそれを行うことができます。
内部構造
EEPROMが機能するためには、非常に特殊なメモリセルが必要です。 これらはMOSタイプのトランジスタを使用して構築されていますが、従来のMOSFETと比較してフローティングゲートを備えています。 これらの新しいトランジスタは、 サモス、およびその通常の状態は遮断され、出力は常に論理1を提供します。
これらのEEPROMセルは無制限に読み取ることができますが、 それらを消去して再プログラムできる回数、他の多くの人に起こるように。 これはフラッシュにも起こります。そのため、SSDハードドライブやペンドライブなどの耐久性について多くの話題がありました。
SAMOSの場合、この制限は 100.000回と1.000.000回。 その後、彼らは失敗します。 ちなみに、偉大な人の一人である古くからの知人によって作成されたいくつかの構造:他の重要な記憶や半導体構造も作成した東芝の舛岡富士雄博士(1984)...しかし、最初のチップは市場は1988年からのIntelのNORタイプのEEPROMでした。
さらに、このタイプのメモリは通常、次の方法でCPUまたはコントローラにリンクされていることを知っておく必要があります。 バス SPIのようなプロトコルで、 I2C、など。 MCU(マイクロコントローラー)の場合、一部のDSPのように、通常は内部に統合されて、より高速になります。
上の画像に見られるように、 SAMOSトランジスタ メモリセルを形成するものは、その場合はペアでグループ化されます。 一部のトランジスタのゲートに接続されたラインの0つは、アクセス(読み取りと書き込み)のためにそのラインをマークまたは信号で送るための選択ラインとして機能し、もう1つは情報ビット(XNUMXまたはXNUMX)を格納するラインになります。
トランジスタは、必要なワード長(4ビット、8ビット、16ビットなど)と同じ数のワードを形成するように配置されます。 capacidad EEPROMが必要です(例:64ビットのワード長があり、16行= 1024ビット、つまり1kbの場合があります)。
EERPOMはどのように機能しますか?
あなたが側面で見ることができるように、実行するために さまざまなタスク、ゲート、ソース、ドレインの電圧は具体的なものでなければなりません。
- 20vでドアと20vで排水 =目的のビットを格納するためのメモリセルのプログラミング(書き込み)。
- 0vでドアと20vで排水 =格納されているビットをクリアして、別の値で再プログラムできるようにします。
- 5vでゲートし、5vでドレイン= 保存されたビットを読み取ります。 ゲート電圧は書き込み電圧よりも低いため、保存されている値は変更されません。 ドレイン電圧についても同じことが起こり、低いほど、保存されているビットは消去されません。
結論として、EEPROMはいくつかを使用します 電圧 消去と書き込みには「高」、読み取りには低電圧を使用...
EEPROMを購入して使用する
STマイクロエレクトロニクスフランスのマイクロエレクトロニクスメーカーである、はこのタイプのEEPROMチップのナンバーワンですが、マイクロチップなど他の多くのメーカーもあります。 これらのチップは通常かなり安いです。
あなたがすることにした場合 これらのチップのXNUMXつを使用し、 メーカーとモデルを確認して、そのモデルを探す必要があります データシート 製造元の推奨事項はそれぞれ異なる場合があるため、すべてを確認してください。 たとえば、それらはそれが動作する電圧を指定します、 ピン配置、など。 したがって、プロジェクトを適切に構成できます。
サイズとモデルに応じて、それは多かれ少なかれあるかもしれません パインズ。 しかし、あなたにアイデアを与えるために、典型的な24LC512 EEPROMICチップは以下で構成することができます:
- 構成で使用されるピン1(A0)、2(A1)、および3(A3)は、選択ピンです。
- ピン4(Vss / GND)はグランドに接続されています。
- ピン5(SDA)、I2C通信用のシリアルデータ用。
- ピン6(SCL)、I2Cのクロック用。
- ピン7(WP)、書き込み保護または書き込み保護。 GNDに接続すると書き込み可能になります。 Vccに接続すると、無効になります。
- 電源に接続されたピン8(Vcc)。
として 技術仕様 このチップの:
- 512K(64×8)
- 書き込み用の128バイトのバッファ
- 動作電圧:1.8v〜5.5v
- 読み取り電流:40uA
- 通信バス:I2C
- 書き込みサイクル:5ms
- 時計の互換性:100-400Khz
- 耐久性:10.000.000サイクル
- 最大8台のデバイスをカスケード接続できます
- パッケージング:8ピンDIP、SOIJ、SOICおよびTSSOP。
ドンデcomprar
へ EEPROMチップを購入する、次の推奨事項を確認できます。
- 95040Kb ST4シリアルSPI
- 製品が見つかりません。
- 製品が見つかりません。
- 製品が見つかりません。
- ST24LC256シリアルI2C256Kb
- マイクロチップ24LC256-i / snシリアルI2C256Kb
ArduinoEEPROMの使用
EEPROMの使用を開始したい場合は、ボード上のEEPROMを試すこともできます Arduinoの。 論理レベルおよびプログラミングレベルでどのように機能するかを理解するために、簡単な方法でプログラムすることができます。
変数を保存する例
//Almacenar un valor en la EEPROM #include <EEPROM.h> float sensorValue; int eepromaddress = 0; //Función para simular lectura de un sensor o pin float ReadSensor() { return 10.0f; } void setup() { } void loop() { sensorValue = ReadSensor(); //Lectura simulada del valor EEPROM.put( eepromaddress, sensorValue ); //Escritura del valor en la EEPROM eepromaddress += sizeof(float); //Apuntar a la siguiente posición a escribir if(eepromaddress >= EEPROM.length()) eepromaddress = 0; //Comprueba que no existe desbordamiento delay(30000); //Espera 30s }
EEPROMからデータを読み取る例
//Leer una variable de coma flotante #include <EEPROM.h> struct MyStruct{ float field1; byte field2; char name[10]; }; void setup(){ float f; int eepromaddress = 0; //La lectura comienza desde la dirección 0 de la EEPROM EEPROM.get( eepromaddress, f ); Serial.print( "Dato leído: " ); Serial.println( f, 3 ); eepromaddress += sizeof(float); } void loop() { }
値を更新する例、スケジュールを変更する
//Actualizar valor de la EEPROM escribiendo el dato entrante por la A0 #include <EEPROM.h> int eepromaddress = 0; void setup() { } void loop() { int val = analogRead(0) / 4; EEPROM.update(eepromaddress, val); eepromaddress += sizeof(int); if(address == EEPROM.length()) eepromaddress = 0; delay(10000); //Espera de 10 segundos }
詳しくは - 無料のArduinoコース