goo blog サービス終了のお知らせ 

Sim's blog

電子工作はじめてみました

rxtxSerial魔改造

2009-01-30 01:36:19 | その他
1/30 追記 Tsuneoさんが、インタラプト版のファームウェアを開発されましたので、ここに書いてある方法は使わないでください。詳しくはスイッチサイエンスさんもGainer miniのコメントをご覧ください。PIC書き込み環境がない方のために記事は残しておきます。


Gainer miniクローンがUSBハブ経由だとprocessingやgspで動作しないことに関しては、「スイッチサイエンスさんもGainer mini」のコメントでTsuneoさんが見事に解析されています。いくつか解決方法を示されています。

ここではtera termだと動くけど、processingだと駄目という場合の対策を試してみます。本来ですと、Gainer mini側のファームを改造する方が筋が良いのですが、ファーム改造まで待てないという方のための一時的な対策です。

processingやgspでは、RS232Cと通信するためにrxtxSerial.dllを呼び出します。改造は、SetCommStateというAPIの戻り値をチェックしないようにすることです。色々と改造の方法はあると思いますが、どうせつなぎなので、手っ取り早く直接dllファイルをバイナリエディタで書き換えてしまいます。

改造前のrxtxSerial.dll
入手先 Gainer miniのダウンロードページのProce55ingLib_forGAINERmini_v001.zip
日付 2008/04/01 9:56
サイズ 77759バイト
ファイル先頭から3a1c番地の内容 0F
ファイル先頭から3a1d番地の内容 85
(この後はAA 00 00 00 83 C4 F4と続きます)

この0F 85というのはjne rel32なので、nop + jmp rel32に書き換えます。具体的には90 E9です。つまり

ファイル先頭から3a1c番地の内容 0F → 90
ファイル先頭から3a1d番地の内容 85 → E9

と2バイトだけ書き換えます。

バイナリエディタはStiringというのを使いました(vectorのダウンロードページ)。
魔改造なので、何が起きても無保証です。改造前のdllファイルはバックアップしておきましょう。

どうやって見つけたかというと、dumpbin.exeを使って逆アセンブルして、SetCommStateを呼び出しているところを探して、直後のjne命令前後をバイナリエディタでサーチしました。

この改造で、今まで動かなかったUSBハブ経由でも、一応は動くようになりました。とりあえずのつなぎだということを忘れずに。

最新の画像もっと見る

4 コメント(10/1 コメント投稿終了予定)

コメント日が  古い順  |   新しい順
症状がちがうのか・・・ (きむにゃん)
2009-01-30 22:55:16
AMD系のマザーのUSBポートでは
動きませんでした・・・
一応報告まで・・・
返信する
re:症状がちがうのか・・・ (Sim)
2009-01-31 00:29:39
こんにちは、きむにゃんさん
うーん、うちのは症状が軽かったみたいですね。
ちなみに、デバイスそのものは認識されていますか?OSは何でしょう?XPはSP2だと駄目という話もあるみたいです。

RTショップさんで、ファームの書き換えサービスをされています。
http://gainer-mini.jp/news.html
ご利用を考えてみられてはいかがでしょうか。
返信する
追記 (きむにゃん)
2009-02-02 00:11:54
公式に公開されていたドライバに更新したら
時々動くようになりました・・・
動かない確立のほうが高いのですが・・・

やはりPICの書き換えを検討しないとだめそうですね。
返信する
re:追記 (Sim)
2009-02-02 08:37:39
こんにちは、きむにゃんさん
確実なのはPICの書き換えでしょうね。
デスクトップPCならUSB1.1の増設ボード(UCHI)という手もないことはないですが、増設して確実に動く保証もないです。
アールティさんに相談されるのがいいと思います。
返信する

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。