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