バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのインターフェース仕様のSPIモードについて簡単に説明していく。
登場人物
博識フクロウのフクさん

イラスト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
SPI通信について

で、同期シリアルって結局どんな感じで通信するの?
SCLKが同期用の信号って話はわかったけど。

SCLKの立ち上がりでサンプリングするイメージだね。

サンプリング?

まぁデータとして取り込むってことなんだけど、
絵で描くとこんなイメージだな。


あー!
なるほど。
これがSCLKの立ち上がりでサンプリングか。
このSCLKと同期してサンプリングするから同期シリアルってことになるのか。

そうそう。

これはMasterからSlaveへの送信のイメージだけど、
SlaveからMasterへデータ送る場合はSCLKの向きは逆になるの?

いや。
SCLKは必ずMaster側からの出力になる。
SlaveはMasterのSCLKに合わせてデータを出力する形になるね。
SPIのSlave側の振る舞い

SlaveからするといつSCLKが来るか分からないのにデータを用意できるもんなの?

そこはSlave側の仕様で対応できるSCLKが規定されてるね。
Slaveとしてはその規定したSCLKの速度に対応できるよう処理するように作られる。

それもあるんだけど、最初のbitとか準備しようが無いような気がしたんだけど。

あー。なるほど。
そこはSSの信号で判断していると思うよ。

あー!
そっか!
最初にSSがLowに落ちるからそこのタイミングで最初のbitの準備を始めれば良いのか。

そうそう。
SSをLowにしておけばOKなように見えるんだけど、
実はSSの立下りエッジで通信I/Fを初期化するような仕組みしているSlaveも多いんで、SSは通信が終わったらHighにしておいた方が安全だね。

意外とうまく作ってるんだねー。
SDカードのSPIモード

で、SDカードとSPI通信するのはどうするのかな?

そこら辺は、具体的なSDカードのコマンドの時に説明しようかなーって思ってる。
SDカードのピン配置の兼ね合いもあるしねー。

確かにSPIモードと別にSDモードってのがあるんだっけ?
投げるコマンドが違うとか?

うーん、若干手順は異なるけど、
コマンド仕様そのものはおおよそ一緒だね。

じゃー、先にSDモードってインターフェースの話だね。
まとめ

まとめだよ。
- SPI通信についての説明をした。
- SCLKの立ち上がりでサンプリング。
- よって、同期シリアルと呼ばれる。
- SlaveがわはSSの立下りで処理の準備をしている場合があるので、Lowのままにせず一旦Highにしておいた方が安全。
- SDのSPIモードとSDモードではコマンド仕様はほぼ一緒。
バックナンバーはこちら。
コメント