フォト
2017年9月
          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
無料ブログはココログ

« arduinoで安価にテレビに映像を出力する | トップページ | 最近のNHK語学番組は学習環境が充実しています »

2014年3月16日 (日)

ArduinoでSPIシリアルフラッシュメモリW25Q64を使ってみる(1)

Arduinoで容量の大きい外付けメモリを使いたいと思い、色々と調べて
SPI接続の8Mバイトのフラッシュメモリが使えるそうなので試してみました。

試した製品は、WINBOND製のW25Q64BVAIGという製品です。
パソコンのBIOSにも使われている製品のようです。

結論を先に言うと使えます。これはいいですよ。
8Mバイトも容量があると、グラフィックLCDでサイズ違いの日本語フォントが
同時に使えますね。

今回試した製品ですが、こんか感じです。

Dscn2484

8ピンDIP形式 3.3V駆動のSPIバス接続のフラッシュメモリです。
いつものごとくAliexpressで購入しました。10個で送料込みで$12.5でした。

3.3Vなので通常のArduinoでの利用はレベルシフタ等が必要ですが、私のUNOは
3.3Vも利用できるので問題なしです。

回路はこんな感じでシンプルです。

Dscn2481

01

さて、このメモリを使うプログラムですが、Arduinoで使っているサンプルがどこにも
ありません。仕方がないのでデータシートを見て自作しました。

フラッシュメモリはEEPROMと違いちょっと操作が面倒です。
ブロック、セクター、ページ等の単位出てきます。書込みがちょっと厄介です。

作成途中ですが取りあえず動いたので、公開します。
ここからダウンロードできます。指定セクタ内の任意アドレスにデータを書き込めます。
読込はリニアなアドレス指定で参照できます。

ダウンロード W25Q64.ino (11.7K)

シリアルモニタで動作確認をするとこんな感じです。

03



2016/05/23 追記

GitHubにてライブラリを公開しました。
https://github.com/Tamakichi/Arduino-W25Q64



« arduinoで安価にテレビに映像を出力する | トップページ | 最近のNHK語学番組は学習環境が充実しています »

arduino」カテゴリの記事

AVR」カテゴリの記事

コメント

初めまして、Tomと申します。
現在、Arduinoで遊びだしてから、約1週間になります。
先般修理した、NotePCのBIOS用フラッシュメモリ(W25Q64)からデータを読み出したいと思い、ここにたどり着きました。
上記、サンプルスケッチ(ダウンロード W25Q64.ino (11.7K))の中で、データの読み出しだけを行うためには、どこからどこまでのエリアを使用すればよろしいのでしょうか?

まだ、Arduinoを使用したばかりで、勉強不足です。
どうかご教示願います。

Tom

Tomさん

サンプルスケッチ(ダウンロード W25Q64.ino (11.7K))よりも、
GitHubで公開している「Arduino用 SPI接続フラッシュメモリW25Q64ライブラリ」のサンプルソース
の方が分かり易いと思います(コメントで説明を付けています)。そちらを参照して下さい。

公開ページ
https://github.com/Tamakichi/Arduino-W25Q64

ライブラリ添付のサンプルソース
https://github.com/Tamakichi/Arduino-W25Q64/blob/master/W25Q64/examples/sample/sample.ino

サンプルソースの読み出しは次のような感じになっています。


// データの読み込み(アドレス0から256バイト取得)
memset(buf,0,256);
n = W25Q64_read(0,buf, 256);
Serial.print("Read Data: n=");
Serial.println(n,DEC);
dump(buf,256);

// 高速データの読み込み(アドレス0から256バイト取得)
memset(buf,0,256);
n = W25Q64_fastread(0,buf, 256);
Serial.print("Fast Read Data: n=");
Serial.println(n,DEC);
dump(buf,256);

サンプルのsetup()の初期化処理の記述と
上記のW25Q64_read()またはW25Q64_fastread()でいけると思います。

たま吉さん

アドバイスありがとうございました。
今後も、何かありましたら、ご教示ください。

Tom

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: ArduinoでSPIシリアルフラッシュメモリW25Q64を使ってみる(1):

« arduinoで安価にテレビに映像を出力する | トップページ | 最近のNHK語学番組は学習環境が充実しています »