PSoCで外部EEPROMを使う(I2C接続)
PSoCで外部EEPROMを使う場合、どのようにしたらよいのかメモしておきます。
今回はI2C接続のものを使いました。
さて、今回は使うデバイスはシリアルI2C EEPROM 24C256(マイクロチップ)です。
サイズは小さいですが、1個 160円だったのでこれにしました。
(最初はアトメル製 256kビットEEPROM 24C256にしようかと思ったのですが、
秋月の店員さんが間違えて、こちらになってしまいました(苦笑))
I2Cで読み出しや書き込みをしたいので、
PSoCのユーザモジュール"I2Cm"を使いました。

↑PSoCのユーザモジュール"I2Cm"
また、接続は次の図の通りにしました。
SDAはPSoC側のP1[5]、SCLはP1[7]に接続しました。
(PSoCはCY8C27443-28PXIを使用)

↑EEPROMの接続(周辺部分のみ)
I2CmとEEPROMのデータシートを見ながらプログラムを作成していきます。
以下はEEPROMのデータシートの一部に色をつけ、今回のプログラムとの対応関係をわかりやすくした図です。なお、今回は簡単のためエラーチェックは省きました。
今回、複数のEEPROMは使わないのでA0〜A2はGNDに落としました。
(同じバス上に複数のEEPROMをつけたい場合はA0〜A2の接続方法を変えることにより区別します)
よってChip Select Bitsの部分は000となります。
そして、Control Codeの部分は固定になっています。
したがって、以下の図を見ればわかるように、APIの
BYTE I2Cm_fSendStart( BYTE bSlaveAddr, BYTE fRW );
のbSlaveAddr部分は0x50となります。

↑Slave Addressの決め方(図はEEPROMのデータシートより)
さて、実際のデータの読み書きはどうしたらよいでしょう。
EEPROMのデータシートを見てみましょう。
いろいろ書いてありますが、特に下の図の部分が重要です。
すでにI2CmのAPIに必要なものはそろっているので、おおざっぱにいえば以下のようにコードを書けばOKです。
図の同じ色の部分がそれぞれ対応しています。
addressには0〜0x7FFFまでの値を指定できます。
![]()
↑データの書き方と読み方(1byte単位。図はEEPROMのデータシートより)
作成したプロジェクトファイルをこちらにおいておきます。
これは
1.EEPROMのアドレス0x10CAの現在のデータを読み込んでLCDに表示
2.EEPROMのアドレス0x10CAにデータ0xABを書き込む
3.EEPROMのアドレス0x10CAの現在のデータを読み込むに表示
という単純なものです。
(LCDはポート2に接続しており、表示にはユーザモジュール"LCD"を使用しています。)
※EEPROMに書き込む際は少し時間がかかるので適当な長さのディレイを入れてあげてください。
※PSoCに接続する際、ポートが違う場合は設定を各自適当に変更してください。
応援お願いします(人気blogランキングへ)