マイコン独立大作戦
SDカードインターフェースの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
そして作戦その3は、SDカードインターフェースです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第22回]
●SDHCカード(8GB、FAT32)アクセスプログラム
毎度書いておりますように当連載記事は私自身のための備忘録も兼ねております。
本当はその日にやったことでメモしておきたいことをその日のうちに書くべきなのですが、なかなかそのようにはいきません。
今回の記事もちょうど1ヶ月も前のできごとをおさらいしながら書いております。
これじゃあ備忘録の意味がないのでありますが。
かろうじてノートにメモが残っておりますのと、プログラム実行時のログが頼りです。
今回はいよいよSDHCカード(FAT32)にアクセスします。
と言っても上に書きましたように、実際は1ヶ月前に行なったことの整理です。
2GBを越えるSDカードのアクセスは手続きがかなり複雑です。
その手続きについて、プログラムリストを見ながらまとめていくことにします。
下がSDHCカードアクセスプログラムです。
2016/10/31 8:56 sdcdif5b.txt END=83AE ;;; SD card PCI test program ;16/10/10 10/11 10/12 10/13 10/25 10/26 10/27 10/28 10/29 10/31 ; ORG $8100 ; ADISP=$1015 DEDP=$1018 CRLF=$101B HDCMP=$1027 REENT=$1033 HXDP2=$104B HXDP4=$104E DMSB=$1A08 ; 8100 C30781 JP START0 8103 00 SCTN_H:DB 00 8104 00 SCTN_M:DB 00 8105 00 SCTN_L:DB 00 8106 00 SCTN_L0:DB 00 8107 3E90 START0:LD A,90 8109 D383 OUT (83),A ;card init 810B 2E0A LD L,0A 810D 16FF START01:LD D,FF 810F CD3383 CALL SOUT 8112 2D DEC L 8113 C20D81 JP NZ,START01 ;CMD0 out 8116 118783 LD DE,CMD0T 8119 CD1810 CALL DEDP 811C 3E02 LD A,02 811E D382 OUT (82),A;CS=L 8120 1640 LD D,40 8122 CD3383 CALL SOUT 8125 0604 LD B,04 8127 C5 START02:PUSH BC 8128 1600 LD D,00 812A CD3383 CALL SOUT 812D C1 POP BC 812E 05 DEC B 812F C22781 JP NZ,START02 8132 1695 LD D,95 8134 CD3383 CALL SOUT 8137 CD4D83 START03:CALL SIN 813A 63 LD H,E 813B 7B LD A,E 813C F5 PUSH AF 813D CD4B10 CALL HXDP2 8140 F1 POP AF 8141 FE01 CP 01 8143 C23781 JP NZ,START03 8146 CD1B10 CALL CRLF ; ;CMD8 out 8149 118C83 LD DE,CMD8T 814C CD1810 CALL DEDP 814F 1648 LD D,48 8151 CD3383 CALL SOUT 8154 1600 LD D,00 8156 CD3383 CALL SOUT 8159 CD3383 CALL SOUT 815C 1601 LD D,01 815E CD3383 CALL SOUT 8161 16AA LD D,AA 8163 CD3383 CALL SOUT 8166 1687 LD D,87 8168 CD3383 CALL SOUT 816B CD4D83 START09:CALL SIN 816E 63 LD H,E 816F 7B LD A,E 8170 F5 PUSH AF 8171 CD4B10 CALL HXDP2 8174 F1 POP AF 8175 B7 OR A 8176 C26B81 JP NZ,START09 8179 CD1B10 CALL CRLF ; ;CMD58 817C 119183 LD DE,CMD58T 817F CD1810 CALL DEDP 8182 167A LD D,7A 8184 CD3383 CALL SOUT 8187 1600 LD D,00 8189 CD3383 CALL SOUT 818C CD3383 CALL SOUT 818F CD3383 CALL SOUT 8192 CD3383 CALL SOUT 8195 16AF LD D,AF 8197 CD3383 CALL SOUT 819A CD4D83 CMD58_2:CALL SIN 819D 63 LD H,E 819E 7B LD A,E 819F F5 PUSH AF 81A0 CD4B10 CALL HXDP2 81A3 F1 POP AF 81A4 FE01 CP 01 81A6 C29A81 JP NZ,CMD58_2 81A9 CD4D83 CMD58_3:CALL SIN 81AC 63 LD H,E 81AD 7B LD A,E 81AE F5 PUSH AF 81AF CD4B10 CALL HXDP2 81B2 F1 POP AF 81B3 B7 OR A 81B4 C2A981 JP NZ,CMD58_3 81B7 CD4D83 CMD58_4:CALL SIN 81BA 63 LD H,E 81BB 7B LD A,E 81BC F5 PUSH AF 81BD CD4B10 CALL HXDP2 81C0 F1 POP AF 81C1 B7 OR A 81C2 C2B781 JP NZ,CMD58_4 ; 81C5 CD1B10 CMD55_0:CALL CRLF ; ;CMD55 81C8 119783 CMD55:LD DE,CMD55T 81CB CD1810 CALL DEDP 81CE 1677 LD D,77 81D0 CD3383 CALL SOUT 81D3 1600 LD D,00 81D5 CD3383 CALL SOUT 81D8 CD3383 CALL SOUT 81DB CD3383 CALL SOUT 81DE CD3383 CALL SOUT 81E1 16FF LD D,FF 81E3 CD3383 CALL SOUT 81E6 CD4D83 CMD55_2:CALL SIN 81E9 63 LD H,E 81EA 7B LD A,E 81EB F5 PUSH AF 81EC CD4B10 CALL HXDP2 81EF F1 POP AF 81F0 FE01 CP 01 81F2 CAF981 JP Z,CMD55_3 81F5 B7 OR A 81F6 C2E681 JP NZ,CMD55_2 81F9 CD1B10 CMD55_3:CALL CRLF ; 81FC 16FF LD D,FF 81FE CD3383 CALL SOUT;dummy ; ;ACMD41 8201 119D83 LD DE,ACMD41T 8204 CD1810 CALL DEDP 8207 1669 LD D,69 8209 CD3383 CALL SOUT 820C 1640 LD D,40 820E CD3383 CALL SOUT 8211 16FF LD D,FF 8213 CD3383 CALL SOUT 8216 1680 LD D,80 8218 CD3383 CALL SOUT 821B 1600 LD D,00 821D CD3383 CALL SOUT 8220 16FF LD D,FF 8222 CD3383 CALL SOUT 8225 CD4D83 ACMD41_2:CALL SIN 8228 63 LD H,E 8229 7B LD A,E 822A F5 PUSH AF 822B CD4B10 CALL HXDP2 822E F1 POP AF 822F B7 OR A 8230 CA3B82 JP Z,CMD582_0 8233 FE01 CP 01 8235 C22582 JP NZ,ACMD41_2 8238 C3C581 JP CMD55_0 ; 823B CD1B10 CMD582_0:CALL CRLF ; ;second CMD58 823E 119183 LD DE,CMD58T 8241 CD1810 CALL DEDP 8244 167A LD D,7A 8246 CD3383 CALL SOUT 8249 1600 LD D,00 824B CD3383 CALL SOUT 824E CD3383 CALL SOUT 8251 CD3383 CALL SOUT 8254 CD3383 CALL SOUT 8257 16AF LD D,AF 8259 CD3383 CALL SOUT 825C CD4D83 CMD582_2:CALL SIN 825F 63 LD H,E 8260 7B LD A,E 8261 F5 PUSH AF 8262 CD4B10 CALL HXDP2 8265 F1 POP AF 8266 B7 OR A 8267 C25C82 JP NZ,CMD582_2 826A CD4D83 CMD582_3:CALL SIN 826D 63 LD H,E 826E 7B LD A,E 826F F5 PUSH AF 8270 CD4B10 CALL HXDP2 8273 F1 POP AF 8274 B7 OR A 8275 C26A82 JP NZ,CMD582_3 8278 CD1B10 CALL CRLF ; ;CMD9 827B 11A483 LD DE,CMD9T 827E CD1810 CALL DEDP 8281 1649 LD D,49 8283 CD3383 CALL SOUT 8286 1600 LD D,00 8288 CD3383 CALL SOUT 828B CD3383 CALL SOUT 828E CD3383 CALL SOUT 8291 CD3383 CALL SOUT 8294 16AF LD D,AF 8296 CD3383 CALL SOUT 8299 CD4D83 CMD9_2:CALL SIN 829C 63 LD H,E 829D 7B LD A,E 829E F5 PUSH AF 829F CD4B10 CALL HXDP2 82A2 F1 POP AF 82A3 B7 OR A 82A4 C29982 JP NZ,CMD9_2 ; 82A7 0608 LD B,08 82A9 C5 PUSH BC 82AA CD4D83 CMD9_3:CALL SIN 82AD 63 LD H,E 82AE 7B LD A,E 82AF F5 PUSH AF 82B0 CD4B10 CALL HXDP2 82B3 F1 POP AF 82B4 FEFF CP FF 82B6 C2AA82 JP NZ,CMD9_3 82B9 C1 POP BC 82BA 05 DEC B 82BB C5 PUSH BC 82BC C2AA82 JP NZ,CMD9_3 82BF C1 POP BC 82C0 CD1B10 CALL CRLF ; ;read test 82C3 11A983 RTEST0:LD DE,RTESTT 82C6 CD1810 CALL DEDP 82C9 210381 RTEST:LD HL,SCTN_H 82CC 56 LD D,(HL) 82CD 23 INC HL 82CE 5E LD E,(HL) 82CF 23 INC HL 82D0 46 LD B,(HL) 82D1 23 INC HL 82D2 6E LD L,(HL) 82D3 60 LD H,B 82D4 E5 PUSH HL 82D5 D5 PUSH DE 82D6 0E51 LD C,51;index=11(17d) 82D8 CD6A83 CALL COUT ;test 82DB CD4D83 RTEST2:CALL SIN 82DE 63 LD H,E 82DF 7B LD A,E 82E0 F5 PUSH AF 82E1 CD4B10 CALL HXDP2 82E4 F1 POP AF 82E5 FEFE CP FE;token 82E7 C2DB82 JP NZ,RTEST2 82EA CD1B10 CALL CRLF ;data block read 82ED 0610 LD B,10;=16 16x32=512 82EF 210088 LD HL,$8800;*********** test 82F2 0E20 RTEST3:LD C,20;=32byte 82F4 C5 RTEST4:PUSH BC 82F5 CD4D83 CALL SIN ; PUSH HL ; LD H,E ; CALL HXDP2 ; POP HL 82F8 73 LD (HL),E 82F9 23 INC HL 82FA C1 POP BC 82FB 0D DEC C 82FC C2F482 JP NZ,RTEST4 ; CALL CRLF 82FF 05 DEC B 8300 C2F282 JP NZ,RTEST3 8303 3E5B LD A,5B 8305 CD1510 CALL ADISP 8308 E1 POP HL 8309 CD4E10 CALL HXDP4 830C E1 POP HL 830D CD4E10 CALL HXDP4 8310 3E5D LD A,5D 8312 CD1510 CALL ADISP 8315 CD1B10 CALL CRLF 8318 CD4D83 CALL SIN;crc(2bytes) read 831B 210088 LD HL,$8800;*******test 831E 11FF89 LD DE,$89FF;******* 8321 CD081A RTEST42:CALL DMSB 8324 CD2710 CALL HDCMP 8327 CA2183 JP Z,RTEST42 832A DA2183 JP C,RTEST42 832D CD1B10 END:CALL CRLF 8330 C33310 JP REENT ; ; D:out data 8333 0608 SOUT:LD B,08 8335 7A SOUT2:LD A,D 8336 2F CPL 8337 D381 OUT (81),A;data out 8339 3E01 LD A,01 833B D383 OUT (83),A;pc0=1 out ~I_ 833D 7A LD A,D 833E 17 RLA 833F 57 LD D,A 8340 3E00 LD A,00 8342 D383 OUT (83),A;pc0=0 out _I~ 8344 05 DEC B 8345 C23583 JP NZ,SOUT2 8348 3E01 LD A,01 834A D383 OUT (83),A;pc0=1 out ~I_ 834C C9 RET ; E:in data 834D 0608 SIN:LD B,08 834F 3E01 SIN2:LD A,01 8351 D383 OUT (83),A;pc0=1 out ~I_ 8353 00 NOP 8354 00 NOP 8355 00 NOP 8356 3E00 LD A,00 8358 D383 OUT (83),A;pc0=0 out _I~ 835A DB80 IN A,(80) 835C 2F CPL 835D 1F RRA 835E 7B LD A,E 835F 17 RLA 8360 5F LD E,A;data in 8361 05 DEC B 8362 C24F83 JP NZ,SIN2 8365 3E01 LD A,01 8367 D383 OUT (83),A;pc0=1 out ~I_ 8369 C9 RET ; CMD out ;C cmd ;D,E,H,L argument 836A D5 COUT:PUSH DE 836B 51 LD D,C 836C CD3383 CALL SOUT;cmd out 836F D1 POP DE 8370 D5 PUSH DE 8371 CD3383 CALL SOUT;D out 8374 53 LD D,E 8375 CD3383 CALL SOUT;E out 8378 54 LD D,H 8379 CD3383 CALL SOUT;H out 837C 55 LD D,L 837D CD3383 CALL SOUT;L out 8380 16FF LD D,FF 8382 CD3383 CALL SOUT;crc(dummy)+stop bit out 8385 D1 POP DE 8386 C9 RET ; 8387 434D4430 CMD0T:"CMD0" 838B 0D DB 0D 838C 434D4438 CMD8T:"CMD8" 8390 0D DB 0D 8391 434D4435 CMD58T:"CMD5" 8395 38 "8" 8396 0D DB 0D 8397 434D4435 CMD55T:"CMD5" 839B 35 "5" 839C 0D DB 0D 839D 41434D44 ACMD41T:"ACMD" 83A1 3431 "41" 83A3 0D DB 0D 83A4 434D4439 CMD9T:"CMD9" 83A8 0D DB 0D 83A9 52544553 RTESTT:"RTES" 83AD 54 "T" 83AE 0D DB 0D ; ;END ACMD41T =839D ACMD41_2 =8225 ADISP =1015 CMD0T =8387 CMD55 =81C8 CMD55T =8397 CMD55_0 =81C5 CMD55_2 =81E6 CMD55_3 =81F9 CMD582_0 =823B CMD582_2 =825C CMD582_3 =826A CMD58T =8391 CMD58_2 =819A CMD58_3 =81A9 CMD58_4 =81B7 CMD8T =838C CMD9T =83A4 CMD9_2 =8299 CMD9_3 =82AA COUT =836A CRLF =101B DEDP =1018 DMSB =1A08 END =832D HDCMP =1027 HXDP2 =104B HXDP4 =104E REENT =1033 RTEST =82C9 RTEST0 =82C3 RTEST2 =82DB RTEST3 =82F2 RTEST4 =82F4 RTEST42 =8321 RTESTT =83A9 SCTN_H =8103 SCTN_L =8105 SCTN_L0 =8106 SCTN_M =8104 SIN =834D SIN2 =834F SOUT =8333 SOUT2 =8335 START0 =8107 START01 =810D START02 =8127 START03 =8137 START09 =816B |
アドレス8333以降のシリアルデータOUT、データIN、コマンドOUTの各サブルーチンは2GBまでのSDカードプログラムと同じです(2GBまでのSDカードプログラムは[第12回]を参照してください)。
初期化の最初のCMD0の送出のところまでは2GB以下のSDカードプログラムと同じですが、そのあとCMD1を送る代わりにCMD8を送ります。
ここからが今までのプログラムと違ってきます。
まだプログラムの説明が始まったばかりですが、本日は時間がありません。
続きは次回にいたします。
SDカードインターフェースの製作[第22回]
2016.11.30upload
前へ
次へ
ホームページトップへ戻る