« 2005年7月 | トップページ | 2005年9月 »

2005.08.27

玄箱再び

なぜ玄箱かというと、MITOUJTAG新バージョンの動作検証のためです。
今回、MITOUJTAGのフラッシュROMライタを大きく改良したので、動作に間違いがないか、いろんな機器をつかってチェックしています。

というわけで、MITOUJTAGを使って玄箱のフラッシュROMをJTAGで書き換える手順を紹介します。

まず、玄箱にJTAGをつなぎます。

MPC8241のBSDLファイルを用意して、デバイスを追加します。自動シャットダウンを回避するため、後ろのスイッチを押しながら電源を入れます。

ちゃんとデバイスがつながっているかどうかを確認するため、とりあえずJTAGでサンプリングします。すると、下の図のように各ピンの状態が見えます。CPUのデータバスは、0x20040002と0x20040000を交互に繰り返しているようですが、これが何の命令を実行しているのかはわかりませんでした。(0x20040002の方が3倍くらい時間が長い)

JTAGフラッシュROMプログラマを立ち上げて、あらかじめ作っておいた「CPUのピンとフラッシュROMのピンの対応表」をロードします。MITOUJTAG BASICバージョン1.2.3では、接続形態が画面上に簡単に表示されるようになりました。この機器では、バス幅は8ビットでA-1を使うタイプ(つまりROMは16ビット品)であることが図示されます。

フラッシュROMライタの「調査」ボタンを押すとセクタ情報が自動的に調査されます。この玄箱に載っているフラッシュROMは、70個のセクタがありますが、全部のセクタが同じサイズではなく、ボトムの方のブロックサイズが細かくなっています。

ブートコードは、フラッシュメモリの物理アドレス0x300000番地から配置されますので、上の画面の左側に写っている表で、セクタ48(アドレス0x300000)のセルクリックし、この領域に40kバイト程度のブートコードを書き込みます。書き込みには約2分かかります。
今回のMITOUJTAGバージョンアップで、フラッシュROMのセクタ消去に対応したので、ブートコードだけを書いたり消したりするのが楽にできるようになりました。

玄箱にシリアルコンソールをつなげて起動すると、カーネルイメージがないとエラーを表示します。

また、ブートコードの起動から、エラー出力とシャットダウンまでの過程が、下の図のように波形でも見えました。ほんの一瞬なので撮るのはちょっとコツがいります。

カーネルは2Mバイト以上あるので、書き込みにはそれなりの時間がかかります。時間がかかる作業は夜間に行います。

玄箱を扱う詳しい手順などは、いずれチュートリアルに記載します。

MITOUJTAG BASIC Version1.2.3は、来週リリースします。
もちろん、MITOUJTAGは玄箱に特化したソフトではなく、汎用の組み込み開発ツールです。MITOUJTAGを使えば、個々の機器のCPUやフラッシュROMの種類といった構成に左右されずに、GUIで操作するだけで、簡単にフラッシュROMが扱えるようになるでしょう。

| | コメント (0)

2005.08.25

Interface10月号 JTAG制御ソフトウェアMITOUJTAGの活用法

Interface10月号に「JTAG徹底活用研究(第6回) JTAG制御ソフトウェアMITOUJTAGの活用法」が掲載されました。今回の記事では、MITOUJTAGの基本的な使い方をはじめとして、JTAGを使って組み込み機器のデバッグをすごい短期間で簡単に行ってしまう方法について書かせていただきました。
今回は、カラーのページにしていただいたので、最新のMITOUJTAGの画面がそのまま映っています。ぜひ、ごらんください。

これにて全6回の連載は終了となります。長い間応援有難うございました。これからもひきつづきJTAGの研究を続けて参りますので、皆様の暖かい応援をよろしくお願いします。
なお、記事に関するご意見・ご感想もお待ちしております。nahitafu@nifty.comまでお気軽にお寄せください。
※なお、Yahoo、hotmailなど、フリーメールからの送信はご遠慮ください。

| | コメント (0)

2005.08.24

JTAGフラッシュROMプログラマの改良

MITOUJTAGのフラッシュROMプログラマを改良しました。

