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側の通信設定でしょうか?
それとも終端抵抗を入れていないせいでしょうか?
以上、よろしくお願いいたします。
コメント
dotsuru1
> 大塩です。
>
> > お世話になっております。
> >
> > 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
アットマークテクノの古賀です。
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
以上、もし参考になりましたら幸いです。
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 コマンド にて御社基板へデータ送信し、結果をご確認いただけますでしょうか。
以上です。