PCカードATA

  • PCMCIAを使ったATAデバイス。
  • CompactFlashやそのほかのメモリカード(memcard)も、たいていはアダプタをつけると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ではこの設定方法も規定されている
    • これについては、CompactFlashの項を参照のこと
  • 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
    コメントお名前NameLink

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-09-16 (火) 06:24:42 (1915d)