フォト
2017年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

« IchigoJamに関しての不満 | トップページ | 豊四季Tiny BASIC、ビットマップファイルの利用を可能に.. »

2017年6月 3日 (土)

Arduino IDE添付のSDライブラリの修正

Arduio IDE 1.8.2に含まれているSDライブラリ、リソースの開放と再獲得が出来ない。
これでは、利用しているSDカードの抜き差しが自由に行えません。

そこでオリジナルのSDライブラリ
https://github.com/arduino-libraries/SD

をフォークして、自分で修正を施しました。
SD Library for Arduino
https://github.com/Tamakichi/SD

修正内容
1)SD.end()の追加
2)SD.begin()で直前に利用していたリソース開放を行うように修正
3)ファイル名に半角カタカタの利用が可能

大した修正ではないのですが、効果絶大SDカード使い勝手が良くなります。
これで抜き差ししても、SD.begin()を実行すればSDカードを再認識してくれます。

SDライブラリは豊四季Tiny BASICでも利用しています。
この修正で、ファイル名に半角カタカナが使えるようになりました。
抜き差ししても、SDカードを再認識出来ました。

01

関連記事
・SDライブラリのマルチメディアカード(MMC)対応
  http://nuneno.cocolog-nifty.com/blog/2017/07/sdmmc-f37a.html

« IchigoJamに関しての不満 | トップページ | 豊四季Tiny BASIC、ビットマップファイルの利用を可能に.. »

arduino」カテゴリの記事

コメント

SDライブラリには手を加えず、
通常の初期化が失敗した時にCMD1で初期化し直すコードをスケッチに追加することによってMMC対応にする事は可能でしょうか?

>SDライブラリには手を加えず、
>通常の初期化が失敗した時にCMD1で初期化し直すコードをスケッチに
>追加することによってMMC対応にする事は可能でしょうか?

難しいと思います
初期化処理では、
1)SD(MMC)カードの初期化
2)ボリュームの初期化
を行っています。

1)のタイミングでCMD1で初期化しているのですが、1)でエラーとなると2)の処理は行いません。
初期化処理にてSDオブジェクトのメンバ変数に状態等の値をセットしていますが、
その変数に対して、外部からの参照・設定は出来ないです。
外からSPIオブジェクトを使ってMMCの初期化は出来るかもしれませんが、
SDオブジェクトに2)から処理を行わせるため手段が無いです。

返信ありがとうございます。
では、SDライブラリをインクルードした状態で、Sd2Card.cppの初期化に関する段落をごっそりコピペしてスケッチの方に書けば動作すると思います。そのスケッチ側に、ACMD41がrejectされたときにCMD1でやり直す文を追加してMMCのときにgoto false に行かないようにすれば、対応できるでしょうか。

Sd2Card.cppのコードを使って、SDオブジェクトとは独立してのMMC初期化は可能だと思います。
その後に、初期化失敗と判定している状態のSDオブジェクトに対して、
先ほどの2)の処理の実行、具体的にはプライベートメンバー変数(インスタンス)のSdVolume volume、 SdFile rootの初期化を行う手段は、SDライブラリの修正以外無いと思います。

SDライブラリを修正しないて、修正する方法としては派生してメソッドを上書きする方法もありますね。
ただ、これは結局、別のSDライブラリの実装に近いですね。

ありがとうございました。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/65365326

この記事へのトラックバック一覧です: Arduino IDE添付のSDライブラリの修正:

« IchigoJamに関しての不満 | トップページ | 豊四季Tiny BASIC、ビットマップファイルの利用を可能に.. »