0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MSC-MOD20 > SDモジュール ソフト > v0.12 > 複数行のI2C通信の不具合対応 / SD空き容量読取り実装

Last updated at Posted at 2016-10-02
動作確認
ESP8266 (気圧計で使用したユニバーサル基板: I2Cを4.7kでプルアップ)
SDモジュール: MSC-MOD20 ( http://www.microtechnica-shop.jp/shopdetail/000000000026/ )

http://qiita.com/7of9/items/0b17a601e464e67494af
の続き。

code v0.12

v0.12 @ github

以下が主な変更

  • I2Cの複数行応答の読取り変更
  • SDのバージョン確認コマンドにてACKをチェックするように変更
  • SDの空き容量を確認するコマンドを実装
結果
v2.0.0
init SD: OK
rcvd:!00

2:22,$000000006E170000
!00

SD free space:
$000000006E170000

途中にデバッグ用の出力(2:22...)があるが、バージョン(v2.0.0)と空き容量($000000006E170000)が読取りできた。

I2C > 複数行の応答読取りのハマリポイント

空き容量の確認コマンドの応答は以下のようになっている。

$000000006E170000<0x0A>
!00<0x0A><0x00>

こういう場合に各行をどう読取るか?

試した方法1 > 0x0Aまで読取る

ターミネータが0x0Aなので、0x0Aまで読取る処理にした。

自分の実装が悪かったのか、MSC-MOD20のI2C通信に問題があったのか不明だが、通信が失敗するようになった。
未確認ではあるが、<0x0A><0x00>で終わる場合は、きちんと<0x00>を読込まないとその後の通信がおかしくなるようだ。

一方で、上記の複数行の例にあるように<0x0A>の後のコードは<0x00>とは限らない。これを考慮した処理は複雑になりそうなため、0x0Aまでの読取りという方針はやめた。

試した方法2 > 複数行を読取ってからsplit

I2C通信をした時は、とにかく<0x00>まで読取り、その後に読取った文字列を<0x0A>区切りで分割することにした。

こちらの方は問題なく動作し、今のバージョンで使用している。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?