プロフィール
 

morimori.ynct

Author:morimori.ynct
森下功啓製作所のブログです。
電子工作のことや日々思ったことを時々気まぐれに更新しています。
趣味で作っているサイトはこちら

 
最新記事
最新コメント
最新トラックバック
 
 
月別アーカイブ
カテゴリ
 
 

スポンサーサイト

 
--/--/--(--) Category : スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
 
Comment  |  Trackback
 
 

ArduinoでSDカードをソフトウェアSPIモードで使用する

 
2011/08/19(Fri) Category : 電子工作
SCP1000とSDカードを併用するための試行錯誤に関するラストの報告です。

色々と回路的に試した結果、多少未使用ポートが減ってもソフトウェアSPIでSDカードを制御したほうが良いと結論付けました。


開発環境はArduino IDE 0022です。

 ハードウェア的に対応するには、トランジスタを使用してSDカードとの通信が一切SCP1000に漏れないようにする必要があります。MOSI、MISO、SCK全てです。もう少し正確に書くと、MOSIとSCKさえ分離させれば利用毎にscp1000.init();で初期化して使用することができました。3線とも分離させれば毎回初期化するという手間は必要ありません。使用トランジスタ数はPchが2つ、Nchが3つです。PchはNchと組み合わせて使用します。Nchのベース側にCS(チップセレクト)を入力します。ただし、回路面積がかなり必要であり面倒でした。




 面倒だった(同じ回路が3つもあればなおさら)ので、ソフトウェアとハードウェアともに変更するという折衷案としました。つまり、ArduinoのSPIポートはSCP1000に譲ります。そしてSDカードは他のポートを使用します。私の場合はポート5~8を使用しました。これは、Arduino標準搭載のSCP1000制御APIはソフトウェアSPIに対応していないがSDカード制御APIは対応しているのでこのような形態となりました。そのためにSDカードシールドのパターンカットとジャンパ作業が少し入りましたがこれは簡単でした。


プログラムの変更はさらに簡単だろうと思っていたのですが、期待を裏切られました。ライブラリのソースコードを少し変更する必要があります。

Sd2Card.hの74行目付近で以下のようにしました。ポート番号は使用するポートに合わせて変更します。
/** SPI chip select pin */
uint8_t const SD_CHIP_SELECT_PIN = 8; // デフォルトは10
/** SPI Master Out Slave In pin */
uint8_t const SPI_MOSI_PIN = 5;
/** SPI Master In Slave Out pin */
uint8_t const SPI_MISO_PIN = 6;
/** SPI Clock pin */
uint8_t const SPI_SCK_PIN = 7;

次に、Sd2Card.cppの21行目で次のようにしました。
#include
#define SOFTWARE_SPI // ソフトウェアSPIモードを使用したい場合に本行を有効にしてください。
#include "Sd2Card.h"



AVR Studio 4とコンパイラは同じかと思っていたので今回はかなり手こずってしまいました。#defineのスコープが違うってどうなんでしょ?でも、そのおかげで今まで知らなかったテクニックについて知ることができたので時間の無駄というわけではありません。





まぁともかくこれで気圧の記録をSDカード内にとることができるようになったわけです。
これから実験ですなぁ。




ところで、ソフトウェアSPI等の情報が日本語では存在しないってのは腑に落ちません。皆さんはどうされているのでしょうか?それともこれがArduinoの弊害なのだろうか?データシート読めなくなるとか、レジスタの意味が分からんとか、ググって出てこなければ放置するとか・・・。
関連記事
スポンサーサイト
 
コメントアイコン Comment0  |  Trackback0
 
 

Trackback

 

Trackback URL :
この記事にトラックバックする(FC2ブログユーザー)

 
 

Comment

 

    
 
Home | Top ▲
 
検索フォーム
 
 
RSSリンクの表示
リンク
ブロとも申請フォーム
QRコード
 
QR
 
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。