九州・福岡・東京ときどきIoT

21年間のはてなダイアリー&アメブロからの避難所

Rp2040起動時のGPIO出力について

RP2040のMicroPythonにおいて、起動時のGPIO端子の初期値は、入力 (Input) モードに設定され、プルダウン抵抗が有効になっています。

したがって、初期状態では、GPIOピンは外部からの入力信号を待機する状態であり、内部的には**LOW (L)**に近い電位に弱く引っ張られています。

詳細:

  • 入力 (Input) モード: 電源投入直後、GPIOピンは出力として信号を外部に送るのではなく、外部からの信号を受け取るように設定されています。これにより、意図しない出力動作を防ぎます。
  • プルダウン抵抗 (Pull-down Resistor) 有効: RP2040のGPIOコントローラには、内部にプルアップ抵抗とプルダウン抵抗を有効にする機能があります。起動時には、ほとんどのGPIOピンでプルダウン抵抗がデフォルトで有効になっています。これは、ピンが浮遊状態になるのを防ぎ、ノイズなどによる誤動作のリスクを低減するためです。プルダウン抵抗が有効になっていると、外部から信号が入力されない限り、ピンの電位はGND(0V)に近い状態になります。

まとめ:

RP2040のMicroPython環境において、起動時のGPIO端子は以下のようになっています。

  • モード: 入力 (Input)
  • 初期値 (電気的状態): LOW (L) に近い状態 (プルダウン抵抗により)

ただし、これはあくまでデフォルトの設定であり、MicroPythonのコード内でGPIOピンのモードやプルアップ/プルダウンの設定を変更することで、起動後の状態を制御できます。例えば、machine.Pin(pin_number, machine.Pin.IN, machine.Pin.PULL_UP) のように設定すれば、起動後すぐにプルアップ抵抗を有効にすることも可能です。

 

RP2040のプルダウン抵抗は、電源が安定し、RP2040のGPIOコントローラが初期化された直後から動作を開始します。

具体的には、以下の段階でプルダウン抵抗が有効になると考えられます。

  1. 電源投入と初期化: RP2040に電源が供給されると、内蔵の電源レギュレータが動作し、コア電圧が安定化します。その後、チップ内の基本的なハードウェアブロックが初期化されます。これには、GPIOコントローラも含まれます。
  2. ブートROMの実行: 電源投入シーケンスが完了すると、内蔵ROMに格納されたブートコードが実行を開始します。このブートROMは、システムの初期設定を行い、外部フラッシュメモリやUSBからのブートローダーの起動を試みます。
  3. GPIOコントローラのデフォルト設定: ブートROMの初期化処理の中で、GPIOコントローラのレジスタがデフォルト値に設定されます。このデフォルト値には、多くのGPIOピンが入力モードに設定され、プルダウン抵抗が有効になる設定が含まれています。

重要なポイント:

  • プルダウン抵抗が有効になるのは、ソフトウェア(ブートROM)がGPIOコントローラを初期化した後です。電源が供給された瞬間から物理的に抵抗が接続されているわけではありません。
  • ブートROMの実行は非常に高速に行われるため、電源投入からプルダウンが有効になるまでの時間はごくわずかです。通常、意識する必要のないレベルの短い時間です。
  • MicroPythonファームウェアが起動する前、つまりブートローダーの段階ですでにGPIOピンはデフォルトの入力・プルダウン設定になっています。

したがって、MicroPythonファームウェアが起動し、あなたのコードが実行される時点では、GPIOピンは初期値として入力モードでプルダウン抵抗が有効な状態になっていると考えて問題ありません。

もし、ごく初期の立ち上がり時に特定のGPIOの状態を確実に制御したい場合は、ハードウェア的な対策(外部プルアップ/プルダウン抵抗の追加など)を検討する必要があるかもしれません。しかし、通常の使用においては、RP2040の内部プルダウン抵抗は電源投入後、速やかに有効になり、ピンの浮遊を防ぐ役割を果たします。

@