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

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