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

標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
やっと(!)MYCPU80の改良型基板製作に着手しました!!





[第903回]


●SDカードでERR:92?(3)

前回からの続きです。
問題のSDカードのセクタbOを読み出してみて、普通ならそこにあるべきMBRがなくなっていて、代わりにBPBが書かれていることを発見しました。
独立化セットのSDカードアクセスプログラムでは想定外です。
これではまともにアクセスすることはできません。
そこでMBRとBPBを本来あるべきところに書き直しました。
ふつうはBPBはもっと後ろのセクタに置かれているのですが、そこはとりあえず試しにということで、セクタbPに置きました。
そのように対策をしておいて、DIRコマンドを使ってみたところERR:92は表示されなくなりました。
そこでFORMATを実行して、適当なファイルをセーブし、それを読み出してみて、正常に動作することを確認しました。
これでてっきり、直った!と思ったのですが。
念のため一度SDカードをSDカードソケットから外してから再度挿入して、もう一度DIRコマンドを実行してみたところ、まさかのエラーです。
またしてもERR:92が表示されてしまいました。

どうやらERR:92はMBRの問題とは別のところに原因があるようです。
さらにいろいろ試してみて、以下のことがわかりました。
1)このSDカードではDIRコマンドを実行するとERR:92が表示される
2)SDPIC2D.BINを実行したあとでDIRコマンドを実行するとERR:92は表示されずに以後は正常にアクセスできるようになる
3)一度電源OFFにするかSDカードを外したあと、再度挿入すると、また1)の状態に戻ってしまう

どうやらSDカードに最初にアクセスするときに必要な初期化の手続きに問題があるようです。
そこでSDPIC2D.BINとシステムに組み込んでいるSDカードアクセスプログラムの初期化のところを比較してみました。
どちらも手続きには違いはなかったのですが、システムROMのプログラムにはERR:92が表示される部分が追加されていることがわかりました。

こちらはシステムROMのERR:92の部分です。

              ;CMD1 out
70BA 0600     START070:LD B,00
70BC 0E41     START07:LD C,41
70BE 110000     LD DE,$0000
70C1 210000     LD HL,$0000
70C4 CD2572     CALL COUT0
70C7 0E00       LD C,00
70C9 CDED71   START09:CALL SIN
70CC 63         LD H,E
70CD 7B         LD A,E
70CE B7         OR A;00?
70CF CAE270     JP Z,SECT0RD
70D2 0D         DEC C
70D3 CAF87C     JP Z,ERR92;>2GB sdcard?
70D6 FE01       CP 01
70D8 C2C970     JP NZ,START09
70DB 05         DEC B
70DC CAF87C     JP Z,ERR92;>2GB sdcard?
70DF C3BC70     JP START07

こちらはSDPIC2Dの同じ部分です。

              ;CMD1 out
8157 0E41     START07:LD C,41
8159 110000     LD DE,$0000
815C 210000     LD HL,$0000
815F CD8082     CALL COUT
8162 CD4882   START09:CALL SIN
8165 63         LD H,E
8166 7B         LD A,E
8167 F5         PUSH AF
8168 CD4B10     CALL HXDP2
816B F1         POP AF
816C B7         OR A;00?
816D CA7881     JP Z,RWCHECK
8170 FE01       CP 01
8172 C26281     JP NZ,START09
8175 C35781     JP START07

システムROMでは256回試行して正しい応答が得られない場合には処理を打ち切ってERR:92を表示しています。
このようにしておかないと正しくアクセスできないSDカードの場合にシステムがハングアップしてしまいますから、これは必要な手続きです。
ただ個別のSDカードの中には256回の試行では正しい応答が得られないものがあるようです。
プログラムとしては256回というのは繰り返し回数としては最も簡単に行なえるものなのでこのようにしたのですが、これで不足する場合があるということになると、もっと繰り返し回数を増やす必要が出てきます。
そうなるとROMの交換ということになって、これはちょっと対応が大変です。

今回この問題のSDカードを送っていただいたお客様は、同じSDカードを別に1枚購入されたそうですが、そちらのほうはエラーは表示されず普通に使用できているとのことです。
私のところでも今まで何枚かの2GBのSDカードを使っているのですが、ERR:92が表示されることは経験していません。
おそらくはERR:92が発生するSDカードに当たることは、それほど多くはないのでは、と希望的に考えています。
システムプログラムを変更するということは、なかなかに手間がかかる作業なので、今すぐにというわけにはいきません。
それにどの程度の繰り返し回数ならばよいのかということもテストしながら確認する必要があります。
ということでシステムプログラムの変更についてはもう少し先のことにしたいと今は考えています。

TTLでCPUをつくろう![第903回]

2018.5.11upload

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