Renesas Synergy™

FAQ 1006544 : CSIによるSPIメモリの制御(78K0/Kx2他)

[はじめに]
SPIはモトローラ社(現フリースケール・セミコンダクタ社)が提唱したマスタ/スレイブ方式のインタフェースで、基本的なデータの転送は2本のデータ(入力と出力)及びクロックの3本の信号を用いて行なうクロック同期式のシリアル通信方式です。データは8ビットの固定長でやりとりされます。基本的にこの部分は78K0シリーズ他に搭載されたシリアル・インタフェース(CSI)と互換性があります。SPIでは、これ以外にチップ・セレクトによりデバイスを選択する機能がサポートされています。

[EEPROMとの接続]
SPIインタフェースをもつEEPROMとの接続例は以下のようになります。




EEPROMに対するチップ・セレクト信号はポートを用いて出力します。その他の信号は3線式シリアルの信号をそのまま使用します。なお、EEPROMにはこれ以外にステータス・レジスタへの書き込みを禁止するためのライト・プロテクト(WP)信号や、デバイスを選択中に動作を停止させるためのホールド(HOLD)信号があるデバイスもあります。ここではこれらの信号は使用しないので電源に接続しておきます。


[ステータス・レジスタ]
EEPROMはデバイスの状態を示すためのステータス・レジスタを内蔵しています。ビットの意味は以下の通りです。詳細は実際に使用するEEPROMのマニュアル等を参照してください。

ビット0:書き込み中かどうかを示すビット。1なら書き込み中で新たなアクセスはできない。0ならアクセス可能。

ビット1:書き込み許可ビット。後述のコマンドにより操作し、1なら書き込み可能を、0なら書き込み禁止。

ビット2,3:ブロックごとの書き込み禁止ビット。個々のデバイスで異なる。00であれば、全てのデータ領域に書き込みは可能(デバイスによっては3ビット以上のものもあるようです)。

ビット7:ステータス・レジスタへの書き込み禁止ビット。このビットが1でWP端子がロウ・レベルならステータス・レジスタへの書き込みは禁止される(デバイスによってはこの機能がないものもあるようです)。


[EEPROMのコマンド]
EEPROMにはいくつかのコマンドが定義されており、最初にこれを用いて動作を指定する必要があります。コマンドの詳細は個々のデバイスのマニュアルを参照していただくとして、簡単に説明します。

コード 名 称 動 作
0000 0110 WREN 書き込み許可ビットをセットして書き込み可能にする
0000 0100 WRDI 書き込み許可ビットをクリアして書き込み禁止状態にする
0000 0101 RDSR ステータス・レジスタの読み出し
0000 0001 WRSR ステータス・レジスタへの書き込み
0000 x011 READ データの読み出し
0000 x010 WRITE データの書き込み

 

WREN:電源投入時には書き込み禁止状態になっているので、書き込みを行なうにはこのコマンドを発行します。

WRDI:デバイスへの書き込みを禁止するためのコマンドです。このコマンドを発行すると、データ及びステータス・レジスタへの書き込みができなくなります。

RDSR:ステータス・レジスタの読み出しを行ないます。コマンド発行の次のクロックからステータス・レジスタの内容がMSBから順に出力します。

WRSR:ステータス・レジスタへの書き込みを行ないます。コマンド発行の次のクロックからステータス・レジスタへ書き込むデータをMSBから順に入力します。

READ:EEPROMからデータを読み出します。コマンドに続いて、1バイトまたはメモリの容量によっては2バイトのアドレスを転送する必要があります。その後の転送クロックで、指定されたアドレスの内容を出力します。CSをハイ・レベルにすることで読み出しは完了となります。コマンドのビット3はアドレスが9ビット必要な場合のアドレスとして使用できます。

WRITE:EEPROMへデータを書き込みます。コマンドに続いて、1バイトまたはメモリの容量によっては2バイトのアドレスを転送する必要があります。その後の転送クロックで、指定されたアドレスへの書き込みデータを転送します。転送が完了してCSをハイ・レベルにすることで、実際の書き込みを行ないます。実際に書き込んでいる最中には、ステータス・レジスタのビット0が1となります。このビットが0になるまではステータス・レジスタのリード以外のコマンドは発行しない方がいいでしょう。


[EEPROMの制御方法]
EEPROMへのアクセスは全てコマンドから始まります。



チップ・セレクト信号(CS)をロウ・レベルにすることで、EEPROMが選択され、最初に転送される内容がコマンドとなります。上記の6つのコマンドを用いて、EEPROMへのアクセス制御を行ないます。書き込みの場合には、アクセス制御が完了したら、CSをハイ・レベルにすることで、EEPROMはコマンドで指定された書き込みを実行します。ステータス・レジスタはいつでも読み出すことができますので、ステータス・レジスタを読み出すことで、書き込みが完了したかどうかなど、EEPROMの状態を確認できます。

[78K0/Kx2での制御モード]
EEPROMとのシリアル通信は2.7V以上の電源電圧であれば、シリアル・クロックは5MHzまでになります。そこで、78K0/Kx2を高速内蔵発振器の8MHzで動作させ、CSI10のクロックにその半分の4MHzを使用することにします。
SPIではデータとクロック(SCK)の位相の関係で4つのモードがありますが、モード0と3の2つのモードに対応したEEPROMを対象とします。この2つのモードは共に、SCKの立下りでデータを出力し、SCKの立ち上がりでデータを入力するものです。
EEPROMのアクセス・タイミング例を以下に示します。



そこで、78K0/Kx2のCSIの転送タイプ1を使用します。これは、従来の3線式シリアル(SIO)と同じです。この場合、CSICI10には00(初期値と同じ)を設定して使用します。
CSIM10はMSBファーストの送受信モードに設定して使用します。



CSI10を用いて接続する場合の接続例を示します。CSI10ではP10~12の端子を使用するので、CS信号用に連続したP13を使用します。(ここではEEPROMを1個接続していますが、2個目を接続する場合にはP14、3個目を接続する場合にはP15をそれぞれCS信号に使用してください。)

具体的な制御プログラムについては「FAQ 1006546 : 78K0/Kx2のCSIによるSPI・EEPROMの制御プログラム例」を参照してください。

他にご質問がございましたら、リクエストを送信してください