PCIC
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* 16bit-PCICの制御方法
-16bit-PCICは、16bitPCカードを制御するためのコントローラ...
-ここではAT互換機の世界で非常にメジャーなi82365を説明しま...
-ソケットごとに、最大で2つのI/Oウィンドウと5つのメモリウ...
-基本的にこのチップはISAバスに接続されています(そのため...
* レジスタへのアクセス方法
-i82365には64個のレジスタがあります(そのうちのいくつかは...
--0x03e0 : indexレジスタ (バイトアクセス、R/W)
---bit0-5 : レジスタ番号 (0~63)
---bit6-7 : ソケット番号 (0~3)
--0x03e1 : dataレジスタ (バイトアクセス、R/W -- indexレ...
---bit0-7 : データ
--(註)
---滅多にないとは思いますが、もしかしたら0x03e0以外のアド...
---ソケット番号は0~3となっていますが、今のところ2以上を...
---CardBusでの16bitPCIC互換機能の場合は、こんな面倒な方法...
-具体的には次のようにアクセスします。
--レジスタをリードする場合:indexレジスタに対象となるレジ...
--レジスタをライトする場合:indexレジスタに対象となるレジ...
-このようにソケットごと完全に独立したレジスタが64個あると...
* レジスタ表
|index|名前|
|0x00|Identification and Revision|
|0x01|Interface Status|
|0x02|Power and RESETDEV Control|
|0x03|Interrupt and General Control|
|0x04|Card Status Change|
|0x05|Card Status Change Interrupt Configuration|
|0x06|Address Window Enable|
|0x07|I/O Control|
|0x08-0x0b|I/O Window 0|
|0x0c-0x0f|I/O Window 1|
|0x10-0x15|Memory Window 0|
|0x16|Card Detect and General Control|
|0x17|- reserve -|
|0x18-0x1d|Memory Window 1|
|0x1e|Global Control|
|0x1f|Mode Control 1|
|0x20-0x25|Memory Window 2|
|0x26-0x27|- reserve -|
|0x28-0x2d|Memory Window 3|
|0x2e|- reserve -|
|0x2f|Mode Control 2|
|0x30-0x35|Memory Window 4|
|0x36-0x3f|- reserve -|
* レジスタの詳細
-Identification and Revision (R, 0x00):
--bit0-7:ID
--チップのリビジョンが格納されています。i82365の存在確認...
--たいていのものでは0x83が書かれています(i82365sl B step...
--少し古い版だと0x82が書かれています(i82365sl A step)。
--そのほかの互換品だと、0x84、0x88~0x8cが書いてある事も...
--これ以外の値が読めるようなら、i82365がそのアドレスには...
-Interface Status (R, 0x01):
--bit0-1:BVD1, BVD2ピンの状態(メモリカードモードのとき...
--bit2-3:CD1#, CD2#ピンの状態
--bit4:WPピンの状態(メモリカードモードのときのみ有効)
--bit5:READY(メモリカードモードのときのみ有効)
--bit6:Power Active
--bit7:etc
--BVDピンはボタン電池でバックアップするタイプのSRAMカード...
--CDピンはCard Detecetを意味していて、スロットにカードが...
--WPはWrite Protectピンですが、これも今のデバイスでは使わ...
--READYも今のデバイスでは使わない情報なので説明はパス。
--Power Activeが1になっていると、カードに電源が供給されて...
--etcはデバイスによって意味がまちまちです。とりあえず気に...
-Power and RESETDEV Control (R/W, 0x02):
--bit0-3:Vpp Control
--bit4:PC Card Power Enable
--bit5:Auto Power Switch Enable
--bit6:Disable RESETDRV
--bit7:Output Enable
--Vpp Controlはカードの補助電源制御なのですが、とりあえず...
--PC Card Power Enableを1にするとカードに電源(Vcc)が供...
--Auto Power Switch Enableを1にしておくとカードの抜きさし...
--Disable RESETDRVを0にしておくと、RESETDRVが有効になって...
--Output Enableを0にすると、設定してあるI/Oウィンドウやメ...
-Interrupt and General Control (R/W, 0x03):
--bit0-3:Card IRQ Number
--bit4:Socket -INTR Enable
--bit5:PC Card Type
--bit6:PC Card -Reset
--bit7:Ring Indicate Enable
--Card IRQ Numberは、カードが発生させた割り込みをIRQの何...
--Socket -INTR EnableはPCカードスロットの状態変化(主にカ...
--PC Card TypeはPCカードのモードを設定します。0だとメモリ...
--PC Card -ResetはPCカードへのリセット信号の制御です。実...
---先日、10ms-10ms程度でやったところ、うまくリセットされ...
--Ring Indicate EnableはI/Oモードのときのみ意味を持つbit...
-Card Status Change (?, 0x04):
--bit0:Battery Dead Change / STSCHG# Change
--bit1:Battery Warning Change
--bit2:READY Change
--bit3:Card Detect Change
--bit4:GPI Change
--bit5-7:分かりません (すみません)
--確か該当する状態変化があると1になるんだったと思います。...
-Card Status Change Interrupt Configuration (R/W, 0x05):
--bit0:Battery Dead Enable / STSCHG# Enable
--bit1:Battery Warning Enable
--bit2:READY Enable
--bit3:Card Detect Enable
--bit4-7:Socket IRQ Selection
--bit0-2はどれも非常に古いデバイスでしか意味を持たない状...
--Card Detect Enableを1にするとCD1#、CD2#の変化でIRQが発...
--Socket IRQ Selectionは、状態変化割り込みの際のIRQ番号を...
-Address Window Enable (R/W, 0x06):
--bit0:Memory Window 0
--bit1:Memory Window 1
--bit2:Memory Window 2
--bit3:Memory Window 3
--bit4:Memory Window 4
--bit5:-MEMCS16 Decode A23-A12
--bit6:I/O Window 0
--bit7:I/O Window 1
--bit0-4とbit6-7は簡単で、1にすると該当するアクセスウィン...
--bit5がくせものなのですが、結局、常に1にしておけばいいの...
-I/O Control (R/W, 0x07):
--bit0:I/O Window 0 Data Size
--bit1:I/O Window 0 -IOCS16 Source
--bit2:I/O Window 0 Zero Wait State (8bit用)
--bit3:I/O Window 0 Wait State (16bit用)
--bit4:I/O Window 1 Data Size
--bit5:I/O Window 1 -IOCS16 Source
--bit6:I/O Window 1 Zero Wait State (8bit用)
--bit7:I/O Window 1 Wait State (16bit用)
--Data Sizeを1にすると、16bitアクセスも認められるようにな...
-- -IOCS16 Sourceを1にすると、カードが出力するIOIS16#信号...
--Zero Wait Sateを1にすると、8bitアクセス時にシステムバス...
--Wait Stateを1にすると、16bitアクセス時に1ウェイトが挿入...
-I/O Window (R/W, 0x08-0x0b, 0x0c-0x0f)
--4バイトのレジスタ群です。
--+0のbit0-7:Start Low (A0-A7)
--+1のbit0-7:Start High (A8-A15)
--+2のbit0-7:Stop Low (A0-A7)
--+3のbit0-7:Stop High (A8-A15)
--CPUからのI/Oアクセス命令が発せられたとき、もしそのアド...
-Memory Window (R/W, 0x10-0x15, 0x18-0x1d, 0x20-0x25, 0x2...
--6バイトのレジスタ群です。
--+0のbit0-7:Start Low (A12-A19)
--+1のbit0-3:Start High (A20-A23)
--+1のbi4-5:リザーブ (0にせよ)
--+1のbit6:Zero Wait State (8bit用)
--+1のbit7:Data Size
--+2のbit0-7:Stop Low (A12-A19)
--+3のbit0-3:Stop High (A20-A23)
--+3のbit4-5:リザーブ (0にせよ)
--+3のbit6-7:Wait State (16bit用)
--+4のbit0-7:Offset Low (A12-A19)
--+5のbit0-5:Offset High (A20-A25)
--+5のbit6:REG Active
--+5のbit7:Write Protect
--CPUからのI/Oアクセス命令が発せられたとき、もしそのアド...
--これでPCカード側のaddrをアクセスする、という仕組みならI...
--PCカードへのアクセスアドレスは、(addr + Offset)となりま...
--Zero Wait Stateを1にすると、このゾーンに8bitアクセスが...
--Data Sizeを1にすると、16bitアクセスが許可されます。常に...
--Wait Stateは16bitアクセス時のwaitをいくつ入れるかを決め...
--REG Activeを1にすると、属性メモリ空間モードになり、0に...
--Write Protectを1にすると、このウィンドウへのアクセスで...
-Card Detect and General Control (?, 0x16)
--bit0:16Delay
--bit1:Configuration Reset
--bit2:GPI Enable
--bit3:GPI Control
--bit4:Resume
--bit5:Software IRQ
--bit6-7:分かりません (すみません)
--名前の分かっているbitも使い方はまだよくわかっていません。
-Global Control (?, 0x1e)
--bit0:Power Down
--bit1:CSC LEV
--bit2:WRBACK
--bit3:IRQ_0_LEV
--bit4:IRQ_1_LEV
--bit5-7:分かりません (すみません)
--名前の分かっているbitも使い方はまだよくわかっていません。
-Mode Control 1 (?, 0x1f)
--bit0-7:分かりません (すみません)
-Mode Control 2 (?, 0x2f)
--bit0-7:分かりません (すみません)
* 割り込みを使わない制御例
-割り込みを使わないで制御する例を紹介します。まずはこれを...
-まず最初は存在チェックです。Identification and Revision ...
-存在を確認できたら、誤動作を防ぐために、Address Window E...
-Interface Status (0x01)を読み込んで、bit2-3が11かどうか...
--非11から11になった瞬間に、すぐにカードへのアクセスが可...
--最初に変化を検出したらタイマーを仕掛けて、100ms~1000ms...
-カードが検出できたのなら、カードに電気を供給しましょう。...
--CardBusで16bitカードに電気を供給する方法は、CardBusのペ...
-カードに無事電気を供給できたら、次はカードリセットです。...
-リセットできたら、次は属性メモリ空間へのアクセスです。仮...
--CompactFlashをメモリマップトモードで利用する場合は例外...
--ここでは例として、0xd0000~0xd0fffに属性メモリ空間の最...
--レジスタ0x10~0x15に、次の値をセットします。
--0xd0, 0xc0, 0xd0, 0x00, 0x30, 0x7f
--もしCardBusのPCIC互換機能を使っている場合は、メモリウィ...
--そしてAddress Window Enable (0x06)に0x21を書いてメモリ...
--この状態で0xd0000から読んでいけば、[[(PCMCIA)CIS]]タプ...
-ここから先はカードによって違うので、説明はここまでにした...
-カードの電源を切る場合も一応書いておきます。ここでもやは...
--CardBusの場合は、Power and RESETDEV Control (0x02)のbit...
* こめんと欄
-こちらの記事大変参考になりました。ありがとうございます。...
-0x02にbit7を立てたら見えました。お騒がせしました。 -- ''...
#comment
終了行:
* 16bit-PCICの制御方法
-16bit-PCICは、16bitPCカードを制御するためのコントローラ...
-ここではAT互換機の世界で非常にメジャーなi82365を説明しま...
-ソケットごとに、最大で2つのI/Oウィンドウと5つのメモリウ...
-基本的にこのチップはISAバスに接続されています(そのため...
* レジスタへのアクセス方法
-i82365には64個のレジスタがあります(そのうちのいくつかは...
--0x03e0 : indexレジスタ (バイトアクセス、R/W)
---bit0-5 : レジスタ番号 (0~63)
---bit6-7 : ソケット番号 (0~3)
--0x03e1 : dataレジスタ (バイトアクセス、R/W -- indexレ...
---bit0-7 : データ
--(註)
---滅多にないとは思いますが、もしかしたら0x03e0以外のアド...
---ソケット番号は0~3となっていますが、今のところ2以上を...
---CardBusでの16bitPCIC互換機能の場合は、こんな面倒な方法...
-具体的には次のようにアクセスします。
--レジスタをリードする場合:indexレジスタに対象となるレジ...
--レジスタをライトする場合:indexレジスタに対象となるレジ...
-このようにソケットごと完全に独立したレジスタが64個あると...
* レジスタ表
|index|名前|
|0x00|Identification and Revision|
|0x01|Interface Status|
|0x02|Power and RESETDEV Control|
|0x03|Interrupt and General Control|
|0x04|Card Status Change|
|0x05|Card Status Change Interrupt Configuration|
|0x06|Address Window Enable|
|0x07|I/O Control|
|0x08-0x0b|I/O Window 0|
|0x0c-0x0f|I/O Window 1|
|0x10-0x15|Memory Window 0|
|0x16|Card Detect and General Control|
|0x17|- reserve -|
|0x18-0x1d|Memory Window 1|
|0x1e|Global Control|
|0x1f|Mode Control 1|
|0x20-0x25|Memory Window 2|
|0x26-0x27|- reserve -|
|0x28-0x2d|Memory Window 3|
|0x2e|- reserve -|
|0x2f|Mode Control 2|
|0x30-0x35|Memory Window 4|
|0x36-0x3f|- reserve -|
* レジスタの詳細
-Identification and Revision (R, 0x00):
--bit0-7:ID
--チップのリビジョンが格納されています。i82365の存在確認...
--たいていのものでは0x83が書かれています(i82365sl B step...
--少し古い版だと0x82が書かれています(i82365sl A step)。
--そのほかの互換品だと、0x84、0x88~0x8cが書いてある事も...
--これ以外の値が読めるようなら、i82365がそのアドレスには...
-Interface Status (R, 0x01):
--bit0-1:BVD1, BVD2ピンの状態(メモリカードモードのとき...
--bit2-3:CD1#, CD2#ピンの状態
--bit4:WPピンの状態(メモリカードモードのときのみ有効)
--bit5:READY(メモリカードモードのときのみ有効)
--bit6:Power Active
--bit7:etc
--BVDピンはボタン電池でバックアップするタイプのSRAMカード...
--CDピンはCard Detecetを意味していて、スロットにカードが...
--WPはWrite Protectピンですが、これも今のデバイスでは使わ...
--READYも今のデバイスでは使わない情報なので説明はパス。
--Power Activeが1になっていると、カードに電源が供給されて...
--etcはデバイスによって意味がまちまちです。とりあえず気に...
-Power and RESETDEV Control (R/W, 0x02):
--bit0-3:Vpp Control
--bit4:PC Card Power Enable
--bit5:Auto Power Switch Enable
--bit6:Disable RESETDRV
--bit7:Output Enable
--Vpp Controlはカードの補助電源制御なのですが、とりあえず...
--PC Card Power Enableを1にするとカードに電源(Vcc)が供...
--Auto Power Switch Enableを1にしておくとカードの抜きさし...
--Disable RESETDRVを0にしておくと、RESETDRVが有効になって...
--Output Enableを0にすると、設定してあるI/Oウィンドウやメ...
-Interrupt and General Control (R/W, 0x03):
--bit0-3:Card IRQ Number
--bit4:Socket -INTR Enable
--bit5:PC Card Type
--bit6:PC Card -Reset
--bit7:Ring Indicate Enable
--Card IRQ Numberは、カードが発生させた割り込みをIRQの何...
--Socket -INTR EnableはPCカードスロットの状態変化(主にカ...
--PC Card TypeはPCカードのモードを設定します。0だとメモリ...
--PC Card -ResetはPCカードへのリセット信号の制御です。実...
---先日、10ms-10ms程度でやったところ、うまくリセットされ...
--Ring Indicate EnableはI/Oモードのときのみ意味を持つbit...
-Card Status Change (?, 0x04):
--bit0:Battery Dead Change / STSCHG# Change
--bit1:Battery Warning Change
--bit2:READY Change
--bit3:Card Detect Change
--bit4:GPI Change
--bit5-7:分かりません (すみません)
--確か該当する状態変化があると1になるんだったと思います。...
-Card Status Change Interrupt Configuration (R/W, 0x05):
--bit0:Battery Dead Enable / STSCHG# Enable
--bit1:Battery Warning Enable
--bit2:READY Enable
--bit3:Card Detect Enable
--bit4-7:Socket IRQ Selection
--bit0-2はどれも非常に古いデバイスでしか意味を持たない状...
--Card Detect Enableを1にするとCD1#、CD2#の変化でIRQが発...
--Socket IRQ Selectionは、状態変化割り込みの際のIRQ番号を...
-Address Window Enable (R/W, 0x06):
--bit0:Memory Window 0
--bit1:Memory Window 1
--bit2:Memory Window 2
--bit3:Memory Window 3
--bit4:Memory Window 4
--bit5:-MEMCS16 Decode A23-A12
--bit6:I/O Window 0
--bit7:I/O Window 1
--bit0-4とbit6-7は簡単で、1にすると該当するアクセスウィン...
--bit5がくせものなのですが、結局、常に1にしておけばいいの...
-I/O Control (R/W, 0x07):
--bit0:I/O Window 0 Data Size
--bit1:I/O Window 0 -IOCS16 Source
--bit2:I/O Window 0 Zero Wait State (8bit用)
--bit3:I/O Window 0 Wait State (16bit用)
--bit4:I/O Window 1 Data Size
--bit5:I/O Window 1 -IOCS16 Source
--bit6:I/O Window 1 Zero Wait State (8bit用)
--bit7:I/O Window 1 Wait State (16bit用)
--Data Sizeを1にすると、16bitアクセスも認められるようにな...
-- -IOCS16 Sourceを1にすると、カードが出力するIOIS16#信号...
--Zero Wait Sateを1にすると、8bitアクセス時にシステムバス...
--Wait Stateを1にすると、16bitアクセス時に1ウェイトが挿入...
-I/O Window (R/W, 0x08-0x0b, 0x0c-0x0f)
--4バイトのレジスタ群です。
--+0のbit0-7:Start Low (A0-A7)
--+1のbit0-7:Start High (A8-A15)
--+2のbit0-7:Stop Low (A0-A7)
--+3のbit0-7:Stop High (A8-A15)
--CPUからのI/Oアクセス命令が発せられたとき、もしそのアド...
-Memory Window (R/W, 0x10-0x15, 0x18-0x1d, 0x20-0x25, 0x2...
--6バイトのレジスタ群です。
--+0のbit0-7:Start Low (A12-A19)
--+1のbit0-3:Start High (A20-A23)
--+1のbi4-5:リザーブ (0にせよ)
--+1のbit6:Zero Wait State (8bit用)
--+1のbit7:Data Size
--+2のbit0-7:Stop Low (A12-A19)
--+3のbit0-3:Stop High (A20-A23)
--+3のbit4-5:リザーブ (0にせよ)
--+3のbit6-7:Wait State (16bit用)
--+4のbit0-7:Offset Low (A12-A19)
--+5のbit0-5:Offset High (A20-A25)
--+5のbit6:REG Active
--+5のbit7:Write Protect
--CPUからのI/Oアクセス命令が発せられたとき、もしそのアド...
--これでPCカード側のaddrをアクセスする、という仕組みならI...
--PCカードへのアクセスアドレスは、(addr + Offset)となりま...
--Zero Wait Stateを1にすると、このゾーンに8bitアクセスが...
--Data Sizeを1にすると、16bitアクセスが許可されます。常に...
--Wait Stateは16bitアクセス時のwaitをいくつ入れるかを決め...
--REG Activeを1にすると、属性メモリ空間モードになり、0に...
--Write Protectを1にすると、このウィンドウへのアクセスで...
-Card Detect and General Control (?, 0x16)
--bit0:16Delay
--bit1:Configuration Reset
--bit2:GPI Enable
--bit3:GPI Control
--bit4:Resume
--bit5:Software IRQ
--bit6-7:分かりません (すみません)
--名前の分かっているbitも使い方はまだよくわかっていません。
-Global Control (?, 0x1e)
--bit0:Power Down
--bit1:CSC LEV
--bit2:WRBACK
--bit3:IRQ_0_LEV
--bit4:IRQ_1_LEV
--bit5-7:分かりません (すみません)
--名前の分かっているbitも使い方はまだよくわかっていません。
-Mode Control 1 (?, 0x1f)
--bit0-7:分かりません (すみません)
-Mode Control 2 (?, 0x2f)
--bit0-7:分かりません (すみません)
* 割り込みを使わない制御例
-割り込みを使わないで制御する例を紹介します。まずはこれを...
-まず最初は存在チェックです。Identification and Revision ...
-存在を確認できたら、誤動作を防ぐために、Address Window E...
-Interface Status (0x01)を読み込んで、bit2-3が11かどうか...
--非11から11になった瞬間に、すぐにカードへのアクセスが可...
--最初に変化を検出したらタイマーを仕掛けて、100ms~1000ms...
-カードが検出できたのなら、カードに電気を供給しましょう。...
--CardBusで16bitカードに電気を供給する方法は、CardBusのペ...
-カードに無事電気を供給できたら、次はカードリセットです。...
-リセットできたら、次は属性メモリ空間へのアクセスです。仮...
--CompactFlashをメモリマップトモードで利用する場合は例外...
--ここでは例として、0xd0000~0xd0fffに属性メモリ空間の最...
--レジスタ0x10~0x15に、次の値をセットします。
--0xd0, 0xc0, 0xd0, 0x00, 0x30, 0x7f
--もしCardBusのPCIC互換機能を使っている場合は、メモリウィ...
--そしてAddress Window Enable (0x06)に0x21を書いてメモリ...
--この状態で0xd0000から読んでいけば、[[(PCMCIA)CIS]]タプ...
-ここから先はカードによって違うので、説明はここまでにした...
-カードの電源を切る場合も一応書いておきます。ここでもやは...
--CardBusの場合は、Power and RESETDEV Control (0x02)のbit...
* こめんと欄
-こちらの記事大変参考になりました。ありがとうございます。...
-0x02にbit7を立てたら見えました。お騒がせしました。 -- ''...
#comment
ページ名: