XMEGAを使ってみる6 -どうしても外付けSRAMつけたかったので-

●XMEGAよ、やはりお前を救いたい
今から約10年前、ねむいさんはXMEGAをいじっておりましたがFatFsを実装し、SPIの
DMA化で力尽きました。ほんとは256kByteくらいのSRAMを外付けしたりしてやりた
かったのですが残念ながら当時購入したATXMEGA128A1ではチップ単体ではEBIを4PORT
SRAMモードで動作させてもアドレスバスに当たる一部のピンが外部に出ておらず、
SRAMを動作せしめることができませんでした(アドレスが1つだけでよいTFT-LCDとか
ならなんの問題もない)。

その後USB機能が付いたATXMEGA128A1Uが登場し、アドレスバスを別のポートに割り当て
できるようになっているとのことで手に入れようと試みて失敗したのが前回です

この半導体不足で何とか手に入れられないものかと思案した結果、部品がだめなら
製品を買えばよい!と至って久々にAliexpressでお買い物をしました。




MCUZONE製のATXMEGA128A1Uボード。USBブートローダはちゃんと動いたので本物です!


慎重にはがして載せ替えてみました。


ちなみにATXMEGA128A1のドアップ写真を。


オリジナルATXMEGA128A1


謎の縦じまがあるぱちもん。
ATXMEGA128A1UではなくATXMEGA128A1をリマークしたもの。


本物のATXMEGA128A1U!



●外付けSRAM

今回使用する外付けのSRAMは8bitバス,2Mbit(256kByte)のCY7C1010DV33-10ZSXIです。
10年以上前にデジキでかって塩漬けにして以来の活躍です。製造メーカのCypressは
すでにInfineonに食べられてしまっていますね。



SRAMも付けたXMEGA基板の表裏はこんな感じです…
二度とバスの配線とかやりませんよもう!



●回路とコード


すみません回路図めんどくさくて10年前から書いてませんが割り振り表はあるので
まねされる方はそれを参考にしてください。
TFT-LCD駆動用にCS0をつかってしまっているのでSRAMはCS1とします。


外付けSRAM用4Port-EBIの設定です。実行する関数はmain関数より早く実行した方が
良いので".init5"セクションに配置します。


EBIの設定のほかにheap領域は外部RAMで行えるようにheapの初期設定も行います。
__malloc_heap_start__malloc_heap_endにheap領域を示すアドレスを代入します。
__malloc_heap_endってなんで固定値0xFFFFなのかについては最後に解説します


また、上記のコードで書いてあった変数"__extram_end"はリンカスクリプト内で
定義します。コード内で値の設定を行うときは&を忘れずに。


以上で外付けSRAMを使う準備ができました。


●動いた!…しかし


載せ替えたXEGAにプログラムを書き込みFatfsの動作を確認です。
チップリビジョンはATXMEGAA1Uを示す'L'になってますね。


mallocで領域確保したりちゃんとできてますね★



特筆する点はFatFsの転送スピードです!
内蔵RAMは8kByteしかないので転送用のバッファも少ししか取れずDMAの恩恵に
預かれなかったのですが、外付けで32kByteとってやると断然違います!
これだけでもわざわざATXMEGA128A1Uを手に入れた甲斐がありました!

しかし…

●立ちはだかる16bitの壁

さて、上でさらっと述べましたが何も考えないで内蔵RAMのように気軽に使用できる
のはメモリのアドレスが0xFFFFまでです。つまり最大でも64kByteまでしかだめです。
今回の作例ではメモリアドレス0x005000から開始しているので0xFFFF-0x5000=0xAFFF
で、10進数に治すと45055Byte分しか楽に使えません。

そこから先の世界に踏み出そうとすると10年以上前に頭を抱えた24bitアドレス問題
直面することとなります。私の作例では一応24bitアドレスアクセスルーチンもテスト
の一部として入れております。DMAに関しては最初っから24bit分レジスタが用意されて
いるので心配はありません。

というわけでがんむばって256kByteのSRAMくっつけてたのがつけてから64KByte分
くらいしか得しないことを気づいてしまいましたが10年来心に抱え続けていたものに
決着をつけることができました。

世間はUPDIなAVR-DBシリーズに移行している中で盛大な寄り道をしてしまいましたが
今回頭を唸らせた経験はきっと役に立つでしょう(やばい思想にはまっている目で)。


今回の成果を反映したものをおきぱにおいておきます。忘れたころにXMEGA触る人に
少しくらい役に立つと期待しております。

Go to top of page