2016.11.30
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
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

前へ
次へ
ホームページトップへ戻る