RDK X5 40-PIN Header: ピン定義とGPIOアプリケーション

RDK X5開発ボードは、センサー、アクチュエーター、および周辺バスとインターフェースするための40ピンヘッダーを搭載しています。本ガイドでは、ピン定義、マルチプレックス規則、およびGPIOの実践例を解説し、ユーザースペースからすぐにハードウェアを制御できるようにします。

40-PIN Header 概要

RDK X5の40ピンヘッダーは、Raspberry Pi互換のレイアウトを採用しています。回路設計時には以下の電気的制限に留意してください:

パラメータ
ロジック電圧 3.3 V
各ピンの最大電圧 3.46 V
3.3 Vレール電流容量 800 mA
5 Vレール電流容量 500 mA

⚠️ 注意: GPIOピンに3.46 Vを超える電圧を印加しないでください。本ヘッダーは3.3 Vロジック専用で、5 V耐性はありません。

ピン定義

以下の表は、40ピンヘッダーの全ピンとそのデフォルト機能およびマルチプレックスされた代替機能を示しています。

Pin Default Function Alternate Function Notes
1 3.3V Power 800 mA max
2 5V Power 500 mA max
3 I2C0 SDA PWM2 Multiplexed
5 I2C0 SCL PWM2 Multiplexed
6 GND
8 UART3 TX
10 UART3 RX
12 I2C1 SDA PWM3 Multiplexed
14 GND
16 GPIO
18 GPIO
19 SPI2 MOSI PWM0 Multiplexed
20 GND
21 SPI2 MISO PWM1 Multiplexed
22 GPIO
23 SPI2 SCLK PWM0/PWM1 Multiplexed
24 SPI2 CS0
25 GND
26 SPI2 CS1
27 I2C5 SDA UART3 Multiplexed
28 I2C5 SCL UART3 Multiplexed
29 GPIO
30 GND
31 GPIO Used in demo as output
32 GPIO
33 GPIO
34 GND
35 GPIO
36 GPIO
37 GPIO Used in demo as input
38 GPIO
39 GND
40 GPIO

ピンマルチプレックス規則

ヘッダーの一部のピンは、専用周辺機能(I2C、UART、SPI、PWM)と汎用GPIOを切り替えることができます。マルチプレックスグループは以下の通りです:

  • UART3 / I2C5 — ピン8/10(UART3)とピン27/28(I2C5)は同じコントローラー設定を共有します。
  • I2C0 / PWM2 — ピン3/5はI2C0またはPWMチャンネルとして動作可能です。
  • SPI2 / PWM0 — ピン19/23はSPI2信号またはPWM0を伝送します。
  • SPI2 / PWM1 — ピン21/23はSPI2信号またはPWM1を伝送します。
  • I2C1 / PWM3 — ピン12はI2C1またはPWM3として動作可能です。

設定後のマルチプレックス状態の報告方法は以下の通りです:

Configuration Status Meaning
okay ピンは周辺機能(例: I2C、UART)に専用化されています。
disabled ピンは汎用GPIOとして利用可能です。

📌 注記: ピンのマルチプレックスモード変更は再起動後に有効になります。ハードウェアを配線する前に設定手順を計画してください。

srpi-configによるピン機能の設定

RDK X5には、srpi-configというメニュー形式のユーティリティ(raspi-configに類似)が搭載されており、オンボード周辺機器の有効/無効を設定できます。

手順1: 設定ツールを開く

sudo srpi-config

Enter fullscreen mode Exit fullscreen mode

手順2: 周辺機器メニューに移動

  1. 3 Interface Options を選択。
  2. I3 Peripheral bus config を選択。

手順3: 周辺機器の有効化/無効化

周辺バス(UART、I2C、SPI、PWM)のリストが表示されます。必要に応じて各バスを切り替えます:

  • バスを選択してEnterキーを押し、有効化。
  • すでに有効なバスを選択してEnterキーを押し、無効化。

手順4: 再起動

sudo reboot

Enter fullscreen mode Exit fullscreen mode

再起動後、有効化したピンは周辺機能に専用化され(ステータス okay)、無効化したピンはGPIOに戻ります(ステータス disabled)。

GPIOアプリケーション: ボタン + LEDデモ

この例では、ピン37(入力)に接続されたボタンを読み取り、ピン31(出力)に接続されたLEDを制御します。ボタンが押されるとLEDが点灯します。

ハードウェアセットアップ

Component Header Pin
LEDアノード(~220Ω抵抗経由) Pin 31 (GPIO output)
LEDカソード Pin 39 (GND)
ボタン — 片方の端子 Pin 37 (GPIO input)
ボタン — もう片方の端子 Pin 39 (GND)

ソフトウェア前提条件

使用するピンがGPIOとして設定されていることを確認してください(srpi-configで周辺機能が disabled になっている必要があります)。GPIOライブラリが未インストールの場合はインストールします:

pip3 install gpio

Enter fullscreen mode Exit fullscreen mode

実行方法

デモスクリプトはボードイメージの /app/40pin_samples/ に収録されています。そこに移動して実行します:

cd /app/40pin_samples
sudo python3 button_led.py

Enter fullscreen mode Exit fullscreen mode

期待される出力

スクリプト起動時に以下が表示されます:

Starting demo now!

Enter fullscreen mode Exit fullscreen mode

デモ実行中、ボタンの押下/解放のたびにピン31に出力される状態が表示されます:

Outputting 0 to Pin 31
Outputting 1 to Pin 31

Enter fullscreen mode Exit fullscreen mode

0 はLED消灯、1 はLED点灯を意味します。

ソースコード: button_led.py

#!/usr/bin/env python3
# button_led.py
# Pin 37: input  (button)
# Pin 31: output (LED)

import time
import gpio

# Configure pins
gpio.pin_mode(37, gpio.INPUT)   # Button as input
gpio.pin_mode(31, gpio.OUTPUT)  # LED as output

print("Starting demo now!")

last_state = None

try:
    while True:
        # Read the button state
        button_state = gpio.digital_read(37)

        if button_state == 0:
            # Button pressed (pulled low)
            gpio.digital_write(31, 1)
            new_state = 1
        else:
            # Button released
            gpio.digital_write(31, 0)
            new_state = 0

        if new_state != last_state:
            print("Outputting {} to Pin 31".format(new_state))
            last_state = new_state

        time.sleep(0.05)  # Simple debounce

except KeyboardInterrupt:
    print("\nExiting demo...")
finally:
    gpio.digital_write(31, 0)
    gpio.cleanup()

Enter fullscreen mode Exit fullscreen mode

💡 ヒント: LEDの動作が反転している場合は、ボタンモジュールにプルアップ抵抗が含まれている可能性があります。if button_state == 0: ブロック内の 01 のロジックを入れ替えて、ハードウェアに合わせてください。

トラブルシューティング

  • Permission denied: GPIOアクセスにはroot権限が必要です。必ず sudo でスクリプトを実行してください。
  • Pin not responding: srpi-config でピンが disabled(GPIOモード)に設定されていること、および変更後に再起動したことを確認してください。
  • Demo file missing: サンプルは /app/40pin_samples/ にあります。ディレクトリが存在しない場合は、ボードイメージを更新するか、公式RDK X5ドキュメントからサンプルをコピーしてください。

まとめ

以下の内容を習得しました:

  • RDK X5 40ピンヘッダーのピン配置と電気的制限の確認。
  • ピンマルチプレックスおよび okay / disabled ステータスの意味の理解。
  • srpi-config を用いた周辺バスの有効化/無効化。
  • ユーザースペースPythonによるボタン + LED回路の制御。

これにより、同じ40ピンヘッダーからI2Cセンサー、UART通信、SPIディスプレイ、PWMモーター制御などへ展開できます。


*この記事はD-Robotics公式ドキュメントを基にしています。出典: https://d-robotics.github.io/rdk_x_doc/en/Basic_Application/01_40pin_user_sample/40pin_define?v=3.5.0&p=RDK+X5