ここから本文です
Dr.Kikkie (KIKI) : 不許無断天才|免責:本稿を真に受けて損害があっても知らん。

書庫過去の投稿日別表示

全1ページ

[1]

苦悶式SDカード 3

昼寝しながらも、コツコツと作業を進めております。
「MSX テクニカル・ハンドブック」や「MSX-DOS スーパーハンドブック」を初め、「BASIC説明書」「Z80マシン語ランド」「フラッシュ・メモリー・カードの徹底研究(以下「フラ研」という)」などなど、書籍たくさん、
MMC/SDCの使いかた
浅草ギ研 A33FでMicroSDカードにアクセスしてみる
などなどWEBもたくさん、参照させていただいてます。
 
「フラ研」には、SDカードでは初期化コマンドにACMD41を用いないと、MMC用のCMD1ではレスポンスが返ってこないと書いてありますが(149頁)、浅草ギ研さんとこではCMD1を使っておられて、相変わらず困惑している今日この頃です。「フラ研」の別のページでは「MMC用のソフト・ハードでSDにもアクセスできた」と書いてあり(112頁)、本当のところどうなんでしょう?
とりあえず、対応予定のCMDを並べてみました。
 
CMD0: DEFB 40H,00H,00H,00H,00H,95H
ACMD41: DEFB 69H,00H,00H,00H,00H,95H
↑このふたつは、SDカードのリセットに使います。いまだACMD41を使うべきかCMD1にするか迷い中。実験してから決めます。
CMD16: DEFB 50H,00H,00H,02H,00H,95H
↑このコマンドで、ブロック・サイズを512Bに設定します。2G以上のSDカードでは1024Bのこともあるようです(「フラ研」151頁)。「フラ研」の筆者のひとりは「これまで512B以外は見たことがない」と書いていますが(126頁)、2006年に発行された本なので2G以上のカードがあまり普及していなかったのでしょう。スマートメディアが「最も普及しているメモリ・カード」(11頁)とされる時代でした。
CMD17: DEFB 51H,00H
CMD17H: DEFB 00H
CMD17L: DEFB 00H,95H
↑このコマンドは、読み込み時、アクセスするセクタを指定します。「H」と「L」の部分には、USR関数で渡される数値が代入されます。
CMD24: DEFB 58H,00H
CMD24H: DEFB 00H
CMD24L: DEFB 00H,95H
↑このコマンドは、書き込み時、アクセスするセクタを指定します。この「H」と「L」の部分も読み込み時と同様です。
CMD59: DEFB 7BH,00H,00H,00H,00H,95H
↑このコマンドは、CRCを明示的に無効にします。SPIモードでは最初のCMD0以外、CRCは無視されるはずですが、「ごくまれにCRCを無視しないカードがある」と「フラ研」に書いてありました(106頁)。CMD0以外のコマンドのCRCが全部「95H」となっていますが意味ありません。
まあ、これぐらいのコマンドに対応しておけば大丈夫でしょう、たぶんw。
 
で、肝心のSDカードのアクセス部分ですが、
SDINI:;---------
 CALL CSH
 CALL CLK80
 CALL CSL
 RET
RDSD:;----------
 RET
WTSD:;----------
 RET
まだこれだけしか書けてません。というか、全然書いてないじゃんw
 
ときどきダミークロックを挟まないといけない(「フラ研」95頁)とか、「CMD0とCMD1の2つのコマンドを発行するあいだはCSはずっとLOWのままのように書いてありますし、SDカードの仕様が書いたドキュメント類を読むとそのようになっているようですが、実際に実験してみた結果、CMD1後にCSをHIGHにして1バイトダミーバイトを送信しないと同期が狂うことがわかりました。よって実際のプログラムではCMD1を何回も発行する前にCS=HIGHにして1バイト送信し、CS=LOWにしてからCMD1を発行しています。(この部分でかなりの時間を消費してしまった。SDカードのドキュメントわかりづらいです。) 」(浅草ギ研さん)とか、いろんな情報が錯綜して現在調査中であります。
つじかわさんの「mmc_test.com」も理解しきれてないし。
 
以下、現時点でのアセンブラリストとBASICのリストを掲げておきます。現時点では何事も起きず、無事「OK」となります。SDにアクセスしてないもんな。
ここのブログ、別ファイルにて掲載する機能がないし、TABコードを半角スペースに変換するし、なので少し困っています。完成時の公開をどうしようかな? 画像では困るでしょうね。
 
