« I2C薄型液晶ディスプレイ(LCD)・AQM1602XAの使い方 | トップページ | ADコンバータでマイナスの電圧を測定する方法 »

2015年4月 2日 (木)

PICでSPI - SDカードの書き込みエラーの話

以前から頭を悩ましていた測定データをSDカードに記録するときエラーが起きる話ですが、完全に解決したように思えます。

ただ“鰯の頭も信心から”的な話ですので眉に唾をつけて読んだ方がいい記事です。

------

なお複数のSPIデバイスをいっしょに使う話についてはきむしげさん(きむ茶工房ガレージハウス)の

  「
SPIマスターにSPIデバイスを複数個接続して見ます

にソースを含めた詳細な記事があります。きっと私の記事よりずっと参考になると思います。
また私の使っているSDカードアダプタはそもそも単独で使ってもエラーが出ることがわかりました (^^;;
  SDカードでエラーが起きる理由 - PICでSPI

=======

これまでの経緯

SDカード単独で使うと問題ないのですがADコンバータやRTCといった他のSPIデバイスといっしょに使うとエラーが発生しました。
  「SPI接続でトラブル! 三つのデバイスが使えない

複数のSPIデバイスの間の干渉と考え対策をとりました。
  「SPI接続でSDカードとMCP3208がいっしょに使えない話
  「「自記温度計、自記気圧計 - 複数のSPIデバイスがいっしょに使えなかった話

一応の解決を見たわけですが、その後まだエラーが発生することがあります。特に10MHzを超える信号を近くで扱っているとエラーの発生確率(?)が高まります。

複数デバイスを使う話と関係あるのかないのかわからないのですがどうやらSDカードの入出力は高周波ノイズに弱いようです。

ノイズ対策ということでこんなことをしてみました。
Imgp92251000

SDカードソケットのある基板を挟み込むようにシールド版を入れました。
(「PIC+SPI+I2C 自記温湿度計+気圧計+8ch電圧計+周波数カウンタ(技術要素一覧)」に“全体像”があるので見比べていただくと違いがよくわかります)

下の方から(上の写真だと右の方から)見た写真です。
Imgp92261000

シールド板(シールドケース)はアルミ板(できれば銅板)でちゃんとしたものを作ればいいのですがめんどうですし材料もないのでかなり手抜きです。
Imgp9226e1000

プラ板2枚で台所にあったアルミホイルを重ねたものをサンドイッチにしています。

こんなのでほんとうに効果あるのかと思われそうですがちゃんと役目を果たしているようです。
これまでならぜったいエラーが起きると思われる“環境“でも問題なく動作するようになりました。さらに“悪い環境”にしたらSDカードの書き込みではまったくエラーは起きないもののADコンバータがまともな数値を示さなくなり気温が50℃とかなってしまいました (^^;;

タワー全体をシールドケースに入れる、というのが正解みたいです。

------

ところで最初のSPIデバイス同士の干渉と思われる現象ですが、きむしげさん(きむ茶工房ガレージハウス)の話(「きむ茶工房ガレージハウスの掲示板」)によると

SDはSSで切り変えるのでなくSS後のCKを送った後切り替えるので、DOUTがかち合う場合が有りそうな時が有る......

のだそうです。とすると私はちょっとまとはずれな対応をとっていたのかもしれません。回路をもとに戻しプログラムを見なおして試してみればはっきりするのですがもうその気力がなくて....

-------

関連記事

  「記事一覧(測定、電子工作、天文計算
    「趣味の電子工作
      「PIC
    「趣味の実験
    「趣味の気象観測

  「PIC+SPI+I2C 自記温湿度計+気圧計+8ch電圧計+周波数カウンタ(技術要素一覧)
  「PIC+SPI+I2C 自記温湿度計+気圧計+8ch電圧計のソース - main()


  「PICでSPI SDカードを読み書きする
  「PICでSPI - 超高精度SPIバスRTC(リアルタイムクロック)DS3234Sの使い方
  「PIC18F26K22でSPI - 8ch/ADコンバータ MCP3208の使い方(ソース付き)
  「PIC/I2C大気圧センサーLPS331APの測定値をSDカード(SPI)に記録する - はじめに
  「PIC/I2C大気圧センサーLPS331APの測定値をSDカード(SPI)に記録する - 実装編
  「I2C/SPI大気圧センサーLPS25Hの使い方 - 1 - 実装

  

« I2C薄型液晶ディスプレイ(LCD)・AQM1602XAの使い方 | トップページ | ADコンバータでマイナスの電圧を測定する方法 »

趣味の電子工作」カテゴリの記事

コメント

本題と関係なくてすみません、建設中の第2タワーで笑いました^^。

第二タワーはほよほよ式正弦波発生器、自動平衡ブリッジ、ベクトル電圧計、アナログスイッチ、16bitADコンバータからなるインテリジェントビルになる予定です (^^)

こんにちは
MCP3208手に入ったので実験してみました。
SDとMCP3208を配線してSDのファイルを読み出す事を行いました、
SD初期化エラー出ちゃいました。
が、プログラムの初期化時にSDとMCP3208のSS信号をHIGHにした後、
SPI_Init(SPI_MODE2,SPI_CLOCK_DIV16,16) ;
ans = SD_Init() ;
を行ったら動作したので、
SDとMCP3208から1秒毎に交互に読み出すプログラムにして
行いました、動作しています、この記事は後日作成してUPします。

わざわざお知らせいただきありがとうございます m(._.)m
訂正記事を用意しならが記事をお待ちすることにします (^^;;
私の方はSDカードの基板をシールドしてからエラーがまったく起きなくなりました。
どうもハード的な問題が最初からあってソフト的な問題とごっちゃになってわけが分からなくなっていたのかもしてません。

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: PICでSPI - SDカードの書き込みエラーの話:

« I2C薄型液晶ディスプレイ(LCD)・AQM1602XAの使い方 | トップページ | ADコンバータでマイナスの電圧を測定する方法 »

フォト

サイト内検索

  • 記事を探されるんでしたらこれがいちばん早くて確実です。私も使ってます (^^;; 検索窓が表示されるのにちょっと時間がかかるのはどうにかしてほしいです。

新着記事

リンク元別アクセス数

  • (アクセス元≒リンク元、原則PCのみ・ドメイン別、サイト内等除く)

人気記事ランキング

  • (原則PCのみ、直近2週間)
無料ブログはココログ