私は、接続された複数のデバイスでRS485バスを介して通信するために、作業している産業用Linuxコンピュータに問題があります。私が遭遇したのは、RS485のUSARTドライバによって使用されるIOピンが、RS485のアイドル/トライステートに行くのではなく、起動時に異なるレベルに設定されていることです。その結果、デバイスが起動している間にバス上の他のデバイスが30秒以上ブロックされ、あらゆる種類の外部問題が引き起こされます。イベントの経過は、付属の画像で見ることができます。ここでは、起動時にオシロスコープで出力電圧を測定しました。組み込みLinuxデバイスが起動時にRS485バスをブロックする
私の推測では、実際のドライバは電圧レベルがトライステートレベル(たとえば、このデバイスでは約2.2V)に達するまで開始されないと考えられます。その後、すべてが期待通りに機能します。
ブート時にピンのデフォルトのIOレベルを設定するための設定ファイルを見つけようとしましたが(ブートローダによって設定されている可能性があります)、無駄です。
また、DATA-highを設定するために起動スクリプトを "早く"実行しようとしましたが、問題のデバイスはこれらのピンを通常のGPIOとして制御できるインターフェースを私ができる限り提供していません教えてください。
ご質問、ご意見、ご感想などありがとうございます。
編集:私は経験豊富なLinux開発者ではありませんので、重要な詳細を省略したかどうかを強調してください。
一部仕様:Linuxの2.6
- ARM920TのREV 0(V41)CPU
- 独自のディストリビューションは、Busyboxのに
- アトメルUSARTドライバ から
エキスを使用しますブートログ:
Linuxバージョン2.6.28.10(ルート@)(gccのバージョン4.1.2)#94 PREEMPT火10月29日10時22分19秒CET 2013
CPU:ARM920T [41129200]リビジョン0(ARMv4Tでは)、CR = c0003177
/...
... /ポートは/ dev/ttyS3ため
RS485モードは
(私は〜30秒が経過ここで推測している)...
/...
を有効に... ./
atmel_usart.3:MMIO 0xfffcc000(irq = 9)のttyS3はATMEL_SERIALです。
atmel_serial.3:パッティングRS485 RTSピンダウン
/...
...
.../
フル・ブートログ:https://drive.google.com/file/d/0B2XYl1mNCa8jNUZ5V0Nic1hkU0U/view
同様の問題:
おそらく同様の問題UART initialisation: Prevent UART to pull RTS high
しかし、私は提案された解決策を進める方法がわかりません。
どのドライバを使用していますか?外部コントローラ/トランシーバにバスが接続されていますか?ハードウェアに関する情報があればさらに役立ちます。 – user2205930
こんにちは! OPにいくつかの仕様を追加しました。私はファイルシステムのAtmelドライバを見つけましたが、HWドライバ(トランシーバ)は不明です。私はケーシングを開けることができ、周囲を見渡すことができたが、それは封印されているので、むしろそうだった。私は回路図を持っていたが、それは製造業者によって提供されていないことを望む。 – Stenis
@ user2205930どのARMを使用していますか? – KernelPanic