3

beagleboneを使用して、sysfsインターフェイスを使用して特定のピンからデジタル入力にアクセスしています。そして、出力状態を変更することはできますが、入力を変更することはできません:(。私が行ったのは、pinAとpinBの2つのピンです。pinAを出力し、pinBを入力しました。pinAをpinBに接続しました。pinAを出力ピンとして設定しました。 sysfsとpinBの方向属性に入力して渡します。PinAの値を1に変更すると、出力として1が返されます(LEDを使用してテストしました)。しかし、PinBの値を読み取ると、0のみが出ています。 pinAの値に0を渡しても、その理由は何でしょうか。

ありがとうございました :)

4

3 に答える 3

9

私が理解したように、あなたが従った手順は次のとおりです。

echo 7 > /sys/kernel/debug/omap_mux/gpmc_ad6
echo 38 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio38/direction
cat /sys/class/gpio/gpio38/value

私も同じ間違いをして何時間もかかりましたが、答えは簡単でした。「echo7」で始まる最初の行が問題です。多重化ビットを見てください:

Bit 5: 1 - Input, 0 - Output

Bit 4: 1 - Pull up, 0 - Pull down

Bit 3: 1 - Pull disabled, 0 - Pull enabled

Bit 2 \

Bit 1 |- Mode

Bit 0 /

-> 0 0 0111であるエコー7を入力しました。これは、ビット0、1、および2が1であるため、モードが設定されていることを意味します。問題ない。ただし、入力か出力かを設定するのを忘れただけです。そしてそれはこのようになるはずです:

echo 0x27 > /sys/kernel/debug/omap_mux/gpmc_ad6

これで、ビットは次のようになります。1 0 0111バイナリ(0x27(16進数))。

入力しながら「cat/sys / class / gpio / gpio38 / value」と書くと、すばらしい1を見ることができます:)私と同じくらい幸せになると確信しています:)

また、もう1つ、アナログ入力は約1.8Vですが、GPIOは3.3Vで動作します。

于 2012-10-03T11:07:42.060 に答える
1

考えられるいくつかの原因:

1)入力ピンのIO方向を設定しましたか?

例えば。echo "in" > /sys/class/gpio/gpioN/direction

2)(可能性は低いですが)入力として使用しているGPIOピンはGPIOラインとして正しい方向に多重化されていますか?OMAPSoCのGPIOピンのほとんどは多機能です。あなたはカーネルが別の機能のためにそれを設定したかもしれません。

あなたはそれをチェックすることができます:

cat /sys/kernel/debug/omap_mux/board/core

これは、すべてのIOピンの構成をダンプします。出力は次のようになります。

OMAP4_MUX(CSI22_DY1, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
/* gpio_81 */
OMAP4_MUX(CAM_SHUTTER, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
OMAP4_MUX(CAM_STROBE, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
/* gpio_83 */

この場合、CAM_SHUTTERは出力を設定し、GPIOモジュールにルーティングされます(OMAP_MUX_MODE3

[警告:これは私のOMAP4ボードからのものです-OMAP3データシートが手元にない場合-かなりの類似性があります]

sysfsを使用してこれを変更することはできません。代わりに、カーネル(または、カーネルがセットアップした構成を使用する場合はブートローダー)を変更する必要があります。

システムのボードファイル(あなたの場合はそうなると思います)に<linux_source_root>/arch/arm/mach-omap2/board-omap3beagle.cは、MUXテーブルのイニシャライザーがあります。CAM_SHUTTERピンの主要な機能名(上記の例では)とGPIO番号の間を取得するには、ボードの回路図、カーネルソースツリー、およびSoCデータシートが必要になります。

3) pinAの値に0を渡しても少し混乱しました-それを意味するのかしら?ただし、これは注意すべき別のことを示しています。各IOピンにはプログラム可能なプルアップまたは-ダウンがあります。これらはMUX設定で設定されます。おそらく外部のものもあるかもしれません-繰り返しますが、確実に回路図が必要になります。

于 2012-08-20T10:15:40.297 に答える
0

はい。内部プルアップおよび内部プルダウンは、マルチプレクサモードと同じレジスタで設定されます。したがって、マルチプレクサモードを設定するのと同じ方法でこれを設定できる可能性があります。AM335x TRMを入手します(OMAP4の場合、この章は制御モジュールと呼ばれます)。

カーネルのターンで<linux_source_root>/arch/arm/mach-omap2/mux.h、マクロの束が定義されている場所を調べます

使用例として、ボードファイルにあります。

/* PIC -> OMAP4 interrupt line 2 - GPIO81 */
OMAP4_MUX(CAM_SHUTTER, OMAP_MUX_MODE3 | OMAP_PIN_INPUT_PULLUP), 

OMAP4_MUX(GPMC_AD11, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN), 

メモリから、プルアップまたはプルダウンのいずれかを選択できますが、どちらも選択できません。

于 2012-08-20T11:45:17.483 に答える