UARTの不可解なRXパルスがOS X Arduino Dueに接続する


14

Arduino IDE 1.6.8、Arduino Due、Mac OS 10.11.3

複数のクライアントライブラリ(Python、JavaScript、およびIDEの組み込みシリアルモニター)を使用してシリアルポートに接続すると、RXラインに8つの神秘的なパルスが表示されます。約78〜79us、Logic Pro 16で1MS / sでサンプリング。

ミステリーパルス

57600ボーで解釈されると、これらの8つのパルスはFirmataファームウェアを妨害します。そして、それらはすべての接続で発生します。

これは、Arduino 1.6.8 IDEの新規インストールと複数のスケッチを使用しています(通常の「点滅」スケッチでもこれが再現されます)。

私のマシンでの再現手順:

  1. スケッチをインストールする
  2. キャッチしたい場合は、ロジックアナライザーを起動します
  3. シリアルモニターに移動します。私は57600ボー、改行で終わるように構成されていますが、それは問題ではありません
  4. 必要に応じて、手順3を閉じて繰り返します
  5. シリアルポートに接続するたびにパルスに注意してください

これを診断するための提案はありますか?何らかの形でシリアルドライバレベルのようです。


1
どこから来たかに関係なく、実行中のファームウェアに重大なバグがあることを示すことで、あなたに恩恵をもたらしたと考えてください。これは、それを回復不能な状態にすることはできません。プログラムロジックのバグですか、それともUART処理コードはエラーフラグを適切に処理しませんか?
クリスストラットン

1
ソースを追跡するという点では、...など、別のシリアルクライアントプログラム、他のコンピュータ/オペレーティングシステム、別のUSBシリアルデバイスを、試して参考になる
クリス・ストラットン

1
他のシリアルプログラムを試す場合、Firmataプロトコルと対話し、同じ動作を示す異なるシリアルインプリメンテーション(Python、JavaScript、および組み込みArduino IDEシリアルモニター)を使用する複数のライブラリがあります。私の次の計画は、Linuxマシンでこれを試して、同じ動作が見られるかどうかを確認することです。
ブレイクラムスデル

2
接続解除時にも取得できます。接続ボーレートは、パルスの長さに影響しません。私の疑いは、それがATMega16U2のファームウェア(またはどのバージョンのチップでも)を実行していることです。
マジェンコ

1
シリアルモニターを起動すると、ソフトウェアはarduinoモジュールをリセットします。arduinoモジュールにブートローダーがある場合、これらはSTK500プロトコル信号だと思います。
メルトギュルソイ

回答:


1

ショート:

ATMEGA16U2ファームウェアを見る(https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/Arduino-usbserial.c)の設定を構成/変更すると、 USBエミュレートシリアルポート、USARTはリセットされます。これは、Arduino Serial Monitorを開いた場合でも発生します(シリアル速度などを設定する必要があります)。これによりスパイクが発生します。

長いです:

機能を見てください:

void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)

いくつかの行の後、レジスタをゼロにすることでUSARTをリセットすることがわかります。

/* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */
    UCSR1B = 0;
    UCSR1A = 0;
    UCSR1C = 0;

現在のATMEGA16U2データシートの168ページで、UCSR1Bのビット3(TXEN1)を設定することにより、トランスミッターを有効にし、通常のポート操作を無効にします(つまり、出力になります)。データシートの引用:

このビットを1に書き込むと、USARTトランスミッターが有効になります。トランスミッターを有効にすると、TxDnピンの通常のポート操作がオーバーライドされます。トランスミッタの無効化(TXENnをゼロに書き込む)は、進行中および保留中の送信が完了するまで、つまり、送信シフトレジスタと送信バッファレジスタに送信するデータが含まれなくなるまで有効になりません。無効にすると、トランスミッタはTxDnポートをオーバーライドしなくなります。

したがって、記述によりUCSR1B = 0;、入力として機能するTXD1ピンをオーバーライドする必要がなくなります。

ATMEGA16U2 TXDはATSAM3X8EのRXラインに接続されています。UARTを有効にした通常の動作では、データが送信されていない場合、そのラインはハイのままです。UARTを無効にすると、その特定の行は1になりません。初期化コードはそのピンのプルアップを設定しないため(出力としても設定されないため)、ピンはフローティング入力になり、 GNDまたはプローブの入力インピーダンス(ピンとGNDの間にある)でさえ、論理レベルをゆっくりと0にします。

これを無効にするには、次のいずれかを実行する必要があります。1)PINを値として1に設定してOUTPUTとしてATMEGA16U2ファームウェアを変更します。2)ピンのプルアップを有効にしてATMEGA16U2ファームウェアを変更します。3)(推奨)ATSAM3X8EのRXラインでプルアップを有効にします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.