2,000円以下で32GBが買えるとは、良い時代になった。。
MRAMが64KB×2なので、より大容量のデータが扱えるようにSDカード対応を考える。
使ったのは秋月のSDカードスロットDIP化モジュール
10kΩのプルアップ抵抗と3.3Vレギュレータが付いているので便利
電源はMRAMを使うときに用意した3.3Vをそのまま使うことにする。
AVRの近くにソケットを用意して、SDカードスロットDIP化モジュールを接続できるようにしておく
SDカードの読み書きは、ぷちFatFsを使わせてもらう
ディレクトリの操作(_USE_DIR)と、ファイル書き込み(_USE_WRITE)を有効にしたので、バイナリサイズが大きくなってしまった。。
SDカードのファイル内容をMRAMに保存したり、MRAMのデータをSDカードに書き込めるようにする。
ATmega1284のSRAMは16KBあるので、4KBをバッファエリアとしてSDカードの読み書きを高速化する。
バッファ領域はスロット7に割り当て(OUT &H1B, 7)、PASOPIA側からコマンドを入力できるようにする。
コマンドは、以下の4種類を用意
バッファへのコマンド入出力をBASICのINPUT命令で組んでみた。
こんな感じで、SDカードのファイルからMRAMにデータを読み込む
MRAMは64KB単位で読み書きするようにしたため、SDカードには65,536 bytesのファイルを置いておく必要がある。(スロット7の場合は、4,096 bytes)
セーブ命令も、既にあるファイルに上書きする。
SDカードのファイル内容をMRAMに保存したり、MRAMのデータをSDカードに書き込めるようにする。
ATmega1284のSRAMは16KBあるので、4KBをバッファエリアとしてSDカードの読み書きを高速化する。
バッファ領域はスロット7に割り当て(OUT &H1B, 7)、PASOPIA側からコマンドを入力できるようにする。
コマンドは、以下の4種類を用意
sv [slot] [file name] : MRAMのメモリ内容をSDカードのファイルへセーブ
[slot] : コピー元
5 : RAMPAC1: SLOT4: デフォルト装置番号5
6 : RAMPAC2: SLOT3: デフォルト装置番号6
7 : BUFFER: SLOT7
[file name] : SDカードコピー先ファイル名
"/"から始まった場合、絶対パス
[戻り値]
Ok : セーブが成功した場合
(エラー文字列) : エラーが発生した場合
ld [slot] [file name] : SDカードのファイルをMRAMへロード
[slot] : コピー先
5 : RAMPAC1: SLOT4: デフォルト装置番号5
6 : RAMPAC2: SLOT3: デフォルト装置番号6
7 : BUFFER: SLOT7
[file name] : SDカードコピー元ファイル名
"/"から始まった場合、絶対パス
[戻り値]
Ok : ロードが成功した場合
(エラー文字列) : エラーが発生した場合
ls [path] : フォルダとファイルのリストを表示
[path] : 読込元のSDカードのパスとファイル名
[戻り値]
(ファイル名 or フォルダ名)の一覧 : フォルダの場合は名称の最後に"/"が付く
(エラー文字列) : エラーが発生した場合
cd [path] : カレントディレクトリの変更SDカードの処理が終わったら、バッファ領域に[戻り値]が書き込まれる。
[path] : パス名 [戻り値]
[戻り値]
(フォルダ名) : カレントフォルダ
(エラー文字列) : エラーが発生した場合
バッファへのコマンド入出力をBASICのINPUT命令で組んでみた。
100 INPUT A$
110 B$=LEFT$(A$,1)
120 IF B$="e" OR B$="E" THEN OUT &H1B,4:END
130 OUT &H1B,7:OUT &H19,0
140 FOR I=0 TO &HFF
150 OUT &H18,I
160 B$=MID$(A$,I+1,1)
170 IF B$="" GOTO 200
180 OUT &H1A,ASC(B$)
190 NEXT I
200 OUT &H1A,0:OUT &H18,0:OUT &H1B,15
210 C=INP(&H1A):IF C>=254 GOTO 210
220 FOR I=1 TO &HFF
230 OUT &H18,I:D=INP(&H1A)
240 IF C=0 AND D=0 GOTO 280
250 IF C=0 THEN PRINT CHR$(13);CHR$(10); ELSE PRINT CHR$(C);
260 C=D
270 NEXT I
280 PRINT"":GOTO 100
こんな感じで、SDカードのファイルからMRAMにデータを読み込む
MRAMは64KB単位で読み書きするようにしたため、SDカードには65,536 bytesのファイルを置いておく必要がある。(スロット7の場合は、4,096 bytes)
セーブ命令も、既にあるファイルに上書きする。
これで、以前エミュレータで作成したRAM PACイメージを、MRAMに保存できるようになった。
0 件のコメント:
コメントを投稿