今後、製品評価でこういうことを予定してるんだけど、
どういうものが必要そう? と聞かれて、その1つがRS-485のインターフェースだったのだが……
そこで思い出したのが9bitのUARTのことだった。
あまり一般的ではないと思うのですが、RS-485で1バイト9bitの通信が行われることがある。
UARTはLSBファーストなので、MSBは最後のビットにあたるが、
これは8bit+パリティの通信のパリティの位置に相当する。
そもそも9bitのUARTに対応している機器もあるとは思うが、
8bit+パリティ設定でパリティビットを任意に変更するという実現方法もある。
今まではマイコンとプロトコルアナライザを組み合わせて評価をしていたが、
製品評価に様々活用することを考えると、PCから制御できた方がよい。
RS-485のUSBインターフェースは買わないとどうにもならないが、
そもそもこの方法で9bit UARTに対応できるのだろうか?
RS-485でもRS-232CでもUSBシリアルインターフェースのIC自体は同種のもので、
手元にあったFTDIのUSBシリアルI/Fを使って実験してみた。
ところがこれがうまくいかなかった。
そもそも9bit設定がないのは当然として……
8bitでパリティ設定をMARKとSPACEを行き来しながら送受信すると、
まず送信側はMARKとSPACEを遷移するところでだいぶ間が空く。
COMポートの再設定を行うのにどうにも時間がかかるよう。
こんなに間が空いたら受信側でタイムアウトになってしまう。
受信側はMARKかSPACEに設定して、MSBが設定値と一致しない場合にパリティエラーとなることを利用すればよいとある。
SPACEに設定して、パリティエラーがあればMSB=1、なければMSB=0とわかると。
ところがパリティエラーが起きたことを判別できない。
なんで? と探してみたのだが、パリティエラーを検出したら、
文字を置き換え(というか挿入する)設定は存在するらしい。
ただ、その設定をしてもどうも思ったようにいかないのである。
エラーが起きたことを検出できればよい用途ではよいが、
このバイトはエラーがあったかなかったか判別する用途にはそぐわないようだ。
Virtual COM Portではなく、D2XXというFTDIのICを直接操作できるライブラリを使ったのだが、
やはりそれでも上記の問題は根本的に解決しなかった。
スペックにあるとおり、あくまでも7bitと8bit通信のためのICである。
MSB=0か1に固定すれば9bit通信できなくもないが、
本来9bit通信のためのICではないので目的は達成出来ない。
いろいろ探したのだが、9bit通信ができるUSBシリアルI/Fって普通にはないんですね。
世の中に全く無いかというとそうでもないようだけど。
ただ、9bit通信となればVirtual COMポートは適用できないわけですよね。
この時点で汎用性に乏しいので作りにくいのかなと。
マイコンのプログラムではこういうことはそう難しくないのですが。
USBインターフェースを持ってるマイコンボードを用意して、
UARTにRS-485インターフェースを取り付ければできそうだけど。
そんなに作るのが大変とは思わないけど、
そこにマンパワーを投じてやるのも考え物だなと。
果たしてどうしましょうかね。