JTAGデバイスとフラッシュROM間のデータバスは、一般に8bit~32bitの幅があります。また、フラッシュROMにも8~32bit幅のものが一般に市販されています。フラッシュROMのA-1アドレス信号を使うことで、16ビットのフラッシュROMは8ビット幅でアクセスすることができ、32ビットのフラッシュROMは16ビット幅でアクセスすることができます。
上の条件を組み合わせ、あまりやらないようなパターンを除外すると、フラッシュROMの接続パターンは6通りに分類できます。

このように、JTAGデバイスとフラッシュROMの間は、様々なビット幅や接続方法があります。
そこで、とりうる接続のパターンを分類し、下の図のように現在の接続状態をGUIでわかりやすく表示するようになりました。

JTAG
(クリックで拡大)

また、フラッシュROMのCFIコードを扱うことができるようになりました。
CFIコードを使うことで、フラッシュROMのセクタ構成を自動で調べることができ、下の図のように、表と図を用いて視覚的に表現できるようになりました。

フラッシュROMのセクタをマウスで選択して、望んだ領域に書き込みや消去などが簡単にできます。また、画面を切り替えずに実行結果を確認することができます。

JTAG Flash ROM

この新しいJTAGフラッシュROMプログラマが搭載されたMITOUJTAGを使うことで、誰でもより簡単にJTAG経由でフラッシュROMにアクセスできるようになるかと思います。
ご期待ください。

| | コメント (0)

2005.08.23

日経産業新聞で紹介されました

MITOUJTAGが、今朝(23日)の日経産業新聞の5面(情報・通信)で紹介されました。
「電子回路 1日で検証」というキャッチフレーズがつきました。
ご興味のある方がいらっしゃいましたら是非ご覧下さい。

記事に関するお問い合わせは、info@nahitech.comまでお願いします。

| | コメント (0)

MITOUJTAG新バージョンの開発状況

まもなく、MITOUJTAGの新バージョン、「MITOUJTAG BASIC 1.2.3」がリリースされます。

JTAG(クリックで拡大)

現バージョンからバージョンアップされた点は、主に次のとおりです。

新規デバイス対応
ALTERA MAX II CPLDへの書き込みに対応しました(EPM240のみ)。

パラレルポート用デバイスドライバの搭載
パラレルポート用デバイスドライバを搭載しました。
パラレルポート経由のJTAGケーブルの速度が約25%向上します。
GIVEIOが不要になります。

信号の検索機能
たくさんある信号の中から目的の信号を素早く探し出すために、ピン番号やピン名で信号が検索できるようになりました。
検索結果は次の図のように表であらされます。
なお、表の中の「ピンの状態」は、バウンダリスキャン結果を反映して自動的に更新されます。

JTAG(クリックで拡大)

さらに、上の図のように表の中のセルをクリックすると、画面の表示がそのピンの位置に移動し、見えやすいよう拡大されます。目的のピンはハイライト表示されます。

JTAG(クリックで拡大)

ホイールマウス対応
ホイールマウスを上下にホイールするだけで、画面表示の拡大・縮小や、表示位置の移動ができるようになりました。

ステータスバーの強化
・カーソルのある位置のピンの状態を、ステータスバーに表示するようになりました。
・画面更新の速度をステータスバーに表示するようになりました

その他
・ピンを右クリックしたときに、当該端子の状態をあらわす回路図が表示されるようになった。(一番上の図)
・SVFプレイヤーで、時間を指定したRUNTESTができない不具合を修正しました。
・出力ピンの衝突を検出を行うか否かを、設定できるようにしました。

MITOUJTAGがさらに使いやすく進化します。
ご期待ください。

| | コメント (4)

2005.08.18

WDMとNT形式デバイスドライバ

向学のため、いろいろとデバイスドライバを作り、実験をおこなっています。

参考にしている書籍は下記のものです
・技術評論社 「WindowsXPデバイスドライバプログラミング[入門と実践]」 浜田憲一郎著
 サンプルがわかりやすい。メモリ関係の扱いが詳しい。読みやすい。
