今回は筆者が持っているラズベリーパイとUSB-SDデバイスをつなげて「SDカードにアクセスするコマンド・波形を解析してみたが…」を紹介します
簡単にアナライザでSDカードでの波形を確認するまでの手順を紹介しています。
※ただし結果はアナライザのサンプリングが足りずに最後まで解析できなかった記事です
失敗の教訓という意味で「自分でSDカード・SDIO信号を色々解析してみたい!」という方におススメな記事となっています
過去記事の「I2CのACKとNACKの波形を見てみる」でI2Cでも同様に解析しましたので、I2Cのことも調べたいという方はこちらからどうぞ
SDカードを解析できる環境を用意する(準備編)
まずはSDカードを解析する環境を用意していきます。
本来ラズベリーパイにはMicroSDかSDカードが挿せるようになっていますが、2個目のMicroSDかSDカードを直接動かせる信号は用意されていません。
※SPIモードでは可能ですが、通常のデータ線4本使うSDモードは用意されていません
※筆者のは古い型のためSDのIFとなっています
「ラズベリーパイでSDカードの波形を何としても測定したい・・・」という方は1つめのMicroSD,SDのIF箇所にはんだづけするのも手段としてはありますが、正直あまりしたくないんですよね…。
あと最新のMicroSDだとピッチが狭く、未経験の方は「はんだ付け」が難しいかと思います
そのため今回は100均のUSB-SDカードリーダを使います!(最近の100均はすごいです。USB-SDカードリーダまで100円で売っています。)
これならピッチ幅が広いSD_IFがありますし、はんだ付け失敗しても安心です。
いざ開封してみても形状はシンプルながらも、SD,MicroSD,MSなど様々なカードに対応してます
今回はSD_IFの波形を見るための改造をしたいですので分解します。
(プラスチックのカバー外すだけで簡単に分解できました。)
今回必要なのは基板です。基板にジャンパー接続して波形・タイミング測定できるようにします。
表面を見ますとSDカードコネクタ箇所があり、ピンも外に出ていますので比較的に楽にはんだ付けが可能です
ちなみに裏面にUSB-SD_IF変換ICがありました。ただし表面モールドされていましたので何処のICかは不明でした。
次の章からは波形測定できるように基板を改造していきます
SDカードを解析できる環境を用意する(改造編)
まずはSDの波形を測定できるように信号線をジャンパー接続していきます。
「データ_D0~D3」「コマンド_CMD」「クロック_CLK」と最後に「グランド_GND」をジャンパー接続してあげましょう
「半田ごて」と「はんだ」と「ジャンパー線」を用意します。SDの波形を測定できるように信号線をジャンパー接続していきます
筆者のはんだごてセットは下記の入門セットですが、これぐらいのジャンパー接続ならば特に不自由なく「はんだづけ」が可能です。
ジャンパー線に関しては、筆者は大量にあるブレッドボード用のジャンパーワイヤーをカットして繋げていきましたが特に指定はありません。
ワイヤーストリッパーで被膜を剥がしてあげましょう。簡単に剥がせます。
少し前の記事でワイヤーストリッパーの記事も書きましたのでよろしければこちらもご確認ください
はんだづけ・改造した後は下記のようになります。はんだ付けが終わったらSDカードを挿します
最後にジャンパー線をブレッドボードに接続すれば完了です。これで無事SDカードから波形測定できるように改造が終了しました
アナライザを用意する
SDの波形を見たいと思いますが、今回は「データ_D0~D3」「コマンド_CMD」「クロック_CLK」を見ますのでアナライザを使って確認していきます。
最近はI2CやSPIなど数MHz,数十MHz程度の解析するアナライザが1000円足らずで買えます。筆者は色々触りたかったのでモジュール化されていないアナライザの開発ボードを買いました。
(※値段は一番安く多くのピンで遊べますが、EEPROMなどの設定が必要ですのでマイコン初心者は少し難しいかもしれません)
本当にマイコン(サイプレス製CY7C68013A)が載っているだけのボードです。PCとUSB経由で接続して解析することができます。詳細は下記になります。MiniUSBケーブルとジャンパーワイヤは別で購入が必要です
但し数百円の差ですので下記のようなモジュールになっているアナライザを買った方が直ぐに測定できて楽できるかと思います。
PCとUSB接続してSD,I2C,UART,SPIなど多くの通信を解析できます。USBケーブル、ジャンパーワイヤまで付いてきますので単に解析するだけならば筆者的には下記をおススメします
アナライザを使ってSDの波形を確認する
アナライザを「データ_D0~D3」「コマンド_CMD」「クロック_CLK」の箇所に接続してプログラムを実行しているときの波形を確認します。ジャンパー接続すればOKです
実際行ったときの写真が下記です
そして実際にとれた波形の一部が下記です。「D0~D3」「CLK」「CMD」の波形を取れました。(しっかり見たい方は画像をクリックして拡大をお願いします)
※CMDの表記がなくSS表記で使用しています
これだけだと何のデータか分からないので解析の設定でSDを選択します。
SDはデータ線が複数あるのでどの信号線で解析するか選択してあげます
これで、アナライザでSDの解析ができました。下記のように各bit、データが視覚的に分かるようになります。
SD解析まで含めると下記が結果例となります。
では次の章から各信号とSD解析した結果が正しいのかを確認してきます
SDを測定するのにサンプリングが足りなかった
まずSDのCLKがどれぐらい出ているのかを確認しました。今回の100均のSDカードリーダライターが何処までのSD規格に対応しているかは不明のためです
規格が進むにつれ12.5MB/s,25MB/sと速くなっていき。最近の最新のUHS-?だと数百MB/sまでの速度があるようです
「今回の100均のSDリーダぐらいだったら何とか筆者が持っているアナライザでも測定できるかも・・・」と思いきや、結果は測定できていませんでした。m(_ _ )m
今回の測定器はサンプリングレートが最大12MHzでしたが・・・
それに対して波形を見てみると、サンプリングが12MHz上にあり、これではサンプリングが足りておらずNGです
下記は先日I2C(100kbps)で1MHzのサンプリングで測定したものですが、1周期の間に10回ほどサンプリングできていて十分にサンプリングできています
今回のSDを測定する上でサンプリングが足りない件について少し下記2案を考えましたが、どちらもお手上げ状態となりました。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
①SDカードの周波数を落とす
⇒今回USB-SDリーダとなっており、どうやってUSBドライバ経由でSDの周波数を落とせばいいのか(そもそも出来るのかが)筆者の知識経験では「?」でした
②サンプリングレートを上げる
⇒現状筆者のプライベートの測定器ではこれ以上のものは無し。もし測定するならば下記のような100MHzぐらいは測定できるアナライザ必要そうです
(※6chでは50MHzのサンプリングになるようですので、これでも怪しいかもしれません)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
少しだけでも解析してみる(mount,umount)
残念ながら今回の測定ではクロックがまともに取れていない以上、正しい波形でありません。しかしせっかく測定したデータがありますので、少しだけでも確認できそうなデータを紹介していきます。
mount
ラズベリーパイでSDをマウントするときに使うコマンドの「mount」の波形を見ていきます。その時のコマンドは下記です。
~~~~~~~~~~~~~~~~~~~~~~
pi@raspberrypi:~$ sudo mount /dev/sda1 /media
~~~~~~~~~~~~~~~~~~~~~~
mountする前がデータ0~3がLowとなっており、mount後がHighとなっていることが分かります
umount
次はラズベリーパイでSDをアンマウントするときに使うコマンドの「umount」の波形を見ていきます。その時のコマンドは下記です。
~~~~~~~~~~~~~~~~~~~~~~
pi@raspberrypi:/home$ sudo umount /media
~~~~~~~~~~~~~~~~~~~~~~
先ほどとは逆にumountする前がデータ0~3がHighとなっており、umount後がLowとなっていることが分かります
まとめ・感想
残念ながら、今回はSDを正しく測定できず、満足いく解析ができませんでした。やはり遊びに近いアナライザだとI2C,SPI,UART辺りが限界かなと言った感じです。
もしサンプリングがより良いアナライザが手に入ることがあればまた試してみたいとは思います
今日はここまでにしたいと思います。どうもありがとうございました。
1000円足らずでアナライザが購入できます
コメント