バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのインターフェース仕様について簡単に説明していく。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
SDカードのインターフェース仕様
前回も言ったが、SDカードのインターフェース仕様は2種類
- SPIモード
- SDモード
SDカードがSPIで通信できるのは知ってるけど、
普通はSDモードって形で通信するってことかな?
そうだね。
SPIモードってのはSDカードの前身である、MMC(Multi Media Card)の仕様を踏襲したものになる。
マルチメディアカード(Multi Media Card)とは、メモリーカードの規格である。MMCと略される。 サンディスクとシーメンス(インフィニオン・テクノロジーズ)が共同開発し、1997年11月に発表した規格が元となって1998年10月に設立されたMultiMediaCard Associationが規格の開発維持を行っている。サイズは 32mm×24mm×1.4mm、重さは2g未満である。 インタフェースは7ピン・シリアルで、クロックは最大20Mbps、書き込み速度は最大2MB/s程である。 Version 4.2まではSPIモードがあり、低速で良ければSPIバスでの複数デバイスの接続を簡単にできた。
Wikipediaより
MMC・・・そんなものがあったのか・・・。
SDカードのインターフェース仕様のSPIモード
SPIはMaster-Slave構成の通信で、
今回のSDカードはSPIに於いてはSlave側になる。
そして、SPIのピンは以下4種。
- SCK(Serial Clock):Master出力
- MISO(Master In Slave Out):Master出力
- MOSI(Master Out Slave In):Master入力
- SS(Slave Select):Master出力
なんか絵で描いてもらえると・・・。
絵で描くとこうだな。
SPI信号詳細(SS:Slave Select)
うーん、察する、MISOでデータ送って、MOSIでデータを受けるって感じかな?
そうだね。
SCKとSSの役割はどうなるの?
SSは有効なSlave選択用の信号で、これがLowアクティブだとそのSlaveと通信可能になる。
Lowアクティブ?
うん。
信号がHighではなく、Lowの時にEnableとする信号だね。
何故そんなことに?
Highで良くない?
まぁ現在に於いてはLowアクティブでもHighアクティブでもどっちでも良いのだろうけど、
トランジスタベース回路のTTL(Transistor-transistor logic)の時代だと、
オープンコレクタという信号接続が一般的で、
オープンコレクタはハイインピーダンス(切断)とHighは同義だったんだよねー。
というわけで意図的に信号制御が確定するのはLowなんで、
デバイスの有効化は暗黙的にLowアクティブが主流になった。
って経緯だと思うよ。
SPI信号詳細(SCLK:Serial Clock)
SCLKは何?
SCLKはシリアル通信の同期用信号だな。
シリアル通信の同期用?
あれ?ボーレートとか決まってたらそういうの要らないんじゃない?
んー?
もしかしてUARTのこと言ってる?
UART (Universal Asynchronous Receiver/Transmitter, ユーアート) は、調歩同期方式によるシリアル信号をパラレル信号に変換したり、その逆方向の変換を行うための集積回路である。本機能のみがパッケージングされたICで供給されるものと、マイクロプロセッサのペリフェラルの一部として内蔵されるものとがある。マキシムのMAX232のような、RS-232C規格に準拠する信号レベルに変換するICと組み合わせて、外部機器とのインタフェースとして利用されるのが一般的である。UARTに、同期方式のシリアル信号を変換するための回路を追加したものを、USART (Universal Synchronous Asynchronous Receiver/Transmitter) と呼ぶ。
Wikipediaより
そう。これこれ。
まぁシリアル通信と言うとUARTのような調歩同期が代表出来ではあるけど、
基板上のデバイス通信だと、SPIのような同期通信が主流になるんだよ。
それまたなんで?
データ信号と、それを同期するクロックを同時に送ると回線インピーダンスの影響でどちらかが遅延することがある。
異なる装置間だとそれが発生するんで調歩同期を使うことになるんだけど、
基板内ではそれは起きにくい。
よって、SCLKのような同期用信号を送って高速なシリアル通信をさせる。
ちなみにどの程度の速度差があるの?
まぁ使用するマイコンにもよるけど、
UARTの場合は115.2[Kbps]に対して
SPIは10~50[Mbps]くらいかな。
うわ!全然速度違うじゃん!!
と言うわけで装置間通信ではない、基板マウントのデバイスと通信する場合は
同期式シリアル通信が用いられる。
まとめ
まとめだよ。
- SDカードのインターフェース仕様は2種類。
- SPIモード。
- SDモード。
- SPIはSCK、MISO、MOSI、SSの4種の信号線を使う。
- SSはLowアクティブ。
- LowアクティブはTTL時代のオープンコレクタのHigh、HZの区別が付きにくい時代の名残。
- SSはLowアクティブ。
- 調歩同期は装置間通信、同期シリアルは装置内通信で使われる。
- 同期シリアルの方が圧倒的通信速度が速い。
バックナンバーはこちら。
コメント