新しいものを表示

ROCK 4 SEのdwc0なんだけど、FreeBSD 13.2で挙動が不審である。ifconfigにmedia 1000BaseT mediaopt full-duplexをつければ動く環境、100BaseTXにしないとだめな環境、media autoでケーブルを抜き差ししないといけない環境、何をしてもだめな環境がある。ハブのメーカーに依存する。Netgearは何をしてもだめだ。Planexは1000BaseTを指定すればOK、Coregaは抜き差し。ifconfig -aでケーブルが刺さっててもno carrierだったりするし、ネゴシエーションに失敗してるようなんだけど。

ArduinoをUSB接続してFreeBSDから見えるシリアルポートからデータを読み出すと、バイトごと丸っと落ちてることがある問題、amd64だと頻発するけどaarch64だと発生頻度が半分ぐらいというのが判明。

aarch64というかamd64なROCK 4 SEの上のFreeBSD 13.2でもArduinoのUSBシリアルのバイトの欠落がおきるなあ。バイトの欠落が起きるとパケットの先頭の再同期までちょっとかかる。なんかしらんが再現する。

進んではいないが、仕事をした気になる1日であった。
ROCK 4 SEは16時ごろからFreeBSD 13.2p2にするのにセルフでmake -j 2 buildworldしてシバいている。microSDだと高耐久品でもなぜか再起動しちゃったり、書いたはずのデータが書いたとおりになってないとかVM Faultみたいなのを起こしたりだったんだけど、信用してよさそうだ。

ROCK 4 SE用のeMMCモジュールとUSB接続の変換アダプタが届いたので、ROCKPro 64用のFreeBSD 13.1のイメージを新規で書きこんで、u-bootのコードの一部をROCK 4 SE用に入れ替えととかって、色々併行してやってた。Arduino心電計からのデータが一部取りこぼしが起きるとか、EDFフォーマットのruby用のライブラリ作成とか。

rubyでそういうことするなって話はなくもない気がするが、現実問題gemがあるし、Windowsでは普通に動いてるし...。それにEDFフォーマットで吐き出したり、できればGUIが欲しい、グラフをリアルタイム表示とか言われそうだからな。Cで書くのはいやすぎる。

1バイトと丸っと落ちてるってことは、たしかに受信側というかUSBホストの問題ではある。

FreeBSDの問題なのか、rubyの問題なのか、rubygem-serialportの問題なのか、切り分けないといけないのだが。

うーん。べつのFreeBSD 13.1のPCでも同じぐらいのパケットの壊れ方だなあ。

ということで、FreeBSDなPCの側の問題だな。あとはマシン固有なのかどうかだけど。umodemとかに見えるから、そっちの問題とは考えにくい。

Arduinoの種類をとっかえひっかえ試していて、MegaとDuemilanoveが比較的マシだという結果が出た。
で、USB接続してシリアルを読むマシンをWindowsにかえたところ、データがぶっ壊れる率が激減したというか、毎秒250パケット送ってて、FreeBSDだと1分で500~1000ぐらい壊れたパケットがあるのに、Windowsでは1個しか壊れていなかった。

Arduino Megaの次に成績がいいのがArduino Duemilanoveだなあ。こっちはFTDIがATMega328にそのままつながってる。ATMega16U2が挟まってない。

sleepさせなくてもパケットが落ちる。Megaでお試ししたら一番成績がいいように見える。受信側にほかの負荷が同時にかかってたから、関係あるかもしれない。

UNO R3もいつ靴のリビジョンがあったので試したが。Genuinoもあった。

Leonard ETHには書き込めたけど、機嫌が悪い。で、最後にはUSBデバイスとして認識しなくなった。

とりあえず、すぐできるお試しとして、Arduinoのスケッチの中のloop()でsleep命令を出さずにビジーループするようにして、手持ちにあったArduino Mega 2560とLeonardo ETHを試してる。で、Megaには書き込めたがLeonardo ETHには書き込めん。

FlexiTime2をつかって250HzでanalogRead()してシリアル送信してるだけだから、Unoの能力でも足りるはず。というかATmega32u4でもいけることになってるから、クロック的には全然余裕。

sleep命令を取ってみるか、ATMega32u4なArduinoにしてみるか、いっそのことArduino M0にしてみるかかなあ。

シリアルが化けるにしても、バイトが丸ごと落ちてるのが解せぬ。普通は1ビット化けとかそんなのだし。

ロジアナでちょんちょんするとちょっとわかりそう

古いものを表示
:realtek:

思考の /dev/null