Arduino UNOで SPI接続のSRAM（23LC1024）を使ってみる

# Arduino UNOで SPI接続のSRAM（23LC1024）を使ってみる

## なぜSRAM?

足りないからです！w

ArduinoのIC、ATmega328Pは **2Kbyteしか** SRAMが搭載されていません！

いろいろな変数も使うことを考慮すると、大きなバッファーが使いたいときでも、せいぜい1Kbyteくらいの配列しか使えません。

![これはラム。。。じゃなくてマトン](http://img.dfm.lrv.jp/ram/ram.png)

※注意！：これはSRAMではありません！！！Lambですらなくたぶんマトンです。しかし可愛い。。。。

これじゃ足りない！増設したい！

![こいつらもラム。。。じゃなくてマトン](http://img.dfm.lrv.jp/ram/rams.png)

※注意！：こいつらもSRAMではありません。

こんくらいに！！！

## 23LC1024を選ぶまで

> 誠に残念ながら羊画像は終わりです。先に進みます。

というわけで、RAMを外付けする方法ないかな？と思って、探してみました。
工作ヘタなのでDIP（スルーホール）実装前提です。SMDは（ハンダ漬け技術的に）ムリなので見向きもしません！

### 1. [スイッチサイエンス　シリアルSRAMモジュール 23K256](http://www.switch-science.com/catalog/1072/)

これは、23K256という256Kbit（=32Kbyte）のSRAMモジュールです。
735円で、穴にケーブルかピン実装するだけで使えます。

使い方も、[なんでも作っちゃう、かも。　Arduinoで遊ぼう - シリアルSRAMを使ってメモリを拡張する](http://arms22.blog91.fc2.com/?tag=23K256)で紹介されている方法が使えそうです。

一番簡単そう。

### 2. 23K256を単体で

1コ使うだけなら、上記スイッチサイエンスのモジュールでいいけど、部品代で735円は高いなぁ、というわけで、上記モジュールで使ってる23K256はどう?
ということで、探してみました。
手に入れやすいのは、下記かな？

[23K256-I/P 5個](http://jp.rs-online.com/web/p/sram-memory-chips/6668144/)

5個で746円（税込み）
3Vで使えば、これで良さそうですね。

### 3. 23LC1024

でも、5Vでも使いたいよね。と、23K256のメーカーのページを見てたら、5Vでも動くSRAMを発見。23LC1024。容量さらに多い128Kbyte。これなら結構使えそう。

[23LC1024 2個](http://jp.rs-online.com/web/p/sram-memory-chips/7697345/)
値段は倍。容量は4倍。5Vでも使える。
2個で593円。

23K256を5Vで使うには電圧変換用の部品も要るし、こっちの方が結果として安く上がる気が。
というわけで、23LC1024を買って使ってみることにしました。(基本はセコいからですw)


## SRAMを繋ぐ

さて、23LC1024が届いたので、早速Arduinoと繋いでみたいんだけど繋ぎ方がわからない。
23LC1024の繋ぎ方をいろいろググっても、なかなか出てこないw

23K256の場合は、前述の[なんでも作っちゃう、かも。](http://arms22.blog91.fc2.com/?tag=23K256)さんで紹介されている。
仕方ないので、23K256と23LC1024とデータシートを見比べてみる。

[23K256 データシート](http://docs-asia.electrocomponents.com/webdocs/0d03/0900766b80d03392.pdf) P.1

[23LC1024 データシート](http://docs-asia.electrocomponents.com/webdocs/114c/0900766b8114ca33.pdf) P.13

2cLC1024の方はSPIだけでなく、SDIやSQIという繋ぎ方にも対応している模様。

Arduino側がSDIやSQIで使えるのか解らないので、SPIでいい。
そうなると、素人目には23K256と一緒に見える。（23K256のP.1と23LC1024のP.13）

![23K256と23LC1024ピンの比較](http://img.dfm.lrv.jp/ram/pins.png)

※左が23K256、右が23LC1024

というわけで、先に紹介した[なんでも作っちゃう、かも。](http://arms22.blog91.fc2.com/?tag=23K256)さんの配線を参考に、外付けボードを作り、これで実験してみる作戦に。

![23LC1024用外付けボード](http://img.dfm.lrv.jp/ram/board.jpg)

回路図はこちらw
![回路図](http://img.dfm.lrv.jp/ram/dia.png)

しかし、D10のピン邪魔だなぁ。。なぜコイツだけ
ICSP側に端子出てないの?これで合ってるのか？

[SPI library](http://arduino.cc/en/Reference/SPI#.UwgqKvR_v28)

上記サイトを見ると、

> Note about Slave Select (SS) pin on AVR based boards
> 
> All AVR based boards have an SS pin that is useful when they act as a slave controlled by an external master. 

とか書いてある。

Arduinoマスターにするんなら繋がなくていいのでは？

など疑問を持ちつつも、こうしたことは、いろいろ触ってみるうちに明らかになると信じて、とりあえず作っちまったことだし、繋がなくてよいなら外せばいいだけだし、ということで実験開始することにしました。

## 実験開始

### 23LC1024 SRAM Library を使ってみる

ボードが出来たので、早速Arduinoのスケッチを書いて動かしてみようと思います。
グーグル先生に聞いたら、ライブラリを紹介して頂きましたので、ありがたく使わせていただきたいと思います。

[23LC1024 SRAM Library](http://forum.arduino.cc/index.php/topic,182918.0.html)

ライブラリをインストールすると、 `SpiRAM_Test.ino` というサンプルが付いてきます。
早速使ってみましょう。
そのまま何も考えず、Arduinoに書き込んで実行！

....あれ？動かない。

ソースを確認してみると、

![spiRAM_Test.ino](http://img.dfm.lrv.jp/ram/spiRAM_Test.png)

どうやら、ピンが違ってたようですね。

SSをD9に刺し直して、Arduino再起動！(USB抜き刺し)

![実行結果](http://img.dfm.lrv.jp/ram/testresult.png)

あっさり、サンプルが動きました。
RAMの読み書き、とりあえず出来ているようです。

## まとめ

というわけで、本当の実験はこれからなのですが、とりあえずSRAM使いたいけど、どうしようか？
と悩んでる3日前の私のような人の助けになるかもしれないので、メモしときました。
私もこれから使い始めるところなので、何かあったら更新します。

他にももっと便利なライブラリあるよ〜！とか、紹介して頂けたらうれしいです。

最後に、可愛い羊画像リンクを貼っておきます。

[可愛い羊画像](https://www.google.co.jp/search?q=%E7%BE%8A&espv=210&es_sm=91&source=lnms&tbm=isch&sa=X&ei=9DsIU8mGL8blkAWYkoGgDA&ved=0CAkQ_AUoAQ&biw=956&bih=486)