マイコン独立大作戦
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
前へ
次へ
ホームページトップへ戻る