Armadilloフォーラム

'serialport' /dev/ttymxc1 での半二重シリアル通信

dotsuru1

2021年7月29日 10時00分

お世話になっております。

Armadillo-IoT G3L と弊社の基板を接続し、
9600bpsでシリアル半二重通信を行いました。
ピン2番にDATA-、ピン3番にDATA+の線を接続し、
ピン1番のSGや、ピン2,3番間の終端抵抗は接続していません。

Armadilloから"1234"という文字列を送信し、
弊社の基板がデータを受信したら"5678"を返信するだけのプログラムです。

Armadillo側はrubyでソースを書き、
sp.puts("1234") #"1234"の送信
while 1 do
recv = sp.gets #"5678"の受信
printf("RECV > %s", recv)
end

としたところ、
Armadillo側から送信した"1234"というデータがエコーバックされ、
 RECV > 1234
 RECV > 5678
のように、2行表示されます。

Armadilloと弊社の基板のケーブルを抜いて実行しても、
 RECV:1234
は表示されるので、これは弊社の基板から返信されたものではなさそうです。

"1234"がエコーバックされる原因はArmadillo側の通信設定でしょうか?
それとも終端抵抗を入れていないせいでしょうか?

以上、よろしくお願いいたします。

コメント

at_syunya.ohshio

2021年8月2日 10時57分

大塩です。

> お世話になっております。
>
> Armadillo-IoT G3L と弊社の基板を接続し、
> 9600bpsでシリアル半二重通信を行いました。
> ピン2番にDATA-、ピン3番にDATA+の線を接続し、
> ピン1番のSGや、ピン2,3番間の終端抵抗は接続していません。
>
> Armadilloから"1234"という文字列を送信し、
> 弊社の基板がデータを受信したら"5678"を返信するだけのプログラムです。
>
> Armadillo側はrubyでソースを書き、
> sp.puts("1234") #"1234"の送信
> while 1 do
> recv = sp.gets #"5678"の受信
> printf("RECV > %s", recv)
> end
>
> としたところ、
> Armadillo側から送信した"1234"というデータがエコーバックされ、
>  RECV > 1234
>  RECV > 5678
> のように、2行表示されます。
>
> Armadilloと弊社の基板のケーブルを抜いて実行しても、
>  RECV:1234
> は表示されるので、これは弊社の基板から返信されたものではなさそうです。
>
> "1234"がエコーバックされる原因はArmadillo側の通信設定でしょうか?
> それとも終端抵抗を入れていないせいでしょうか?
>
> 以上、よろしくお願いいたします。

終端抵抗について
接続機器がArmadillo-IoT G3L <-> 御社基板 のみである場合、Armadillo-IoT G3L は終端となりますので終端抵抗(120Ω)を接続してください。

エコーバックについて
Armadillo-IoT G3L から、echo コマンド または cu -l コマンド にて御社基板へデータ送信し、結果をご確認いただけますでしょうか。

以上です。

dotsuru1

2021年8月2日 17時06分

> 大塩です。
>
> > お世話になっております。
> >
> > Armadillo-IoT G3L と弊社の基板を接続し、
> > 9600bpsでシリアル半二重通信を行いました。
> > ピン2番にDATA-、ピン3番にDATA+の線を接続し、
> > ピン1番のSGや、ピン2,3番間の終端抵抗は接続していません。
> >
> > Armadilloから"1234"という文字列を送信し、
> > 弊社の基板がデータを受信したら"5678"を返信するだけのプログラムです。
> >
> > Armadillo側はrubyでソースを書き、
> > sp.puts("1234") #"1234"の送信
> > while 1 do
> > recv = sp.gets #"5678"の受信
> > printf("RECV > %s", recv)
> > end
> >
> > としたところ、
> > Armadillo側から送信した"1234"というデータがエコーバックされ、
> >  RECV > 1234
> >  RECV > 5678
> > のように、2行表示されます。
> >
> > Armadilloと弊社の基板のケーブルを抜いて実行しても、
> >  RECV:1234
> > は表示されるので、これは弊社の基板から返信されたものではなさそうです。
> >
> > "1234"がエコーバックされる原因はArmadillo側の通信設定でしょうか?
> > それとも終端抵抗を入れていないせいでしょうか?
> >
> > 以上、よろしくお願いいたします。
>
> 終端抵抗について
> 接続機器がArmadillo-IoT G3L <-> 御社基板 のみである場合、Armadillo-IoT G3L は終端となりますので終端抵抗(120Ω)を接続してください。
>
> エコーバックについて
> Armadillo-IoT G3L から、echo コマンド または cu -l コマンド にて御社基板へデータ送信し、結果をご確認いただけますでしょうか。
>
> 以上です。
>
大塩様
回答ありがとうございます。

cu -l ttymxc1 で試してみたところ、エコーバックは返ってきてませんでした。
四文字の文字列を受信すると、""(nは数字)を返信するようなプログラムを書いているのですが、
Armadillo側から
1111を送ると"<1>"が返ってきました。

rubyでsp.getsすると、2行(ECHO BACKと"<1>")返ってくるのはなぜなのかが不思議です。
cuコマンドでECHO BACKが確認されないということは、原因は終端抵抗ではなさそうですね。

Armadillo側のシリアル通信設定で、ECHO BACKの有無を設定する方法はあるのでしょうか?

at_shinya.koga

2021年8月29日 17時02分

アットマークテクノの古賀です。

dotsuru1さん(2021年8月2日 17時06分):
>大塩様
>回答ありがとうございます。
>
>cu -l ttymxc1 で試してみたところ、エコーバックは返ってきてませんでした。
>四文字の文字列を受信すると、""(nは数字)を返信するようなプログラムを書いているのですが、
>Armadillo側から
>1111を送ると"<1>"が返ってきました。
>
>rubyでsp.getsすると、2行(ECHO BACKと"<1>")返ってくるのはなぜなのかが不思議です。
>cuコマンドでECHO BACKが確認されないということは、原因は終端抵抗ではなさそうですね。

確認ですが、cu を -h 付きで実行すると、どうなるでしょうか?
 https://manpages.debian.org/buster/cu/cu.1.en.html

>Armadillo側のシリアル通信設定で、ECHO BACKの有無を設定する方法はあるのでしょうか?

もし、-h 付きだと cu でもエコーバックされるのであれば、ruby でお書きになったプログラムで、SerialPort クラスが継承している IO クラスの io/console 拡張が持つ #noecho メソッドを使ってみると、エコーバックされないようになるかも知れません:
 https://rubydoc.info/gems/serialport/SerialPort
 https://ruby-doc.org/core-2.7.1/IO.html#class-IO-label-io-2Fconsole
 https://www.rubydoc.info/stdlib/io/IO:noecho

以上、もし参考になりましたら幸いです。