kazukitakahashi
2018年11月5日 14時34分
Armadillo-IoT G3LのRS485通信を使用して
・ボーレート :9600
・データビット長 :7bit
・ストップビット長 :2bit
・パリティ :even
の対向機と通信を行いたいのですが、linuxからデータビット長を7に設定しても
データビット長が8で、通信されています。
NXP Semiconductors i.MX7Dualのマニュアルでも
「7 or 8 data bits for RS-232 characters, or 9 bit RS-485 format」
という記載があるので、RS485通信ではデータビット長を8以外に変更することはできないのでしょうか?
コメント
kazukitakahashi
y.nakamura
中村です。
> こちらの作成ソフトはC言語を使用しておりまして、添付のような関数を使用しているのですが
> C言語でtermios構造体を使用した場合でも、同様の結果となりますでしょうか?
添付のソース、見ました。
試してはいません。
まず、
memset( &tio, 0x00, sizeof(tio) );
はやらずに
tcgetattr(serial_fd, &tio);
で現在の設定を取得し、
cfsetispeed( &tio, baudRate );
cfsetospeed( &tio, baudRate );
cfmakeraw( &tio );
をして、
データ長、ストップビット、パリティなどを設定する前に
tio.c_cflag &= ~(CSIZE|CSTOPB|PARENB|PARODD); // ←★
で関連するビットを落とし、
そのあと、
tio.c_cflag |= CREAD;
tio.c_cflag |= CLOCAL;
tio.c_cflag |= cs;
tio.c_cflag |= stopbit;
tio.c_cflag |= parity;
をやるようにすれば、動いてくれると思います。
cfmakeraw()の中でPARENBは落とされるはずですので、
★のところのPARENBはなくてもいいのですが、
書いておいた方がはっきりしていいと思います。
cfmakeraw()の中で何をやっているかは、
cfmakeraw()のmanページに書いてあります。
cfmakeraw()でCS8を設定してますので、これも注意が必要です。
--
なかむら
y.nakamura
kazukitakahashi
y.nakamura
2018年11月5日 16時34分
中村です。
> Armadillo-IoT G3LのRS485通信を使用して
> ・ボーレート :9600
> ・データビット長 :7bit
> ・ストップビット長 :2bit
> ・パリティ :even
> の対向機と通信を行いたいのですが、linuxからデータビット長を7に設定しても
> データビット長が8で、通信されています。
試してみました。
7ビットで出力されているようですけど・・・
# stty -F /dev/ttymxc1 parenb -parodd cs7 cstopb
# echo -n U > /dev/ttymxc1
# echo -n T > /dev/ttymxc1
の出力をオシロでみてみました。
--
なかむら