More from: 16550A

未だに4800bpsなのか・・・・・・

PC用のGPSレシーバ(I-O DATA 高感度USB接続GPSレシーバー「NAVI CLIP」 UMGPS/MF
)の仕様を見ていると、PCへのデータ転送速度が4800bpsとなっている。
この製品はUSB接続の製品なのだが、昔のRS-232C接続の製品もこの速度だったので、未だに変わっていないようだ。
10年ほど前にDebian GNU LinuxをベースにGPSレシーバとFOMA端末を接続した小型システムを開発したことがあるが、その際GPSレシーバとの通信速度が4800bpsというのがネックになった。
というのは当時でもLinuxのシリアルドライバで設定できるRS-232Cの通信速度は9600bpsが最低で、それ以下の速度に設定することが出来なかったため。
ハードウェアとしては16550A互換のUARTなので、150bpsといった低速の通信速度にも対応しているが、Linuxのシリアルドライバがそれに対応していないために、そのままでは4800bpsでの通信が出来ない。
16550Aの通信速度は2バイトのレジスタの内容で決定されるが、Linuxのドライバはその内の1バイトしか書き換えないらしい(9600bps以上ならそれでも設定可能)ので、プログラムで該当のレジスタ(分周レジスタ)を直接書き換えるようにして4800bpsでの通信を可能にしてGPSレシーバから座標データを読み込めるようにした。
この時はC言語でプログラムを書いていたが、レジスタを直接書き換えるのには「outb」関数を使った覚えがある。
#outb(0x80,レジスタのアドレス)ってな感じで。
つか、こんなプログラムを書かないと使えないデバイスってどうよ?と思ったのは内緒(笑)。

似たようなことを一昨年にも書いていた(汗)
「Windows用ddコマンド」

←クリックしてくれると嬉しいです。

Windows用ddコマンド

昔からlinuxで使われているddコマンド。
当blogを探すのに使われている検索ワードでもよく出てくる。
linux(に限らずunix系のOS)では標準的に備わっているので、なんにも気にせずに使っているが、Windows環境でも同じようなコマンドが無いかと思って探してみたら見つかった。
DDforWindows – Silicon Linux Wiki
からダウンロード可能で、まだ試していないがGUIのツールの様だ。
容量にもよるがHDDのバックアップイメージ作成にも使えるかも?
というかHDDのコピーに使ってみたいのが本音。特にノートPCの場合HDDを交換するたびにOSのインストールをし直すのが面倒。
ドライブとして認識できればイメージとして読み出せるようなので、上手く使えないかなと、、、、、

以前、CFベースのlinuxシステムを構築した時に使わせてもらったSilicon-linuxの本家にあるとはねぇ、、、、
当時は32MのCFにシステム一式(DebianLinux2.2ベース)を入れてたものだけど、今ではそんな小容量のCFが手に入らなくなってるなんてねぇ、、、、
コマンドライン用は
http://uranus.it.swin.edu.au/~jn/linux/rawwrite/dd.htm
にあるようだが、どうもつながらないようだ。
2011/04/06追記:2011/04/06現在はリンク先に繋がるようになっていて、そこからddコマンドがダウンロード可能になっている(urlが変更になったようで、変更された先にジャンプする)。
新しいurlはhttp://www.chrysocome.net/dd

そういえばGPSロケータをシリアルで接続して座標データを読み取るのに、4800bpsで接続しなければならないのに、シリアルポートを標準で9600以上にしか設定出来ず、わざわざシリアルコントローラのレジスタを直接書き換えるプログラムを書いて4800で接続したんだっけなぁ、、、、、
#16550A互換のコントローラは(たしか)2ワードのレジスタで速度を設定するのに、OS標準のドライバは1ワードだけしか書き換えてないみたい。
最初設定ファイルを書き換えてもGPSロケータからのデータを読めず、設定時にエラーも出ないからデータの読み方が悪いのかと思っていたら、実はOSのドライバでは4800での接続が出来ないだけだった。
それに気付くのにかなり時間がかかってしまった。自分で速度設定用のプログラムを書いて実行したら、あっさりデータが読めた。
#パラメータで速度を15bps~230.4kbpsまで設定出来るようにしたと思う。
なんか話がddからずれてしまったなぁ(笑)

←クリックしてくれると嬉しいです。