web-dev-qa-db-ja.com

Raspberry Pi UARTシリアルが機能しません

Raspberry Pi(Bモデル、raspian wheezy)とSTM32F4ボードの間でシリアル接続(GPIO UART pin))を介してデータを送受信しようとしています。

シリアルポートを設定するために、次のようないくつかのチュートリアルにあるすべてのステップを実行しました。 http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port

STM32F4ボードへの接続に失敗したとき、piのTX、RXピンを相互に接続するだけでシリアルポートをローカルでpiでテストでき、minicomで入力されたデータを繰り返す必要があると読みました。

残念ながら、これも機能しません。

ファイル 'cmdline'および 'inittab'のttyAMA0の設定は問題ありません。 (多くのチュートリアルで説明されているように)

そしてまた、 https://github.com/lurch/rpi-serial-console から自動設定スクリプトを試しました

RXをrpiのTXピンに直接接続しても、minicomでは何も出力されません。与えられた入力を繰り返すpythonスクリプトを使って試してみました。何も機能していないようで、ここではちょっと迷っています。

Minicom startコマンドは正しいはずです(異なるボーレートで試行されました)。

root@raspberrypi:/home/jef# minicom -b 9600 -o -D /dev/ttyAMA0

OPTIONS: I18n
Compiled on Apr 28 2012, 19:24:31.
Port /dev/ttyAMA0

Minicomの下部には常にオフラインのステータスが表示されます。

CTRL-A Z for help |  9600 8N1 | NOR | Minicom 2.6.1  | VT102 |      Offline

python nothinig is swownで利用可能なシリアルポートをチェックする場合:

python -m serial.tools.list_ports
no ports found

ユーザーはデイルアウトグループに属しているため、これは問題ではありません(ルートおよび非ルートとして試行):

root@raspberrypi:/home/jef# id
uid=0(root) gid=0(root) groups=0(root),20(dialout),1001(indiecity)

Gettyがシリアルポートを使用していないことの確認:

root@raspberrypi:/home/jef# ps aux | grep getty
root      2809  0.0  0.1   3740   804 tty1     Ss+  10:36   0:00 /sbin/getty --noclear 38400 tty1
root      2810  0.0  0.1   3740   804 tty2     Ss+  10:36   0:00 /sbin/getty 38400 tty2
root      2811  0.0  0.1   3740   804 tty3     Ss+  10:36   0:00 /sbin/getty 38400 tty3
root      2812  0.0  0.1   3740   804 tty4     Ss+  10:36   0:00 /sbin/getty 38400 tty4
root      2813  0.0  0.1   3740   804 tty5     Ss+  10:36   0:00 /sbin/getty 38400 tty5
root      2814  0.0  0.1   3740   804 tty6     Ss+  10:36   0:00 /sbin/getty 38400 tty6
root      3129  0.0  0.1   2012   624 pts/0    S+   11:57   0:00 grep getty

私はttyAMA0を使用して他のアプリをチェックしましたが、何もしませんでした:

root@raspberrypi:/home/jef# ps aux | grep ttyAMA0
root      3125  0.0  0.1   2012   628 pts/0    S+   11:56   0:00 grep ttyAMA0

ユーザーはシリアルポートにアクセスする正しい権利を持っています:

root@raspberrypi:/home/jef# ls -l /dev/ttyAMA0
crw-rw---T 1 root dialout 204, 64 Dec 25 11:53 /dev/ttyAMA0

逃したことはありますか?シリアルポートの設定方法に関する20のチュートリアルとブログを読みましたが、何が原因なのかわかりません。探してほしいアドバイスをください。

8
Martin Law

Arduinoをレベルシフター(3.3vから5v)を介してRaspberry Piシリアルポートに接続していて、minicomにも問題がありました。 Arduinoからの出力をminicomで受け取ることはできましたが、どの設定を試しても送信するものはありませんでした。 USB(/ dev/ttyUSB0)に接続されたArduinoを使用したminicomでもまったく同じ問題がありました。

最後に、基本的なpythonシリアルコンソールを使用して、pip(pip install pyserial)を使用してpyserialをインストールし、次のコマンドを実行しました。

python -m serial.tools.miniterm -p /dev/ttyAMA0 -e
3
Robert Hunt

今日も似たようなことを経験しました。ハードウェア制御を無効にするようにminicomを設定する必要があり、ループが機能し、UARTを介して2つのRaspisを相互接続しました。

また、TTYAMA0接続文字列minicom -b 115200 -o -D/dev/ttyAMA0で115200バッドレートを使用しています

Alt A

Z

O

シリアルポート設定[入力]

Fはハードウェアフロー制御をオフに切り替えます

*これらの設定を保存すると、入力したものが画面に表示されますが、実際にはuarts経由で送信されます。

私のミニコムフッターもこのように見えます(ボーレートの差分だけですが、オフラインでも表示されますが機能します)

CTRL-A Zヘルプ用| 115200 8N1 | NOR | Minicom 2.5 | VT102 |オフライン

幸運を!

3
GDubYa

次のスケッチをArduinoに置くことで、簡単なテストを実行できます。

#define SERIAL_BAUD 115200

void setup() {

  //Init serial connection
  Serial.begin(SERIAL_BAUD);
  Serial.setTimeout(1);

}

void loop() {

  if ( Serial.available() ) {
    byte type = Serial.read();
    Serial.write(type);
  }

}

そして、次の図を使用して接続します。

Wiring Arduino to Raspberry Pi

:USBケーブルを接続しないでください Arduino。 Raspberry Piを搭載します。

注:Raspberry Piは3.3Vで動作するため、それに接続するものはすべて3.3Vを実行しているか、レベルシフターを備えている必要があります。レベルシフターの詳細については、 ここ を参照してください。 (ロジック電圧レベルセクションに移動)Sparkfunには、基本的なレベルシフター(回路図付き) ここ があります。

その後、screenをインストールして実行できます。画面は、シリアルポートに接続するための非常にシンプルな方法です。

apt-get install screen

次に、以下を実行します。

screen /dev/ttyAMA0 115200

画面に何も表示されません。しかし、入力を開始すると、書いている文字がターミナルにループバックされていることに気づくでしょう。

:画面がまだ空白の場合は、接続を再確認する必要があります(Arduinoの電源LEDを確認することをお勧めします)。

疑わしいときは、私の全体の例 here を見ることができます。

2
jaredwolff

ヒントの人たちに感謝します。試してみたが問題は解決しなかったRaspberry Pi UARTポートがショートカットされているようです。借りた別のRaspberry Pi(モデルA)とBモデルに接続しますローカルで表示せずに、Aモデルで送信したすべての送信文字を返しました。

新しいモデルBを購入し、AURTポートをテストしましたが、正常に動作しています。

購入したSTM32F4ボードはすべて3.3Vであるはずですが、raspiが壊れているようですUART=ある時点で機能しなかった(またはまったく機能しなかった)。もう一度テストするときはとにかくLLCを使用するSTM32F4ボードでは、何も吹き飛ばさないようにしています。

ヒントをもう一度Thx!

1
Martin Law