質問: UARTの不思議なRXパルスがOS X Arduino Dueに接続する Arduino IDE 1.6.8、Arduino Due、Mac OS 10.11.3 複数のクライアントライブラリ(Python、JavaScript、IDEの内蔵シリアルモニタ)を使用してシリアルポートに接続すると、RXラインに8つの不思議なパルスが表示されています。 Logic Pro 16で1MS/sでサンプリングされた、約78-79us。 ![Mystery pulses](https://i.stack.imgur.com/VUXZf.png) これらの8つのパルスは、57600ボーで解釈されるとFirmataファームウェアを詰まらせます。そして、彼らはすべての接続で起こります。 これは、Arduino 1.6.8 IDEの新規インストールと複数のスケッチを使用しています(通常の「Blink」スケッチでこれも再現されます)。 私のマシンでReproの手順: 1. スケッチをインストールする 2. ロジックアナライザを起動します。 3. シリアルモニタに移動します。私は57600ボーのために私の鉱山を設定しました、改行行の終了、しかしそれは重要ではありません 4. 必要に応じて、手順3を終了して繰り返します。 5. シリアルポートに接続するたびにパルスを記録します これを診断するための提案はありますか?それは何らかの方法でシリアルドライバレベルのように聞こえる。
回答: ショート: ATMEGA16U2ファームウェア()エミュレートされたUSBの設定を変更したり変更したりするとシリアルポートでは、USARTがリセットされます。これはArduinoシリアルモニタを開いても発生します(シリアル速度などを設定する必要があります)。これはあなたのスパイクを引き起こします。 長いです: 関数を見てください: `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のゼロへの書き込み)は行われません > 進行中および保留中の送信が完了するまで、すなわち、 > 送信シフトレジスタと送信バッファレジスタが > 送信されるデータを含む。無効にすると、Transmitterはno > TxDnポートをオーバーライドしてください。 > > したがって、 `UCSR1B = 0;` を書くことで、入力として機能するTXD1ピンをオーバーライドすることはなくなりました。 ATMEGA16U2 TXDは、ATSAM3X8EのRXラインに接続されています。通常の動作では、UARTを有効にすると、データが送信されていなければそのラインはハイのままです。 UARTをディセーブルすると、その特定のラインはドライバが1になります。初期化コードはそのピンのプルアップを設定していないため、ピンはフローティング入力になり、 GND、またはプローブの入力インピーダンス(ピンとGNDの間)でさえも、ロジックレベルはゆっくりと0になります。 これを無効にするには、次のいずれかを行う必要があります。 1)ATMEGA16U2ファームウェアを、そのPINをOUTPUTとして値1で設定して変更します。 2)ATMEGA16U2ファームウェアを変更するには、そのピンのプルアップを有効にします。 3)(推奨)ATSAM3X8EのRXラインのプルアップを有効にします。