動作確認
ESP8266 (気圧計で使用したユニバーサル基板: I2Cを4.7kでプルアップ)
SDモジュール: MSC-MOD20 ( http://www.microtechnica-shop.jp/shopdetail/000000000026/ )
Analog Discovery 2 (以下AD2)
MSC-MOD20にはmicroSDの空き容量を確認するコマンドがある。
コマンドは「K M:」。
マニュアル記載の応答文字列
その応答は「MSC-MOD20ユーザガイド」を見ると以下のようになっている。
!00
$ssssssssssssssss
!00
- 1つ目はコマンドを受けたことに対するACK
- 2つ目は空き容量 (sに数値が入る)
- 3つ目は空き容量取得後のACK
読取りしてみた
上記の応答に対して、以下のような実装をした。
- 0x00(応答なし)が返るまでの読取りをする
- その処理を3回繰返した
読取りの結果が以下。
「1:5」という記載は1つ目で5文字までの文字を読取っていることを示す。
1:5,!00
2:27,$000000006E170000
!00
!00
3:0,
(補足 > 2:27,
の表示の後に単独で!00
が表示されているのはメモリ割当てが少ないために生じているバグだった。)
2回目の読取りでは3回目の!00まで読取ってしまっている。
応答文字列(+補足)
!00
$ssssssssssssssss
!00
応答は上記であるが、以下の補足事項が分かった。
- 1行目は終端(0x00)で切れる
- 2行目は終端(0x00)で切れず、即座に3行目が送信される
このような応答に合わせた実装にしないといけない。
Analog Discovery2でキャプチャ
2行目の終端は0x0Aなのか0x0Dなのか。
「MSC-MOD20ユーザガイド」のp8に以下の記載がある。
戻り値の終端はキャリッジリターン(0x0D)ではなく、ラインフィード(0x0A)なのでご注意ください。
Analog Discovery2でキャプチャした。
setup: http://qiita.com/7of9/items/1c40de42ab2647918140
http://qiita.com/7of9/items/81b3948715751b8347ca
に記載の方法で0x0Aでロジック取込みを止めるようにした。
赤枠右側は3行目の!00
(h21, h30, h30)なので、2行目の終端は0x0Aで判断できることを確認した。