・翔泳社「WDMデバイスドライバ」 Cris Cant著
 細かいところまで詳しい。NT形式のドライバまで説明されていてありがたい。
・CQ出版社「Windows2000デバイスドライバ入門」 北山洋幸著
 詳しい説明は少ないが、ドライバの実装に必要な「コア」の部分がすぐにわかる。

Windowsのデバイスドライバには、NT形式とWDM形式、さらにはデバイス名を明示的に指定する方法やGUIDを使う方法など、新旧いろいろな方法があり、間違えるとクラッシュします。

本を一読や二読するだけはだめで、何回も繰り返し読み、実験し、クラッシュを繰り返し、ようやくドライバが理解できるようになってきました。
私は、NT形式のドライバをINFでインストールしようとしたり、WDM形式のドライバをServiceManagerでインストールしようとしたりしてハマりました。
これまで実験したところでわかった特徴をまとめておきます。

【WDMデバイスドライバ】
・INFファイルでインストールする
・PNPを実装
・DriverEntryでは実際の処理はしない(関数の登録のみ)
・AddDevice関数でデバイスを初期化する。
・Unload関数の中ではIoDeleteDeviceを行ってはいけない。
・IoDeleteDevice処理は、PNPディスパッチルーチンで行う。PNPのREMOVEの処理は必須。

(INFファイルでの)インストール時の関数呼び出しの順序

1. DriverEntry()を実行
2. AddDeviceに登録された関数を実行
3. PNPディスパッチを実行(0x18 IRP_MN_QUERY_LEGACY_BUS_INFORMATION?)
4. PNPディスパッチを実行(0x0D IRP_MN_FILTER_RESOURCE_REQUIREMENTS)
5. PNPディスパッチを実行(0x00 IRP_MN_START_DEVICE)
6. PNPディスパッチを実行(0x18 IRP_MN_QUERY_PNP_DEVICE_STATE)
7. PNPディスパッチを実行(0x07 IRP_MN_QUERY_DEVICE_RELATIONS)

ドライバ削除時の処理順序

1. PNPディスパッチを実行(0x07 IRP_MN_QUERY_DEVICE_RELATIONS)
2. PNPディスパッチを実行(0x01 IRP_MN_QUERY_REMOVE_DEVICE)
3. PNPディスパッチを実行(0x02 IRP_MN_REMOVE_DEVICE)
4. Unloadを実行