─────────────────────
■アセンブラリスト(適宜、半角スペースをTABに変換してね。)
;===================
; SDTEST.ASM XCD /B
;  KIKI 2014
;===================
JPORT EQU 6 ;Use JPORT B
CS EQU 5 ;CS =PIN8
CLK EQU 3 ;CLK=PIN7
DIN EQU 2 ;DI =PIN6
DO EQU 0 ;DO =PIN1(#14)
 ORG 0C000H
MAIN:;----------
 CALL SDR ;USR0=0C000H
 CALL PSGRST
 RET
 CALL SDW ;USR1=0C007H
 CALL PSGRST
 RET
BUFF: DEFS 512 ;BUFF=0C00EH
PSG0: DEFS 1
PSG1: DEFS 1
CMD0: DEFB 40H,00H,00H,00H,00H,95H
ACMD41: DEFB 69H,00H,00H,00H,00H,95H
CMD16: DEFB 50H,00H,00H,02H,00H,95H
CMD17: DEFB 51H,00H
CMD17H: DEFB 00H
CMD17L: DEFB 00H,95H
CMD24: DEFB 58H,00H
CMD24H: DEFB 00H
CMD24L: DEFB 00H,95H
CMD59: DEFB 7BH,00H,00H,00H,00H,95H
SDR:;-----------
 DI
 PUSH HL
 CALL PSGINI
 CALL SDINI
 LD A,(BUFF)
 OR A
 RET NZ
 POP HL
 INC HL
 INC HL
 LD A,(HL)
 LD (CMD17L),A
 INC HL
 LD A,(HL)
 LD (CMD17H),A
 CALL RDSD
 EI
 RET
SDW:;-----------
 DI
 PUSH HL
 CALL PSGINI
 CALL SDINI
 LD A,(BUFF)
 OR A
 RET NZ
 POP HL
 INC HL
 INC HL
 LD A,(HL)
 LD (CMD24L),A
 INC HL
 LD A,(HL)
 LD (CMD24H),A
 CALL WTSD
 EI
 RET
PSGINI:;---------
 LD A,15
 OUT (0A0H),A
 IN A,(0A2H)
 LD (PSG0),A
 PUSH AF
 LD A,15
 OUT (0A0H),A
 POP AF
 SET 6,A
 SET CS,A
 SET CLK,A
 SET DIN,A
 OUT (0A1H),A
 LD (PSG1),A
 RET
SDINI:;---------
 CALL CSH
 CALL CLK80
 CALL CSL
 RET
RDSD:;----------
 RET
WTSD:;----------
 RET
 
;CS H/L --------
CSH: LD A,15
 OUT (0A0H),A
 LD A,(PSG1)
 SET CS,A
 OUT (0A1H),A
 LD (PSG1),A
 RET
CSL: LD A,15
 OUT (0A0H),A
 LD A,(PSG1)
 RES CS,A
 OUT (0A1H),A
 LD (PSG1),A
 RET
;CLK H/L --------
CLKH: LD A,15
 OUT (0A0H),A
 LD A,(PSG1)
 SET CLK,A
 OUT (0A1H),A
 LD (PSG1),A
 RET
CLKL: LD A,15
 OUT (0A0H),A
 LD A,(PSG1)
 RES CLK,A
 OUT (0A1H),A
 LD (PSG1),A
 RET
;DIN H/L --------
DINH: LD A,15
 OUT (0A0H),A
 LD A,(PSG1)
 SET DIN,A
 OUT (0A1H),A
 LD (PSG1),A
 RET
DINL: LD A,15
 OUT (0A0H),A
 LD A,(PSG1)
 RES DIN,A
 OUT (0A1H),A
 LD (PSG1),A
 RET
;CLOK 80 -------
CLK80: CALL CLKL
 LD B,80
CLK80L: CALL CLKH
 CALL CLKL
 DJNZ CLK80L
 CALL CLKH
 RET
;DUMY CLOK 8 -------
DCLK: CALL CLKL
 LD B,8
DCLK8L: CALL CLKH
 CALL CLKL
 DJNZ DCLK8L
 CALL CLKH
 RET
PSGRST:;--------
 LD A,15
 OUT (0A0H),A
 LD A,(PSG0)
 OUT (0A1H),A
 RET
 END

─────────────────────
■BASICリスト(何もなくてごめんね。)
1000 '===============
1010 ' SDTEST.BAS
1020 '  KIKI 2014
1030 '===============
1040 SAVE "SDTEST.BAS"
1050 CLEAR 100,&HC000
1060 DEFINT A-Z
1070 BLOAD "SDTEST.OBJ"
1080 DEFUSR0=&HC000
1090 DEFUSR1=&HC007
1100 A=USR0(0)
1110 END

全1ページ

[1]

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
31

過去の記事一覧

最新のコメント最新のコメント

すべて表示

kik**41010
kik**41010
非公開 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について

よしもとブログランキング

もっと見る
本文はここまでですこのページの先頭へ

[PR]お得情報

CMで話題のふるさと納税サイトさとふる
毎日お礼品ランキング更新中!
2019年のふるさと納税は≪12/31まで≫
数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!

その他のキャンペーン

みんなの更新記事