本 資 料 に 掲 載 されている 情 報 は インテル 製 品 の 概 要 説 明 を 目 的 としたものです 本 資 料 は 明 示 されてい るか 否 かにかかわらず また 禁 反 言 によるとよらずにかかわらず いかなる 知 的 財 産 権 のライセンスを 許 諾 するためのものではありません 製 品 に 付 属 の 売 買 契 約 書 Intel's Terms and conditions of Sales に 規 定 さ れている 場 合 を 除 き インテルはいかなる 責 を 負 うものではなく またインテル 製 品 の 販 売 や 使 用 に 関 する 明 示 または 黙 示 の 保 証 ( 特 定 目 的 への 適 合 性 商 品 性 に 関 する 保 証 第 三 者 の 特 許 権 著 作 権 その 他 知 的 所 有 権 を 侵 害 していないことへの 保 証 を 含 む)にも 一 切 応 じないものとします インテル 製 品 は 医 療 救 命 延 命 措 置 などの 目 的 への 使 用 を 前 提 としたものではありません インテル 製 品 は 予 告 なく 仕 様 が 変 更 される 場 合 があります 最 新 の 仕 様 をご 希 望 の 場 合 や 製 品 をご 注 文 の 場 合 は お 近 くのインテルの 営 業 所 または 販 売 代 理 店 にお 問 い 合 わせください 本 書 で 紹 介 されている 注 文 番 号 付 きのドキュメントや インテルのその 他 の 資 料 を 入 手 するには 1-800-548-4725( 米 国 )にお 問 い 合 わせになるか インテルの Web サイト http://www.intel.com/ にアクセスしてください Intel インテル Intel ロゴ MMX Intel XScale は アメリカ 合 衆 国 およびその 他 の 国 における Intel Corporation またはその 子 会 社 の 商 標 または 登 録 商 標 です * その 他 の 社 名 製 品 名 などは 一 般 に 各 社 の 商 標 または 登 録 商 標 です 2005 Intel Corporation. 無 断 での 引 用 転 載 を 禁 じます
目 次 目 次 1.0 はじめに... 5 2.0 ハードウェアの 概 要... 5 2.1 インテル PXA27x プロセッサのメモリ インターフェイス... 5 2.2 インテル PXA27x プロセッサの VLIO インターフェイス... 6 2.3 インテル PXA27x プロセッサの DMA コントローラ インターフェイス... 7 2.4 CompactFlash のトゥルー IDE 規 格... 8 3.0 インテル PXA27x プロセッサの VLIO インターフェイスと トゥルー IDE CompactFlash インターフェイスとのマッピング... 9 3.1 インテル PXA27x プロセッサへの CompactFlash HDD の 接 続... 10 3.2 トゥルー IDE マルチワード DMA モードのブロック 図... 11 3.3 タイミングに 関 する 考 慮 事 項... 12 3.4 インテル PXA27x プロセッサのレジスタ 設 定... 13 3.4.1 MSC レジスタ 設 定... 13 3.4.2 インテル PXA27x プロセッサの GPIO レジスタ 設 定... 14 4.0 HDD デバイスドライバ... 14 4.1 HDD ドライバの 概 要... 14 4.2 HDD 転 送 モードの 設 定... 15 4.3 I/O アドレス マッピング... 15 4.4 PIO モードと 割 り 込 み 処 理... 15 4.5 DMA モードと 割 り 込 み 処 理... 16 4.6 高 度 な 機 能 の 設 定... 16 4.7 Linux ドライバに 関 する 考 慮 事 項... 17 4.7.1 I/O アドレス マッピング... 17 4.7.2 DMA チャネルの 要 求... 18 4.7.3 IRQ の 要 求... 18 4.7.4 DMA バッファおよびディスクリプタの 割 り 当 て... 18 4.8 Microsoft* Windows* CE ドライバに 関 する 考 慮 事 項... 18 4.8.1 I/O アドレス マッピング... 18 4.8.2 DMA チャネルの 要 求... 18 4.8.3 IRQ の 要 求... 18 4.8.4 DMA バッファおよびディスクリプタの 割 り 当 て... 18 5.0 まとめ... 19 図 表 図 1. インテル PXA27x プロセッサのブロック 図... 6 図 2. トゥルー IDE PIO モードのブロック 図... 10 図 3. トゥルー IDE DMA モードのブロック 図... 12 表 1. VLIO メモリ インターフェイス 信 号... 7 表 2. DMA コントローラ インターフェイス 信 号... 8 表 3. 主 要 な CompactFlash トゥルー IDE 信 号 の 一 覧... 9 表 4. メモリ マッピング... 11 表 5. 略 語 の 定 義... 19 アプリケーション ノート 3
改 訂 履 歴 日 付 改 訂 番 号 説 明 2005 年 6 月 001 アプリケーション ノート VLIO メモリ インターフェイスを 介 したイ ンテル PXA27x プロセッサ ファミリとハードディスク ドライブとの 接 続 の 初 版 4 アプリケーション ノート
はじめに 1.0 はじめに ハンドヘルド 機 器 の 機 能 拡 大 に 伴 い システム 内 に 求 められるストレージ 容 量 が 増 加 しています 一 方 ハードディスク ドライブ(HDD)では 容 量 の 増 加 のほか 価 格 の 低 下 と 小 型 化 が 進 ん でいます 1.8 インチや 1.0 インチなどの 小 型 HDD は 一 部 の 設 計 分 野 ではフラッシュ ストレー ジの 競 合 製 品 になっています 小 型 HDD の 有 望 な 用 途 としては MP3 プレーヤ ポータブル メ ディア プレーヤ ポータブル ゲーム システム PDA 電 話 などがあります インテル PXA27x プロセッサ ファミリ( 以 後 PXA27x プロセッサ )は Intel XScale マイク ロアーキテクチャをベースにした 統 合 型 のシステム オン チップ 設 計 を 採 用 しています 624MHz の Intel XScale コアと 数 多 くのオンチップ 周 辺 機 器 を 組 み 合 わせた PXA27x プロセッサは ハン ドヘルド 市 場 と 携 帯 電 話 市 場 でさまざまな 製 品 を 実 現 します PXA27x プロセッサのメモリ コン トローラは HDD インターフェイスを 実 装 するためのソリューションを 複 数 提 供 しています こ のインターフェイスには PCMCIA/CompactFlash* インターフェイスや Variable Latency Input/Output (VLIO)インターフェイスが 含 まれます 本 書 では VLIO メモリ インターフェイスを 利 用 して CompactFlash トゥルー IDE モード パラレル ATA HDD を PXA27x プロセッサに 実 装 する 方 法 について 詳 細 に 説 明 します また Programmed I/O(PIO)やフロースルー DMA を 利 用 した 設 定 についても 紹 介 します VLIO インターフェイス ソリューションは わずかなコンポーネントを 追 加 するだけで ローコストで 効 率 的 な DMA パフォーマンスを 発 揮 します 2.0 ハードウェアの 概 要 ここでは VLIO インターフェイスを 介 して PXA27x プロセッサを HDD に 接 続 する 際 のハードウェ ア 要 件 について 説 明 します 2.1 インテル PXA27x プロセッサのメモリ インターフェイス PXA27x プロセッサのメモリ コントローラは 以 下 のインターフェイスを 介 してさまざまな 種 類 のメモリと 処 理 をサポートします SDRAMインターフェイス フラッシュ メモリ インターフェイス( 非 同 期 / 同 期 ) ROMインターフェイス VLIOインターフェイス PCカード(PCMCIA)インターフェイス 代 替 バス マスタ インターフェイス 図 1 に PXA27x プロセッサとメモリ インターフェイスを 示 します アプリケーション ノート 5
ハードウェアの 概 要 図 1. インテル PXA27x プロセッサのブロック 図 LCD RTC OS 4 x PWM I/O 3 x SSP USIM I 2 S AC 97 Standard UART Full-Function UART Bluetooth UART Fast Infrared I 2 C USB MSL MMC/SD/SDIO USB OTG DMA / MMX Intel XScale SRAM USB 13 MHz Osc LCD 32.768 khz Osc VLIO PC/ CompactFlash ASIC XCVR SDRAM/ ROM ROM/ / SRA 0 1 GPIO JTAG 2.2 インテル PXA27x プロセッサの VLIO インターフェイス 6 つのスタティック メモリ ロケーション(nCS<5:0>)はいずれも 対 応 する MSCx[RTx] を 0b100 にプログラミングすれば VLIO モードで 動 作 するように 設 定 することが 可 能 です 静 的 なチップ 選 択 を VLIO インターフェイスとして 利 用 する 場 合 SRAM のときと 同 じように 機 能 しますが 重 要 な 違 いがいくつかあります VLIOでは RDY ピンを 介 してウェイトステートの 変 数 を 挿 入 できます VLIO の 読 み 出 しアクセスは noe がバーストのビートごとにトグルするという 点 で SRAM の 読 み 出 しアクセスと 異 なります 最 初 の noe アサーションは チップ 選 択 信 号 (ncsx)がアサートされてから 2 CLK_MEM サ イクル 後 に 発 生 します VLIOの 書 き 込 みでは nwe の 代 わりに npwe が 使 用 されます 表 1 に VLIO メモリデバイスとのやりとりに 利 用 可 能 な 信 号 を 示 します 6 アプリケーション ノート
ハードウェアの 概 要 表 1. VLIO メモリ インターフェイス 信 号 信 号 名 方 向 極 性 説 明 ncs<5:0> 出 力 アクティブ ロー スタティック メモリのチップ 選 択 MA<25:0> 出 力 該 当 せず すべてのメモリタイプへの 出 力 アドレス 注 意 : すべての VLIO デバイスは PXA27x プロセッ サのメモリ コントローラとやりとりする 際 に16ビット 以 上 のバス 幅 を 必 要 とするため MA0 をバイトアドレス 指 定 に 使 用 しないで ください MA0 を 使 って 128MB パーティ ション 内 の 上 位 64MBメモリをアドレス 指 定 するには オプションのアドレス 指 定 モード を 利 用 できます MD<31:0> 双 方 向 該 当 せず すべてのメモリタイプの 双 方 向 データ DQM<3:0> 出 力 アクティブ ハイ データ バイト マスク 制 御 DQM<0> は MD<7:0> に 対 応 DQM<1> は MD<15:8> に 対 応 DQM<2> は MD<23:16> に 対 応 DQM<3> は MD<31:24> に 対 応 0 = 対 応 するバイトをマスクしない 1 = 対 応 するバイトをマスクする nwe 出 力 アクティブ ロー VLIO メモリの 書 き 込 みを 有 効 化 noe 出 力 アクティブ ロー スタティック メモリの 出 力 を 有 効 化 RDY 入 力 アクティブ ハイ ウェイトステートを 挿 入 するための VLIO 信 号 その 他 の I/O 信 号 0 = 待 機 1 = VLIO の 準 備 が 完 了 RDnWR 出 力 アクティブ ハイ 出 力 トランシーバによって 使 用 されるデータ 方 向 の 信 号 0 = MD<31:0> は PXA27x プロセッサによって 制 御 される 1 = MD<31:0> は PXA27x プロセッサによって 制 御 されない 2.3 インテル PXA27x プロセッサの DMA コントローラ インター フェイス PXA27x プロセッサの DMA コントローラは 周 辺 機 器 やコンパニオン チップによって 生 成 され た 要 求 に 応 じて メモリシステムとの 間 でデータ 転 送 を 行 います こうした 周 辺 機 器 やコンパニオ ン チップは アドレスおよびコマンドをメモリシステムに 直 接 提 供 することができません 代 わ りに アドレスおよびコマンドは ソフトウェアによって 設 定 され PXA27x プロセッサの DMA コ ントローラ 内 にある 32 本 の DMA チャネルによって 維 持 されます PXA27x プロセッサの DMA コン トローラは フロースルー 転 送 とフライバイ 転 送 の 両 方 をサポートしています フロースルー 転 送 とフライバイ 転 送 の 使 用 法 および 制 約 や PXA27x プロセッサの DMA コントローラの 詳 細 につい ては Intel PXA27x Processor Family Design Guide のセクション 5 と Intel PXA27x Processor Family Developer's Manual を 参 照 してください 本 書 で 扱 われている HDD インターフェイスでは アプリケーション ノート 7
ハードウェアの 概 要 フロースルーDMA を 利 用 することによって データ 転 送 処 理 を 行 う PXA27x プロセッサの DMA コ ントローラに 起 因 したソフトウェアのオーバーヘッドを 削 減 しながら 高 いスループットを 実 現 し ています 表 2 に DMA コントローラとのやりとりに 利 用 可 能 な 信 号 を 示 します 表 2. DMA コントローラ インターフェイス 信 号 信 号 名 種 類 説 明 DREQ<2:0> 入 力 外 部 コンパニオン チップ 要 求 外 部 コンパニオン チップは DMA 転 送 要 求 が 必 要 なときに DREQ 信 号 をアサートします DMA コントローラは ローからハイへの 移 行 を 登 録 して 新 しい 要 求 を 識 別 します DMA コントローラがローからハイへ の 移 行 を 認 識 できるように 信 号 は 4 MEM_CLK サイクルの 間 アサート 状 態 が 維 持 されなければなりません アサートが 解 除 された 後 は 少 なくと も 4 MEM_CLK サイクルの 間 アサート 解 除 の 状 態 が 維 持 されなければなり ません 外 部 コンパニオン チップは データ 転 送 の 完 了 まで 待 機 しなくても 次 の 要 求 をアサートできます このコンパニオン チップでは 各 DREQ<2:0> ピンに 最 大 で 31 の 実 行 待 ち 要 求 を 保 持 することが 可 能 です 実 行 待 ち 要 求 の 件 数 は 専 用 ステータス レジスタ DRQSRx に 記 録 され ます DREQ<1:0> ピン 上 の 要 求 は フライバイ モードとフロースルー モー ドのいずれにおいてもデータ 転 送 に 使 用 されます DREQ<2> ピン 上 の 要 求 は フロースルー モードでのみデータ 転 送 に 使 用 されます DVAL<1:0> 出 力 有 効 外 部 コンパニオン チップ メモリ コントローラは DVAL をアサートして コンパニオン チップ に 通 知 します データを 制 御 する 必 要 があるか または 出 力 データが 有 効 です 2.4 CompactFlash のトゥルー IDE 規 格 CF+ and CompactFlash Specification, Revision 3.0 1 では HDD への 接 続 に 利 用 可 能 な 3 種 類 の 動 作 モードが 定 義 されています PCカード ATA 使 用 I/O モード PCカード ATA 使 用 メモリモード トゥルー IDE モード エンベデッド 製 品 で 使 用 されるパラレル ATA HDD のほとんどは トゥルー IDE モードで 動 作 しま す このモードには ローコスト ATA HDD の 互 換 性 優 れたパフォーマンスといった 利 点 があ ります 表 3 に トゥルー IDE モードで 使 用 される CompactFlash 信 号 を 示 します 1. CompactFlash およびトゥルー IDE 規 格 の 詳 細 については CF+ and CompactFlash Specification Revision 3.0 を 参 照 してくだ さい CompactFlash Association の Web サイト http://www.compactflash.org/( 英 語 )からダウンロードできます 8 アプリケーション ノート
インテル PXA27x プロセッサの VLIO インターフェイスとトゥルー IDE CompactFlash インターフェイスとの マッピング 表 3. 主 要 な CompactFlash トゥルー IDE 信 号 の 一 覧 信 号 名 方 向 説 明 D<0:15> 双 方 向 データライン A<0:2> 入 力 HDD アドレスライン <0:2> IORD# 入 力 I/O 読 み 出 しストローブを 制 御 IOWR# 入 力 I/O 書 き 込 みストローブを 制 御 ATA SEL# 入 力 トゥルー IDE モードを 有 効 化 IOCS16# 出 力 16 ビット 転 送 を 指 定 DMARQ# 出 力 DMA 要 求 DMACK 入 力 DMA 肯 定 応 答 INTRQ 出 力 割 り 込 み 要 求 Reset# 入 力 リセット CSEL# 入 力 ケーブル 選 択 CS#<0:1> 入 力 チップ 選 択 信 号 IORDY 出 力 入 出 力 が 準 備 完 了 3.0 インテル PXA27x プロセッサの VLIO インターフェイスと トゥルー IDE CompactFlash インターフェイスとのマッピング このセクションでは PXA27x プロセッサの VLIO インターフェイスに 対 する トゥルー IDE モー ドでの CompactFlash カードの 物 理 / 論 理 インターフェイスについて 説 明 します 本 書 に 掲 載 されて いるデバイスドライバのサンプルコードでは CompactFlash HDD デバイスがトゥルー IDE モード で 接 続 されているという 想 定 です 電 源 投 入 シーケンス 中 に ATASEL#(OE#) 入 力 信 号 がホスト によって 接 地 された 場 合 のみ CompactFlash カードはトゥルー IDE モードに 設 定 されます CompactFlash のトゥルーIDE モードの 場 合 本 書 で 扱 われている 設 計 は PIO モード 4 および DMA モード 2 で 動 作 するように 設 計 されていますが Ultra DMA やその 他 の 動 作 モードでは 動 作 しませ ん 図 2 に トゥルー IDE PIO モードにおける PXA27x プロセッサの VLIO インターフェイスと CompactFlash との 接 続 のブロック 図 を 示 します アプリケーション ノート 9
インテル PXA27x プロセッサの VLIO インターフェイスとトゥルー IDE CompactFlash インターフェイスとの マッピング 図 2. トゥルー IDE PIO モードのブロック 図 3.1 インテル PXA27x プロセッサへの CompactFlash HDD の 接 続 本 書 では HDD は 3.3V のロジックを 使 用 していると 想 定 しています 一 方 PXA27x プロセッ サは 1.8V のメモリバスを 使 用 しているため HDD インターフェイス ロジックとの 間 でロジック をバッファするのにレベルシフタが 使 用 されていると 想 定 しています 以 下 の 各 項 目 では PXA27x プロセッサに 対 する CompactFlash トゥルー IDE 信 号 のマッピングに ついて 説 明 します HDD D15~D0:HDDのデータラインは PXA27xプロセッサのD0~D15ラインに 接 続 されます HDD A2 ~ A0:すべての VLIOデバイスは PXA27x プロセッサのメモリ コントローラとやり とりする 際 に 16 ビット 以 上 のバス 幅 を 必 要 とするため A[2:0] は PXA27x プロセッサの A[3:1] に 接 続 されます PXA27x プロセッサの A0 によるバイト 選 択 は 必 要 ありません HDD A10 ~ A3:HDD のこれらのアドレスラインは 接 地 されます HDD IORD#:CompactFlash カードからの I/O 読 み 出 しストローブ ラインは PXA27x プロ セッサのメモリ コントローラの noe に 接 続 されます HDD IOWR#:CompactFlash カードからの I/O 書 き 込 みストローブ ラインは PXA27x プロ セッサのメモリ コントローラの npwe に 接 続 されます HDD RESET#:CompactFlash カードからのリセットラインは PXA27x プロセッサの nreset_ Outまたはパワーオン リセット 回 路 に 直 接 接 続 され CompactFlashデバイスをリセットします HDD ATASEL#:この 信 号 を 接 地 すると トゥルー IDE モードが 指 定 されます HDD CSEL#:この 信 号 を 接 地 すると 接 続 可 能 なドライブ(マスタドライブ)が 1 つしかな いことを 示 せます HDD WE#:この 信 号 は VCC に 接 続 されます 10 アプリケーション ノート
インテル PXA27x プロセッサの VLIO インターフェイスとトゥルー IDE CompactFlash インターフェイスとの マッピング HDD DMARQ DMACK#:これらの 信 号 は PXA27x プロセッサと HDD の 間 の DMA 転 送 に 固 有 のものです トゥルー IDE PIO モードでは 使 用 されません PIO モードの 場 合 HDD DMACK# は 接 続 しないでおくか VCC にプルアップします これらの 信 号 の 詳 細 と 未 使 用 の 信 号 の 処 理 については CF+ and CompactFlash Specification を 参 照 してください トゥルー IDE マルチワード DMA モードの 場 合 信 号 のロジックと 接 続 の 詳 細 については 本 書 のセク ション 3.2 を 参 照 してください HDD IOCS16# CD2# CD1# IORDY DASP# PDIAG# VS1# VS2#:これらの 信 号 は 使 用 されません HDD CS0# CS1#: 本 書 で 扱 われている 設 計 では PXA27x の 2 本 のアドレスラインと ncs5 を 利 用 して HDD に 必 要 な 2 つのチップ 選 択 信 号 を 取 得 します HDD の CS0# 信 号 および CS1# 信 号 に 対 する PXA27x プロセッサの ncs5 のメモリ マッピングについては 表 4 を 参 照 して ください 表 4. メモリ マッピング ncs55 A4 A5 CS0# CS1# R/W フィールド アドレス 0 0 1 0 1 タスク ファイル レジスタ 0x1400_0020 0 1 0 1 0 CTL レジスタ 0x1400_0010 0 1 1 1 1 DMA 0x1400_0030 1 X X 1 1 該 当 せず 該 当 せず 3.2 トゥルー IDE マルチワード DMA モードのブロック 図 PXA27x DMA コントローラのフロースルー モードは PXA27x プロセッサと HDD の 間 のデータ 転 送 に 利 用 できます ただし DMA サポートの 実 装 に 当 たっては 以 下 の 2 つの 課 題 を 解 決 しな ければなりません 1. PXA27x プロセッサの DMA 信 号 はエッジトリガされるが HDD の DMA 信 号 はレベルトリガされ ます この 課 題 を 解 決 するために ブロック 図 では AND ゲートを 追 加 して PXA27x プロセッサの DREQ0 信 号 に 向 かう DMARQ ライン 信 号 と ncs5 信 号 とを 組 み 合 わせています 2. PXA27x プロセッサの DMA コントローラがフロースルー モードで 動 作 する 場 合 DMA 肯 定 応 答 信 号 が 生 成 されません この 課 題 を 解 決 するために HDD に 必 要 な DMACK 信 号 として ncs5 ピン を 使 用 しています 図 3 に トゥルー IDE DMA モードにおける PXA27x プロセッサの VLIO インターフェイスと CompactFlash との 接 続 のブロック 図 を 示 します アプリケーション ノート 11
インテル PXA27x プロセッサの VLIO インターフェイスとトゥルー IDE CompactFlash インターフェイスとの マッピング 図 3. トゥルー IDE DMA モードのブロック 図 3.3 タイミングに 関 する 考 慮 事 項 CompactFlash の 規 格 では CompactFlash トゥルー IDE の PIO モード 4 および DMA モード 2 に 関 す るタイミング 要 件 が 定 義 されています 詳 細 については CF+ and CompactFlash Specification の 第 4 章 を 参 照 してください タイミングの 詳 細 な 比 較 は Intel PXA27x Processor Family Developer's Manual Intel PXA27x Processor Electrical, Mechanical, and Thermal Specification HDD のドキュ メントを 参 考 にして 行 ってください PXA27x VLIO インターフェイスは フラッシュや SRAM などの 高 速 メモリデバイスとやりとりす るように 設 計 されています そのため 一 部 のタイミング パラメータについては 特 別 な 考 慮 が 必 要 です いくつかの HDD ベンダのデバイスを 分 析 した 結 果 によると PXA27x プロセッサで 指 定 された 制 限 には CS Valid to -IORD/-IOWR と Write Data Hold が 近 いことが 判 明 していま す システム 設 計 者 は それぞれ 独 自 のタイミング 分 析 とコンポーネント 選 択 を 行 ってください 場 合 によっては グルーロジックのタイミングを 調 整 する 必 要 があります または タイミング 要 件 が 異 なる 別 の HDD を 選 択 したり わずかなタイミングの 差 が 許 容 されるかどうか HDD メー カに 確 認 する 必 要 があります 12 アプリケーション ノート
インテル PXA27x プロセッサの VLIO インターフェイスとトゥルー IDE CompactFlash インターフェイスとの マッピング 3.4 インテル PXA27x プロセッサのレジスタ 設 定 3.4.1 MSC レジスタ 設 定 PXA27X ncs5 を IDE インターフェイスに 接 続 するには MSC2 レジスタを 設 定 してトゥルー IDE インターフェイスのタイミング 要 件 を 満 たす 必 要 があります MSC2 レジスタは ncs5 および ncs4 を 対 象 にしており ncs5 を 設 定 するには 同 レジスタの 上 位 半 分 のワードのみ 修 正 が 必 要 です ビット 31[RBUFF]: 低 速 のメモリデバイスを 指 定 するには このビットを 設 定 します ビット 30 ~ 28 [RRR]: 読 み 出 し / 書 き 込 み 後 に ncs がアサート 解 除 されたときから ncs がア サートされるまでの 間 隔 を 定 義 します メモリクロックが 104MHz の 場 合 はこのフィールドを 0b0001 に 設 定 し 208MHz の 場 合 は 0b0010 に 設 定 します ビット 27 ~ 24 [RDN]:MSCx[RDN] フィールドは 以 降 の 読 み 出 しアクセス 時 間 を 制 御 し npwe/noe でのアドレスホールドのためにフラッシュ メモリをバーストします メモリク ロックが 104MHz の 場 合 はこのフィールドを 0b0010 に 設 定 し 208MHz の 場 合 は 0b0100 に 設 定 します ビット 23 ~ 20 [RDF]:MD/DQM の 場 合 書 き 込 み 間 の npwe のアサート 解 除 期 間 と npwe/noe のアサート 期 間 に 設 定 します メモリクロックが 104MHz の 場 合 はこのフィールドを 0b0111 に 設 定 し 208MHz の 場 合 は 0b1100 に 設 定 します ビット 19:16 ビットのデータバス 幅 を 指 定 するには このビットを 1 に 設 定 します ビット 16 ~ 18:VLIO デバイスを 指 定 するには このフィールドを 0b100 に 設 定 します 例 1. MSC2 レジスタを 設 定 するコードの 例 MSC2 レジスタを 設 定 するには: unsigned long msc2=msc2; msc2&=0x0000ffff; #ifndef VLIO_MEM208M msc2 =0 << 31 1 << 28 2 << 24 7 << 20 1 << 19 4 << 16; #else msc2 =0 << 31 2 << 28 4 << 24 14 << 20 1 << 19 4 << 16; #endif MSC2= msc2; アプリケーション ノート 13
HDD デバイスドライバ 3.4.2 インテル PXA27x プロセッサの GPIO レジスタ 設 定 VLIO 信 号 および DMA 信 号 の 要 件 を 有 効 にするには 以 下 の GPIO を 設 定 する 必 要 があります DREQ0 GPIO 20:DMA 要 求 信 号 として 設 定 する 必 要 があります このピンを 入 力 および 代 替 機 能 1 に 設 定 します RDY GPIO 18: 入 力 および 代 替 機 能 1 に 設 定 します ncs5 GPIO 33: 出 力 および 代 替 機 能 2 に 設 定 します npwe GPIO 49: 出 力 および 代 替 機 能 2 に 設 定 します 例 2. GPIO レジスタを 設 定 するコードの 例 GPIO レジスタを 設 定 するには: // pin 18 19 pins[0]=2;fn[0]=2; pins[1]=xllp_gpio_rdy; pins[2]=xllp_gpio_mbreq; fn[1]=xllp_gpio_alt_fn_1; fn[2]=xllp_gpio_alt_fn_1; XllpGpioSetDirectionIn((P_XLLP_GPIO_T) v_pgpioreg, pins); XllpGpioSetAlternateFn((P_XLLP_GPIO_T)v_pGPIOReg, pins, fn); // pin 33 49 pins[0]=2;fn[0]=2; pins[1]=xllp_gpio_npwe; pins[2]=xllp_gpio_ncs5; fn[1]=xllp_gpio_alt_fn_2; fn[2]=xllp_gpio_alt_fn_2; XllpGpioSetOutputState1((P_XLLP_GPIO_T)v_pGPIOReg, pins); XllpGpioSetDirectionOut((P_XLLP_GPIO_T)v_pGPIOReg, pins); XllpGpioSetAlternateFn((P_XLLP_GPIO_T)v_pGPIOReg, pins, fn); 4.0 HDD デバイスドライバ 4.1 HDD ドライバの 概 要 トゥルー IDE HDD ドライバは Linux* および Microsoft* Windows* CE 向 けのブロックドライバと して OS に 登 録 されます いずれの OS でも ドライバは 読 み 出 し / 書 き 込 みと IOCTL 処 理 を 実 装 する 必 要 があります このドライバでは PIO モードと DMA モードの 両 方 がサポートされており 上 位 層 アプリケーションへの 読 み 出 し / 書 き 込 みインターフェイスは 同 一 です PIOモードの 場 合 HDD インターフェイスから 読 み 出 されるデータと HDD インターフェイスに 書 き 込 まれるデータ はすべて CPU コアが 直 接 処 理 します そのため HDD のデータにアクセスする 際 は CPU の 使 用 率 がきわめて 高 くなります DMA モードの 場 合 CPU コアは DMA バッファとディスクリプタ の 準 備 にしか 関 与 しません DMA コントローラが SDRAM と HDD の 間 のデータ 転 送 を 担 当 する ため CPU コアを 解 放 してその 他 のシステムタスクの 処 理 に 割 り 当 てられます 14 アプリケーション ノート
HDD デバイスドライバ 4.2 HDD 転 送 モードの 設 定 ドライバ 初 期 化 の 最 初 の 段 階 で HDD 転 送 モードを PIO モード 4 や DMA モード 2 などに 設 定 しま す 例 3に SET_FEATURE(0xEF)コマンドを 使 用 してHDD 転 送 モードを 設 定 する 方 法 を 示 します 例 3. HDD 転 送 モードを 設 定 するコードの 例 HDD 転 送 モードを 設 定 するには: #define ATA_CMD_SETFEATURES 0xEF #define SETFEATURES_XFER 0x03 #define XFER_MW_DMA_2 0x0c #define XFER_PIO_4 0x22 //set transfer modes VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_DRV_HEAD,0xa0); #ifdef VLIODISK_PIOMODE4 VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_SECT_CNT, XFER_PIO_4); #else VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_SECT_CNT, XFER_MW_DMA_2); #endif VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_FEATURE, SETFEATURES_XFER); VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_COMMAND, ATA_CMD_SETFEATURES); 4.3 I/O アドレス マッピング ncs5 の 場 合 物 理 アドレスは 0x14000000 から 始 まる 64MB スロットです この 物 理 I/O 領 域 に フル 機 能 でアクセスするには この 領 域 を 仮 想 アドレス 空 間 にマッピングする 必 要 があります 4.4 PIO モードと 割 り 込 み 処 理 トゥルー IDE HDD 割 り 込 みラインでは 高 度 なトリガ 処 理 が 行 われます PIO モードの 場 合 割 り 込 みは 以 下 のようにして 発 生 します 読 み 出 し: 1. まずホストがパラメータを HDD タスク ファイル レジスタにセットしてから 読 み 出 しコマン ドを 送 信 します 2. ホストは HDD 割 り 込 みの 発 生 を 待 機 します 3. HDD は 内 部 バッファ 内 にデータを 準 備 できると 割 り 込 みラインをプルアップして 割 り 込 みをト リガします 4. ホストは HDD から 通 知 を 受 け 取 ると 割 り 込 みモードにトラップし メモリバスを 介 して HDD か らデータを 読 み 出 します 5. すべてのデータの 読 み 出 しが 終 わると HDD は 割 り 込 みとステータスをクリアします 書 き 込 み: 1. まずホストがパラメータを HDD タスク ファイル レジスタにセットしてから 書 き 込 みコマン ドを 送 信 します 2. HDD は データを 受 け 取 る 準 備 が 整 うと DRQ ステータスをセットします 3. ホストがデータを HDD に 書 き 込 みます 4. HDD は 必 要 なデータをすべて 受 け 取 ると 割 り 込 みをトリガします アプリケーション ノート 15
HDD デバイスドライバ 5. ホストは HDD から 通 知 を 受 け 取 ると 割 り 込 みモードにトラップし ステータスをクリアします 4.5 DMA モードと 割 り 込 み 処 理 DMA モードの 場 合 割 り 込 みは 以 下 のようにして 発 生 します 読 み 出 し: 1. まずホストがパラメータを HDD タスク ファイル レジスタにセットし DMA とそのディスクリ プタを 準 備 してから 読 み 出 しコマンドを 送 信 します 2. HDD は ndmarq をアサートすることによって DMA を 要 求 します 3. ホスト DMA コントローラは ndmack 応 答 を 返 して メモリバスからデータを 読 み 出 します 4. すべてのデータの 読 み 出 しが 終 わると HDD は 割 り 込 みをトリガします 5. ホストは HDD から 通 知 を 受 け 取 ると 割 り 込 みモードにトラップし 割 り 込 みとステータスをク リアします 書 き 込 み: 1. まずホストがパラメータを HDD ファイルレジスタにセットし DMA とそのディスクリプタを 準 備 してから 書 き 込 みコマンドを 送 信 します 2. HDD は ndmarq をアサートすることによって DMA を 要 求 します 3. ホスト DMA コントローラは ndmack 応 答 を 返 して データを HDD に 書 き 込 みます 4. すべてのデータを 受 け 取 ると HDD は 割 り 込 みをトリガします 5. ホストは HDD から 通 知 を 受 け 取 ると 割 り 込 みモードにトラップし 割 り 込 みとステータスをク リアします 4.6 高 度 な 機 能 の 設 定 書 き 込 みキャッシュの 有 効 化 ほぼすべての HDD は 内 部 書 き 込 みバッファを 備 えていますが デフォルトではバッファが 常 に 無 効 になっています 書 き 込 みキャッシュを 有 効 にするには 機 能 パラメータ 2 を 指 定 して SET_ FEATURE(0xEF) コマンドを 実 行 します 例 4. 書 き 込 みキャッシュを 有 効 化 するコードの 例 書 き 込 みキャッシュを 有 効 にするには: #define ATA_CMD_SETFEATURES 0xEF #define SETFEATURES_EN_WCACHE 0x02 VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_DRV_HEAD,0xa0); VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_FEATURE, SETFEATURES_EN_WCACHE); VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_COMMAND, ATA_CMD_SETFEATURES); パワー マネジメント(PM)の 有 効 化 パワー マネジメント(PM) 機 能 を 利 用 すると HDD は 一 定 秒 数 アイドル 状 態 が 続 いた 場 合 に 自 動 的 にスタンバイ ステータスに 移 行 します 16 アプリケーション ノート
HDD デバイスドライバ PM 機 能 を 有 効 にするには Sector Count レジスタを 指 定 して ATA_CMD_SET_IDLE コマンドを 実 行 し スタンバイ ステータスに 移 行 するまでのアイドル 秒 数 (*5)を 設 定 します 例 5. パワー マネジメントを 有 効 化 するコードの 例 #define ATA_CMD_SET_IDLE 0xE3 VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_DRV_HEAD,0xa0); VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_SECT_CNT, 2); // set 2*5 seconds to idle mode VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_COMMAND, ATA_CMD_SET_IDLE); 複 数 セクタの 設 定 PIO モードの 場 合 デフォルトでは 各 セクタの 読 み 出 し / 書 き 込 みのたびに 割 り 込 みが 1 回 トリ ガされますが このような 割 り 込 みは 必 要 ありません ATA 仕 様 では 複 数 セクタを 定 義 して 効 率 化 を 図 っています このコマンドを 利 用 すると 複 数 のセクタが 単 一 の 割 り 込 みをトリガする ように 設 定 できます 例 6. 複 数 セクタを 設 定 するコードの 例 複 数 セクタを 設 定 するには: VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_SECT_CNT, pdisk->d_maxmultisectors); VLIO_WRITE_PORT_UCHAR(TRUE_IDE_ATA_REG_COMMAND, ATA_CMD_SETMULTI); パラメータ MaxMultiSectorsは HDD のアイデンティティ データにあります 4.7 Linux ドライバに 関 する 考 慮 事 項 Linux ドライバを 作 成 する 際 は 以 下 の 課 題 を 解 決 する 必 要 があります I/Oアドレスのマッピング DMAチャネルの 要 求 割 り 込 みの 要 求 DMAバッファおよびディスクリプタの 割 り 当 て 4.7.1 I/O アドレス マッピング Linux では mmap api を 利 用 して 物 理 アドレスを 仮 想 空 間 にマッピングできます または VLIO アドレス 空 間 を arch\arm\mach-pxa\ generic-bvd.c ファイルにあるシステムの 静 的 マッピング テー ブルに 追 加 するという 選 択 肢 もあります 例 7. 静 的 マッピング テーブルの 例 VLIO アドレス 空 間 が 追 加 された 静 的 マッピング テーブルの 例 を 以 下 に 示 します static struct map_desc standard_io_desc[] initdata = { /* virtual physical length domain r w c b */ { 0xf5000000, 0x14000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* VLIO IO */ { 0xf6000000, 0x20000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* PCMCIA0 IO */ { 0xf7000000, 0x30000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* PCMCIA1 IO */ { 0xf8000000, 0x40000000, 0x01800000, DOMAIN_IO, 0, 1, 0, 0 }, /* Devs */ { 0xfa000000, 0x44000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* LCD */ { 0xfc000000, 0x48000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Mem Ctl */ { 0xfe000000, 0x4c000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* USB host */ { 0xff000000, 0x00000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* UNCACHED_PHYS_0 */ LAST_DESC }; この 例 の 1 行 目 には 新 しく 追 加 された VLIO デバイスの MMU 属 性 が 記 載 されています アプリケーション ノート 17
HDD デバイスドライバ 4.7.2 DMA チャネルの 要 求 例 8. DMA チャネル 要 求 の 例 vlio_dma_channel=pxa_request_dma("vliodma",dma_prio_high, vlio_dma_finished, NULL); 4.7.3 IRQ の 要 求 例 9. IRQ 要 求 の 例 request_irq(hwif->irq,&ide_intr,sa,hwif->name,hwgroup) 4.7.4 DMA バッファおよびディスクリプタの 割 り 当 て 例 10. DMA バッファおよびディスクリプタの 割 り 当 ての 例 consistent_alloc( GFP_KERNEL, VLIO_DMA_DESC_NUM * sizeof(pxa_dma_desc), (void *)&vlio_ dma_descriptors_physical, 0); 4.8 Microsoft* Windows* CE ドライバに 関 する 考 慮 事 項 Linux ドライバの 場 合 と 同 様 に Microsoft* Windows* CE ドライバを 作 成 する 際 も 以 下 の 課 題 を 解 決 する 必 要 があります I/Oアドレスのマッピング DMAチャネルの 要 求 割 り 込 みの 要 求 DMAバッファおよびディスクリプタの 割 り 当 て 4.8.1 I/O アドレス マッピング 例 11. VLIO アドレス 空 間 のマッピング Windows* CE では VLIO アドレス 空 間 を 以 下 のようにマッピングできます v_vliobase = (char *)MmMapIoSpace(ioPhysicalBaseVlio,0x100,FALSE); 4.8.2 DMA チャネルの 要 求 例 12. DMA チャネル 要 求 の 例 XllpDmacAllocChannel(&v_DMAChannel, XLLP_DMAC_CHANNEL_PRIORITY_HIGH) 4.8.3 IRQ の 要 求 例 13. IRQ 要 求 の 例 InterruptInitialize(SYSINTR_EXPBD, pdisk->d_irqevent, NULL, 0) 4.8.4 DMA バッファおよびディスクリプタの 割 り 当 て 例 14. DMA バッファおよびディスクリプタの 割 り 当 ての 例 v_vliodmadescvirtual = (char *) HalAllocateCommonBuffer(&Adapter, TOTAL_BUF_SIZE, &PA, FALSE); 18 アプリケーション ノート
まとめ 5.0 まとめ 本 書 では PXA27x プロセッサを CompactFlash トゥルー IDE モードの HDD に 接 続 する 方 法 につい ての 詳 細 と 推 奨 事 項 を 紹 介 しました PIO モードおよび DMA モードでの HDD 接 続 のほか Linux および Windows* CE での HDD ドライバの 作 成 についても 説 明 しています 付 録 A: 略 語 表 5. 略 語 の 定 義 略 語 ATA CF CS DMA DRQ GPIO HDD IDE PDA PIO PM VLIO 説 明 Advanced Technology Attachment CompactFlash チップ 選 択 Direct Memory Access データ 要 求 汎 用 I/O ハードディスク ドライブ Integrated Device Electronics Personal Digital Assistant Programmed I/O パワー マネジメント Variable Latency Input/Output アプリケーション ノート 19
2005, Intel Corporation. 308422-001JA JPN/0510/PDF/SE/CHG/HU/HN