1.2 FX2の内部ブロック

 FX2の内部ブロックは図1のようになっています.USB2.0対応のトランシーバ,CPUコア,8.5Kバイトのメモリ,4KバイトのエンドポイントFIFOなどに加えて,GPIFと呼ばれる簡易ステートマシンや,I2Cコントローラなどが内蔵されています.次に,各ブロックについて見ていきましょう.

〔図1〕FX2のブロック図

USBトランシーバ

 USB2.0はUSB1.1の上位互換なので,USB2.0対応のハイスピード(480Mbps)のデバイスは,ホストがUSB1.1ならばUSB1.1のフルスピード(12Mbps)デバイスとして動作します.このため,FX2内部にも1.1(フルスピード)対応のトランシーバと2.0(ハイスピード)対応のトランシーバの両方が内蔵されています.

USBコントローラ

 USBコントローラは当然のことながら,USB1.1のフルスピードとUSB2.0のハイスピードの両方をサポートしています.

 FXシリーズと同様に,FX2もCPUのリセット制御や,内蔵SRAMへのアクセスなどの権利の主導権はUSBコントローラ側が握っています.またUSBコントローラが8051の助けを借りることなく,USBデバイスとして動作可能であるという点もFXシリーズと同様の大きな特徴です.

 ブート手順もFXシリーズと同様で,USBコントローラがシリアルROMの先頭バイトをチェックし,IDに応じた動作を行います.

・先頭バイトがC0h

 このときにはシリアルROMから,ベンダID,プロダクトID,デバイスIDがシリアルROMに格納されているので,それぞれシリアルROMから読み出して,そのIDを使って起動します.CPU(8051)はリセットは解除されませんが,USBコントローラが単独でUSBデバイスリクエスト処理を行うので,ホスト側からは通常のUSBデバイスとして認識されます.

・先頭バイトがC2h

 このとき,シリアルROMには8051が実行するためのプログラムが格納されます.ベンダIDやデバイスIDなども同じように格納される領域は決められているのですが,これらの値は実際には使われません.

 シリアルROMの内容はデバイス内部のSRAM(全部で8.5Kバイト)にダウンロードされ,格納が終了するとCPUのリセットが解除され,CPUはSRAM上に展開されたプログラムを実行します.

・先頭バイトがそれ以外,またはシリアルROMが存在しない

 USBコントローラは,デフォルトのチップベンダのIDを使って起動します.

・ベンダID:04B4h
・プロダクトID:8613h
・デバイスID:(デバイスのバージョン番号)

 チップベンダから提供されているFX2開発サポートツールであるEZ-USBコントロールパネルなどを使うためには,このIDで起動している必要があります.

8051CPUコア

 FX2内蔵の8051コアは,最高48MHzで動作します.命令コードはオリジナルの8051と完全に互換性がありますが,1マシンサイクルがオリジナルでは12クロックを要するのに対して,FX2内蔵CPUコアは4クロックと1/3で済んでいる点が異なります.

 命令実行に必要なマシンサイクル数は数値演算命令(DIV,MULなどは除く),論理演算,データ転送など,多くの命令でが命令バイト数と一致しています.つまり1バイト命令は1マシンサイクル(4クロック)で,2バイト命令は2マシンサイクル(8クロック)かかるものが大半です.

内蔵RAM

 FX2のメモリマップは図2のようになっています.FX2には8.5KバイトのSRAMが内蔵されていますが,このうち0.5KバイトはE000h〜E1FFhの領域で,データ専用,残り8Kバイト分はメインRAMと呼ばれ,データとプログラム領域の両方に使うことができます.

〔図2〕FX2のメモリマップ

 メインRAM領域は,1FFFH番地以下の部分に配置されています.ただし,8051ファミリCPUの特徴として,汎用レジスタやフラグ類,特殊レジスタ類がメモリ空間の下位256バイトまでの領域(0000h〜00FFh)に配置されるので,この領域の取り扱いには注意が必要です.

 とくに8051の場合,0080h〜00FFhの領域はSFR(スペシャルファンクションレジスタ)と汎用データメモリで共用されており,どちらをアクセスするかはアドレッシングモードによって切り替わるという,多少変わったアーキテクチャになっています.8051対応のCコンパイラでも,この点には配慮されていて,たとえば_sfrのようなキーワードを変数宣言の先頭に付けることで,SFR領域へのアクセスを行うようなコード生成がなされます.

I2Cコントローラ

 I2CバスはFX2が起動時に動作モードを決めたり,プログラムを読み込んで内蔵SRAMにプログラムを転送するためのシリアルROM(ブート用シリアルROM)を接続するほか,市販のI2Cバスデバイスを接続する目的にも使用可能です.

 I2Cバスではアドレスが3ビットあるので,論理上は8デバイスまで接続可能ということになりますが,このうちブート用のシリアルROMはアドレス001hを使用しています.これ以外のアドレスはユーザー側で任意に使うことができます.

 ちなみに,チップベンダが提供しているFX2デベロップメントキットではPCF8574(Philips)というI2Cバス対応のディジタル入出力デバイスを使ってLEDやスイッチを接続することで,汎用I/Oポートを使わずに実現しています.


インデックス
プロローグ レガシーフリー宣言! ――USBのすすめ
第1章 USB2.0対応コントローラEZ-USB FX2の詳細
 インテリジェント型ターゲットコントローラEZ-USB FX2
 ◆1.1 FX2の概要
 ◆1.2 FX2の内部ブロック  
 ◆1.3 エンドポイント構成

今月号特集トップページへ戻る


Copyright 2003 桑野雅彦