3.20.3 ADコンバーターのためのSPI / 非公式訳

pp.95-96

非公式和訳
3.20.3 ADコンバーターのためのSPI
 SPI (serial peripheral interface)のしくみについては巻末資料Fにまとめました。このセクション3.20.3では例としてADコンバーターのためのSPIを作ります。Maxim製のMAX1118は、2チャンネル、8ビットのADコンバーターです。図3.28aにピン排列を示します。この図には、SPIで一般に使われる信号名とMAX1118の端子名との対応についても列挙しました。動作電圧VDDは2.7 V~5.5 V、基準電圧は1 V~VDDです。アナログ入力の範囲は0 V (0b0000_0000)~VREF (0b1111_1111)です。
 今回の実験のための回路を図3.28bに示します。VREF=VDDとし、ポテンショメーターを使って手動で変化させるアナログ電圧を2番ピン (チャンネルCH0)に与えます。この回路はあとで実際にVHDLを使ってFPGAに実装します(例16.4および練習17.1)。
 MAX1118でのSPIのしくみを図3.28cに示します。clkがSPIの基準クロックです(図に200 ns以上と示したように最大5 MHz)。SSnをLoにすると、MAX1118が選択されて通信が始まります。この処理はSCLKがHiであるときに行われるので、SPIのモード3動作です(巻末資料Fの図F.2bを参照)。SSnを0にするとただちに、内部クロックによってAD変換が始まります。変換には約7.5 usかかります。そのあと、変換された8ビットがMISO端子から連続して取り出せます。
 今回の問題をクロック依存型ムーアマシンで表現した図を図3.29aに示します。idleステートでは、SSn、SCLKがともにHiであるため、MAX1118は停止しています。読み出し(rd)コマンドを受信するとconvertステートへ移行し、データ変換が正しく完了できるよう38クロックサイクル(fsclk=5 MHzとすると7.6 us)にわたってこのステートにとどまります。そのあとread_dataステートへ移行し、1バイトぶんのデータが取り出せるよう8クロックサイクルにわたってこのステートにとどまります。取り出したデータは、read_dataステートの下の囲みに示したようにローカルに保存するか、別の回路へ渡すかしなければなりません。最後にholdステートへ移行し、(rdがまだHiであった場合は)rdがLoになるまでこのステートにとどまってからidleステートへ戻ります。
 holdステートをなくしてrd信号をHiのままにすれば連続読み出しができます。
 もうひとつの方法は(略)