マイコンの基礎 - EEPROM
概要
EEPROMのデータアクセス方式は、SPI、I2C、マイクロワイヤ、1-Wire等があるが、
マイコンの周辺機能としてSPIとI2Cが搭載されている製品が多いため、この2種類がよく使用されている。
ここでは、STTマイクロ社のEEPROMとSTM8Lシリーズのマイコンとの接続を例に記載する。
I2Cは、プルアップ抵抗の双方向NMOSオープンドレインの信号線が2本のみ存在する。
SPIの信号線はSCK、MISO、MOSI、SSの4本で構成される。
下図に、I2Cをバス規格として使用しているM24xxxシリーズとM95xxxシリーズを示す。
なお、端子名とSPIの信号名が異なるため、信号線にSPIの信号名を記述している。
I2CとSPIのいずれも、基本的な通信制御はマイコンのハードウェアが行うが、ファームウェアも必要である。
ファームウェアの詳細は、各マイコンのマニュアルに記載されているため、マニュアルの説明にしたがうこと。
マイコンとEEPROMのインタフェース
マイコンとEEPROMのデータアクセス方式は、シリアルバス方法とパラレルバス方式の2種類がある。
一般的には、シリアルバス方式が使用されている。
- パラレルバス方式
- データ信号に8ビット、アドレス信号に数ビット(メモリ容量に依存)等の多数の信号線が必要である。
- シリアルバス方式
- よく使用されているバス規格として、SPI、I2C、マイクロワイヤ、1-Wire等がある。
- ほとんどのマイコンにはSPI、I2Cが搭載されているため、インタフェースには、この2つのいずれかが使用されている。
送受信を行う信号の種類は、アドレス、データ、オペコードである。
オペコードの種類は、書き込み許可 / 不許可、レジスタの読み込み / 書き込み、データの読み込み / 書き込み等であり、各EEPROMでコードが決まっている。
ユーザは、これらの信号をマイコンのファームウェアで制御する。
I2Cの場合
I2Cとは、フィリップス社が開発した通信プロトコルのシリアルバスである。
各ノードにはアドレスが割り当てられており、7ビットのアドレス(128種類)で指定する。
16個の予約アドレスがあるので、これらを除いた最大112個のノードを1つのバス上に接続することができる。
一般的に、通信プロトコルはフィリップス社のI2Cに準拠しているが、各マイコンで使用方法が若干異なる。
ここでは、例として、STマイクロ社のSTM8LシリーズのI2C機能を記載する。
下図に、STM8LシリーズにおけるI2Cの通信の流れを示す。
まず、マスター側がクロック信号(SCL)を生成する。
データ転送は、常にスタートコンディションで始まり、ストップコンディションで終わる。
スタートコンディションとストップコンディションは、マスター側のファームウェアによって生成される。
マイコンがEEPROMにアクセスする場合、マイコンがマスター側になる。
スレーブモードでは、自己アドレスと同報(General Call)アドレスを認識できる。
データおよびアドレスは、MSBファーストの8ビット(1バイト)として転送される。
スタートコンディションの後に続く最初のバイトにアドレスが含まれており、アドレスは、常にマスターから送信される。
8クロックサイクルのバイト転送後、9番目のクロックパルスが続く。
その間に、受信側は送信側に確認応答ビット(ACK)を送信する必要がある。
下図に、マイコン内部のI2Cモジュールの構造を記載する。(SDA : データ信号、SCL : クロック)
内部にデータシフトレジスタを持ち、データを1ビットずつシフトして出力または入力する。
ユーザは、送受信用データにデータレジスタを介してアクセスする。
I2Cモジュールには、アドレスやPEC値を確認するための比較器が存在する。
PECとは、パケットエラーチェックのことであり、データが正常に通信されたかどうかを確認するための付加情報である。
通信速度はSCLの周波数で決まり、標準モードは100[kbps]であるが、STM8Lシリーズには高速モードがあるため、400[kbps]の通信ができる。
転送シーケンスは、ユーザがファームウェアで制御する必要がある。
STM8Lシリーズでは、下図に示すようなシーケンスの説明図がマニュアルにあるので、
ユーザはマニュアルの手順にしたがって、各EEPROMで規定されたアドレス、データ、オペコードを通信するファームウェアを設計する。
SPIの場合
SPIは、モトローラ(現フリースケール社)が提唱した通信規格である。
物理的な動作は、クロック同期式シリアル通信と同じである。
4つの信号、クロック(SCLK)、マスター出力 / スレーブ入力(MOSI)、マスター入力 / スレーブ出力(MISO)、スレーブセレクト(SS)で通信を行う。
- SCK
- 同期クロックでマスターデバイスから出力される。
- MOSIとMISO
- SCKに同期したデータ信号である。
- SS信号
- スレーブ認識信号である。
- マスターの場合はLowを出力する。スレーブの場合は入力で受ける。信号がLowの場合、自分が選択されたと認識する。
- 所謂、チップセレクト(CS)のような信号である。
SPIの通信プロトコルは、一般的に、モトローラのSPIに準拠しているが、各マイコンにより使用方法が若干異なる。
下図に、STM8Lシリーズを使用したSPI機能を記載する。
クロックの位相とデータをラッチするタイミングは、クロック極性(CPOL)とクロック位相(CPHA)の2つのパラメータで指定する。(下図の上)
内部にデータシフトレジスタを持ち、このデータを1ビットずつシフトして出力または入力する。
送信データはTXバッファへ格納して、受信データはRXバッファへ格納する。
マイコンは、RXバッファとTXバッファを介してデータの送受信を行う。
転送速度は、SCKの周波数によって決まる。
ボーレート発生器を持っているため、ユーザが任意の値に設定することができる。
最大周波数は、STM8Lシリーズの場合は8[MHz]であるが、各マイコンにより仕様が異なるため、詳細はデータシートを参照すること。
基本構造は、クロック同期式シリアル通信と同様に、I2Cのような転送シーケンスは必要ない。
1クロックにつき1ビットのデータを送信して、計1バイトを送信する。
ユーザはクロック同期式シリアル通信と同様に、各EEPROMで規定されたアドレス、データ、
オペコード(書き込み許可 / 不許可、レジスタの読み込み / 書き込み、データの読み込み / 書き込み等)を通信する。
※参考情報
EEPROMとマイコンの接続方法の詳細は、以下の情報を参考にすること。
- M24LR-DISCOVERY
- EEPROM(M24LR)とマイコン(STM8L)がPCBに実装されており、EEPROMとマイコンの通信をI2Cで行うことができる。
- 回路図およびファームウェアの詳細は、公式Webサイトから無料でダウンロードできる。
- アプリケーションノートAN2014(PDFファイル)
- STマイクロ社のEEPROMと一般的なマイコンとの接続方法(I2C、SPI、マイクロワイヤ)の詳細が記載されている。