WindowsおよびLinux用のUSB-RS232アダプタケーブル(FT232R)があります。だから私はpyserialでPythonスクリプトを使用します。
Windowsでは、データ転送中のTXラインの最低電圧は-6.2V、最高電圧は6.2Vです。接続されたデバイスとの通信はここで完全に機能します。
Linuxでは、まったく同じデータ(同じPythonコード)を送信しますが、TX電圧は上に移動します。最低電圧は-0.8V、最高電圧は11.8Vです。ここで通信に失敗しました。 10k以上の抵抗を測定すると、最初は電圧が正であり、Linuxでの転送中に低下します(図を参照)。
Linux(Ubuntu)で電圧を調整するには?
W&Tのアダプタケーブル(https://wut.de/e-38011-ww-dade-000.php)。 Linuxでは、アダプタは「Ltd FT232 Serial(UART)IC」として識別されます。
写真はここにあります:https://imgur.com/a/lB78S4a
答え1
コメントの@Bodoのように、最初は「ハードウェアの問題」だと思いましたが、USB節電も可能であることに気づきました。
USBは+5Vのみを供給するため、+5V以上の負電圧と+5V以上の電圧はアダプタのチャージポンプ回路によって生成する必要があります。この回路が省電力モードでオフになると、ポートが開くと完全に放電する可能性があります。
データシートは、アダプタがFTDI FT232Rシリアルコンバータチップを使用していることを示しています。これはデータシートです、チップメーカーから直接。
24ページの7.1章のUSB-RS232コンバータ回路の例を参照してください。 RS232レベルコンバータチップはFT232RチップのSLEEP#ピンに接続されています。これは、メインチップが電源に入るとレベル変換器が停電する。保存モード。
実際のFT232RチップのUARTインタフェースは、最大0V/+5Vの信号レベルしか提供できないため、アダプタにレベル変換チップが含まれていることは明らかです。
Linux と Windows が異なるハードウェアで動作している場合、Linux システムの USB 電源出力が RS232 デバイスの放電を防ぐためにレベルコンバータの充電ポンプを完全に充電するのに十分ではない場合があります。
ポートのオープン/初期化と実際の転送の間に数秒の遅延を追加すると、状況が変わることを確認してください。アダプタがスリープモードで起動するのが問題の場合、ポートの初期化後の遅延により、アダプタがスリープモードを終了して通信を開始する前にチャージポンプが充電される可能性があります。