【NT形式デバイスドライバ】
・ServiceManagerでインストールする。
・インストールだけでは何の関数も呼び出されない。
・APIのStartService関数を実行すると、ドライバのDeviceEntryが呼び出される。
・DriverEntry内で実際の初期化処理を行う。
・ControlService(hService, SERVICE_CONTROL_STOP・・・を実行すると、ドライバのUnloadに登録した関数が呼び出される。
・Unloadの中でIoDeleteDeviceの処理を行う。

【互換性】
・NT形式ドライバは、INFファイルを作ってインストールしようとすると、インストールの最後の段階でDriverEntry関数が呼ばれ、その中でデバイスを作ろうとし、青い画面がでてクラッシュする。
・PnP対応のWDM形式のドライバをServiceManagerでインストールしようとすると、実際のDriverEntry関数で何も行われないので、失敗に終わる。クラッシュはしない。

| | コメント (0)

2005.08.14

汎用I/Oポート用カーネルドライバ作成中

WindowsのDDKを使って、カーネルモードのI/Oポート用ドライバを作成中です。
ご存知のとおり、WindowsNTや2000、XPは、プログラムから簡単にはI/Oポートにアクセスできない仕組みになっています。

I/Oポートにアクセスするにはカーネルモードのドライバが必要になりますが、ドライバを作ろうとすると、I/Oポートにアクセスする部分はごく僅かなのに、ドライバの初期化だとかいろいろな大変な思いをします。

ところで、どのようなデバイスドライバもI/Oポートにアクセスする部分は、WRITE_PORT_UCHARやREAD_PORT_UCHARといった関数を呼び出しています。
WRITE_PORT_UCHAR関数を使って、プリンタポート(0x378番地)をアクセスしてみると、1.2μ秒かかりました。
#パラレルポートが仮想的なISAバスにつながっている以上、原理的にはこれだけのWAITが必要なのですが、どうやってWAITを発生させているのかわかりません。どういう仕組みなんでしょう。

なお、実際のI/Oアクセスが1μ秒程度なのに、DeviceIOControlやWriteFileといったドライバの呼び出し処理には10μ秒ほどかかってしまうようです。
これでは1バイトごとにDeviceIOControl呼び出しを行うととても時間がかかりますので、I/Oポートを操作する一連の操作手順をまとめた構造体を作り、その構造体を与えることで動作するようにしました。

操作手順データの作成はユーザモードで安全に行い、その実行はカーネルモードで行います。
これで、安全に、無駄な時間のない動作をすることができるようになりました。

次にリリースするMITOUJTAGでは、このドライバが使えるようになるかもしれません。

| | コメント (5)

2005.08.04

暑いから省エネを考えよう

今日は暑い日でしたので、ちょっと省エネの話をします。

夏の電力需要ピークの40%は、冷房で占めています。
そんな、夏の電力を減らす方法の一つに、蓄熱式空調システムというのがあります。
(エコアイスminiなど)
これは、クリーンな夜間電力で冷水や氷を作り、昼間のピークを減らすというものです。
なぜ夜間の電力がクリーンかというと、夜間の電力は化石燃料の比率が少なく、原子力で発電されている比率が高いので、CO2の発生量が少なくなるというものです。
また、夜間だとモータを定格運転できて効率がよいなどの理由もあり、年間のCO2の発生を25~30%も削減することができるシステムです。すごいですね。
新しく立てられるマンションやビルには、こういうシステムが積極的に採用されていくといいですね。

一方、省エネといえば、エアコンといかに上手く付き合うかですが、新しいエアコンに買い換えるというのも省エネになります。古い昔のエアコンよりも、最近のエアコンの方が断然省エネだからです!

さらに、エアコンの除湿機能をうまく使うといっそう省エネできます。
というのは、湿度が15%下がると汗が蒸発しやすくなるなどの効果があり、体感温度は1℃下がります。冷房で設定温度を下げるよりも10%の省エネが可能です。

また、冷房で普通に温度を下げるのは無駄が多いといえます。なぜなら、熱の流れる量は温度差に比例しますから、室内が涼しければ涼しいほど、外から流入する熱量が増えてしまいます。除湿で室温を下げずに体感温度を下げれば無駄な熱の流入を減らすことができるというわけです。
昔は除湿は電気を食うというといわれましたが、今はそうではありません。ほとんど食わないでしょう(+100Wくらいかな)。お手持ちのエアコンの説明書をみてみましょう。
例えば、日立の「カラッと除湿」は、エアコンの室外機から排出される暖かい空気を利用して、一度冷やした空気を再熱する仕組みなので、ヒータで暖めません。これはすごい省エネ技術です。

それでは、いちばん省エネなのはどうすればいいでしょう。私が考えている方法は、冷房で一気に温度と湿度を下げて、それから温度を上げて除湿に設定し、温度と湿度を維持するというものです。
もちろん、ベランダへの打ち水と、扇風機を併用するのも忘れてはいけません。

エアコンの容量や除湿方式によって変わるので一概にはいえませんが、下記のWebサイトに比較が出ていますね。今ご利用のエアコンで一番効率のよい方法を見つけましょう。
http://www.tepco-switch.com/life/labo/qa/qa020-j.html

| | コメント (0)

2005.08.02

ちょっと面白いサイト

特許庁のページに、パソコン電子出願に関する文書が出ていました。
10月から、ISDNではなくインターネットで出願ができるようになるようです。
http://www.jpo.go.jp/cgi/link.cgi?url=/e_shutugan/e_shutugan_list.htm

東京電力のサイトにインターネット電力講座というのがあります。
http://www.tepco.co.jp/kouza/menu-j.html
電力の基礎を網羅しており、細かいところまでしっかりとわかりやすく書かれていて、とても勉強になります。

| | コメント (0)

« 2005年7月 | トップページ | 2005年9月 »