特集 SPI 通信コアを実装 第5章 入門 FPGA 評価ボード DE0 と MicroBoard で試せる! SD メモリーカードをつなげて FPGA でお手軽ストレージ 横溝 憲治 Kenji Yokomizo 高速大容量ストレージとしては SATA 接続のハード・ディスクが有効ですが,そこまでの容量は必要としない 用途も多いでしょう.容量は数百 M バイト程度でかまわないので,より手軽に接続制御できるストレージとして, デジタルカメラなどでおなじみの SD カードがあります.ここでは OpenCores で公開されている SPI 通信を使った SD メモリーカード用 IP コアを使って,FPGA から SD メモリーカードへのアクセス方法を紹介します. 1.SD カードの基礎知識 ● 使用するのは SD 規格のカード SD メモリーカードは,カードの容量の増大に合わ せて SD,SDHC,SDXC と規格が用意されてきまし た.アクセス方法は規格によって少し違っています. 今回の利用する IP コアは SD 規格が対象で,SDHC と SDXC 規格のカードは対象外になります. SD メモリーカードの通信方式にはパラレル転送 モードと SPI 通信を使う SPI モードが用意されていま す.前者の利用にはライセンスが必要なので,ライセ ンスが不要の後者を選択することになります.カード の形状は SD,miniSD,microSD がありますが,アク セス方法はどの形状でも同じです. ● SPI 通信の概要 SPI 通信は SCLK(Serial Clock),MISO(Master In Slave Out),MOSI(Master Out Slave In),SS(Slave Select)の 4 本の信号を使ったシリアル通信です.SD メ モ リ ー カ ー ド のSPI モ ー ド 以 外 に, シ リ ア ル EEPROM や A-D/D-A コンバータなどの通信に広く採 用されています. SD メモリーカード用 IP コアを使う場合は IP コアが 3.3V マスタ FPGA IPコア spiCS_n spiClkOut spiDataOut spiDataIn 図1 SS_n SCLK MOSI MISO スレーブ SDメモリー カード DATA3 CLK CMD DATA0 SD メモリーカードの配線接続 SD メモリーカードの SS 信号は負論理(0 でセレクト)なのでサンプル回 路では信号名を SS_n としている. 56 第5章 SPI 通信をコントロールしてくれるので,ここでは詳 細には触れず概略のみ紹介します.図 1 は SPI モード で SD メモリーカードにアクセスする場合の配線で す.FPGA がマスタで,SD メモリーカードがスレー ブになります.SCLK はクロックでマスタが出力しま す.MOSI は マ ス タ か ら の 送 信 デ ー タ,MISO は ス レーブからの送信データです.SS 信号はスレーブデ バイスのセレクト信号でマスタが出力します.SD メ モリーカードの SS 信号は負論理なので今回のサンプ ル回路では信号名を SS_n としてあります. ● SPI 通信モード SPI 通信は待機時の SCLK の値とデータ・ラッチの タイミングの組み合わせで四つのモード(表 1)があり ます.SD メモリーカードの SPI 通信は MODE0 で動 作します.図 2 は SD メモリーカードの SPI 通信の波 形です.SS_n が 1 から 0 に変化するとアクセスが開始 します.MODE0 なので送信データが先行して送信さ れ,その後にクロックが立ち上がり,受信側でデータ をラッチします.その後にクロックが立ち下がったら 送信データの次のビットを出力します.クロックが停 止して SS_n が 1 になると転送終了です. ● SPI コマンド SD メモリーカードのコントロールは SPI コマンド を使用します.表 2 は IP コアで使用する SPI コマンド で,図 3 は SPI コマンドとレスポンスのフォーマット です.SPI コマンドは 6 バイトで構成されています.1 バイト目の先頭 2 ビットはスタート・コードで 01 が入 ります.残り 6 ビットはコマンド・インデックスでコ マンドが指定されます.2 〜 5 バイト目にはコマンド の引数,6 バイト目は CRC 演算結果が 7 ビット入り, 最後に終了ビットとして 1 を 1 ビット送信します. SD メモリーカードは SPI コマンドを受信するとコ マンド・レスポンスを返信します.IP コアを利用す る場合は,IP コアが転送種類に応じて SPI コマンドを 自動で送信してくれるので,コマンドの内容を指定す SD メモリーカードをつなげて FPGA でお手軽ストレージ
© Copyright 2024