PCカードATA
基礎知識
- コンパクトフラッシュのメモリカードにはPCカードATAのほかにTrueIDEモードという特別なモードがあるが、これはPCMCIAスロットではなく、専用のATAコネクタにつないだときにのみ移行するモードであり、この場合は以下のような方法ではなく、普通のATAデバイスとしてアクセスする
- PCカードATAの中にもTrueIDEモードをサポートしているカードがそこそこある
- PCカード接続の場合のATAカードは、PCMCIAの規則にのっとってコンフィギュレーションしないとATAアクセスできない
- もちろんATAアクセス以外でアクセスする方法もない(バンク切り替え式ダイレクトアクセスみたいなことはできない)
- ATAカードにもちゃんとCISタプルがあるので、それを読んでATAカードかどうかを判別するわけである
設定方法
- 以下の4種類から選ぶ
- PCMCIAのコモンメモリ空間へのマッピング(16バイト) (CFでは必須だがPCカードATAではオプション)
- 連続したI/Oアドレス空間へのマッピング(16バイト) (必須)
- I/Oアドレス空間の0x1f0~1f7と0x3f6へのマッピング (マスターモードは必須、スレーブモードはオプション)
- I/Oアドレス空間の0x170~177と0x376へのマッピング (マスターモードは必須、スレーブモードはオプション)
- Kがアセンブラでドライバを作ってみたところでは、コモンメモリ空間へのマッピングが一番使いやすかったです。
- このどれにするかを具体的に設定するのは各カードの仕様に依存する
- CompactFlashでコモンメモリ空間へマッピングした場合、アドレス0x000~0x00fにマップされる
- 実は0x400~7ffにもデータレジスタがマップされる
- CompactFlashの場合、属性メモリ空間の0x206も設定用の8bitレジスタになっている
- bit4でATAデバイス番号(マスターかスレーブ)を表わす
- 他のbitはリザーブなので0を書き込むこと
- このレジスタはリードしてもよい
アクセス方法
- ATAでのアクセス方法は既知であるとする
- 0x1f0~1f7&0x3f6か0x0170~177&0x376にI/Oマップした場合は、普通のATAデバイスと同じようにアクセスすればよい
- 16バイトマッピングの場合:
- 最初の8バイトの部分[0-7]が0x1f0~1f7と全く同じ挙動になる
- 後半8バイトのうち、[e]の部分が0x3f6と同じ挙動になる
- 後半8バイトのうちの残り7バイトは未定だったり意味があったりするが、別に分からなくてもドライバを書く上では困らないだろう
こめんと欄
- 0x400-0x7ffにマップされたデータレジスタを使うと, ストリング命令で読み書きできて便利ですよ。 -- I.Tak.? 2003-11-10 (月) 10:10:30
|