30前から

FPGAでいろいろ頑張ってみています

FPGAでSDカード内のWAVEファイルを再生する~その1

”SDカードの種類とモード”

SD,SDHC,SDXCの違い
SD種類 容量 ファイルシステム ファイルシステム規定   
SD(SC) ≦2048MB FAT12/FAT16 V1.01
SDHC 2048MB<,≦32768MB FAT32 V2.00
SDXC 32768MB<,≦2048GB exFAT V3.00



FAT種類と容量の関係

FATとは"File allocation Tabel"の略.
ファイルの保存位置を示した地図の役割を持つ、FATと呼ぶテーブルを持ったシステムの事.
この”地図”は"クラスタ"と呼ばれる単位で管理されていており、地図にはクラスタ毎のアドレスが書いてある.

FAT16とは"クラスタ"を16bitで管理すること.FAT32であれば32bitで管理している.

更に"クラスタ"とは,最小データ単位のセクタを持っている.一般的に1セクタ512byte.
(もっと多いシステムもある?)
1クラスタが持てるセクタ量は、変更できるが、それぞれのファイルシステムで、管理できるクラスタ数は決まってる。
その為、大容量の記憶媒体を使用する際は、適したファイルシステムを選択していないと使用できない領域を作ることになる.

また、1クラスタ単位でデータは管理されている為、小さなファイルを保存しても、1クラスタ分の容量し無駄を作ることになる.
いずれも適切なファイルシステムを選択することが大事.

○参考文献
File Allocation Table - Wikipedia
http://elm-chan.org/docs/fat.html
https://msdn.microsoft.com/en-us/windows/hardware/gg463080.aspx


SDモードとSPIモード

○SDモード:
MMCモードなどとも呼ばれる.
複数端子でデータのやり取りしており、ハードウェアの制約が増えるが高速動作が可能.
また、使用するにはライセンスが必要(個人以外?)
世間の家電等で耳にするClass10、Class4等の読み書き速度は、このSDモードを使用した場合の速度を指す.

○SPIモード
マイコン等でも良く利用されているSPI通信を利用し、SDカードからデータの読み書きをする方法.
SDモードとは異なり、ノンライセンスだったり、電子工作者には身近なSPIを利用することから、
ネット上にも情報が多数置いてある.

SDモードについては、自作組み込み等で使用されるケースも少なく、情報もSPIモードの解説に比べ少ない.
今回もSPIモードの使用を目標とする為、SDモードについては省略.


端子の配列を確認(SPIモードとSDモードでの違い)

f:id:hy30:20160430093857p:plain

ピン番号 MMCモード SPIモード
1 Data3 CS
2 CMD Din
3 Vss Vss
4 Vdd Vdd
5 CLK CLK
6 Vss Vss
7 Data0 Dout
8 Data1
9 Data2
時間があれば簡易版SD規格書を読み理解するのがベスト

SDカードの仕様は、パナソニック、サンディスク、東芝の三社が立ち上げた、
SDアソシエーションという団体が取りまとめている.
SPIモードで使用するまでの過程も、記載されているのこれを読むのがベストと思う.
https://www.sdcard.org/downloads/pls/index.html

”SPI通信”

SPIとは、Serial Peripheral Interface.
直訳のままで、周辺機器(ペリフェラル)をシリアルで通信する入出力方式を指す.
クロック/データ入力/データ出力と、CS(チップセレクタ)の4本の線で通信を行います.
複数の周辺機器と通信をする場合、クロック/クロック/データ入力/データ出力は共用でき、
CSで使用したい周辺機器を選択できる.

CSは周辺機器によってCS(カードセレクタ),SS(スレーブセレクタ)、
また、ホスト側からのデータ出力/周辺機器へのデータ入力はMOSI(マスターアウト・スレーブイン)、
ホスト側へのデータ入力/周辺機器からのデータ出力はMISO(マスターイン・スレーブアウト)と表現する.

MODE(CPOL,CPHA)について

SをLOWにすることで、通信が有効(アサート)になる.
そこにクロックのトリガでデータが送受信が行われる.

そのクロックのトリガをタイミングを表現するのに、
CPOL(クロック極性),CPHA(クロック位相)という言葉で表現されることがある.

CPOL:クロックのアイドル時のレベルを示している.CPOL=0であれば、
アイドル時がHIGH.CPOL=1であれば、アイドル時がLOW.
CPHA:CPHA=0であればクロックが0→1(立ち上がり),CPHA=1であればクロックが1→0(立下り)

SDカードをSPIで使用する際は基本的にMODE0(CPOL=0,CPHA=0).
MODE3(CPOL=1,CPHA=1)で動作するものもある??


○参考文献
SPI