Raspberry Pi 5のRP1-Chipを使い倒す(GPIO)

Raspberry Pi 5 からGPIOなどの周辺機能がRP1という新しいチップへ変更されたことで今までのライブラリが全て動作しなくなってしまったがそのチップへの興味は尽きないというか気になりだすと止まらない性格でもあるのでとりあえずGPIOだけでも理解できたらと調べてみた。

従来のGPIOはRIO(Registered IO)として対応はされているがRIOなど使わなくてもで同じことができてしまうのが素晴らしい。

ただ、毎度のことながら新しい機能を使おうとすると既存のコードとの互換性が損なわれてしまうのがなんとも歯がゆい...いつかは解決するのだろうが...とか、まぁ、余計なことを考えながらGPIOだけでも操作してみたいとRIOを使ったライブラリを作ってみた。

ライブラリはRP1の全機能が全て操作できるように対応してみたつもりだがサンプル・プログラムは定番のLチカだ。

まずはこれができないとね。(笑)

ちなみに単純ループでのLチカ出力周波数は約20MHzだった。かなり早いかも! と思ったが、後日、いろいろ試してみると4MHzちょいくらいから間隔が制御できなくなり20MHzになってしまう現象が確認できた。つまり20MHzは出るけれど制御不可能な状況であり、IO同期処理を追加した後のLチカ出力周波数は約7MHzくらいとなった。

それと実行するにはルート権限が必要なことに注意しよう!

【Lチカ実行の様子】
抵抗入りのLEDを使っているので安易にマネしないように。v(-_-;)

ちなみにGPIOピンの入力変化を指定のコールバック関数で待ちたいときは下記ライブラリを併用すると良い。【ピン変化割り込みのサンプル】

GPIO Character Device で GPIO を制御するライブラリ

【続編】
Raspberry Pi 5のRP1-Chipを使い倒す(PWM)

【関連投稿】
Raspberry Pi 5 のSoftware-I2C libraryを作ってみた。
Raspberry Pi 5 のSoftware-SPI libraryを作ってみた。

【サンプル・プラグラム】

【修正】
2025-05-12
IOを同期する正しい方法がわかったので修正。以前に試して効果なかった気がするけど何か勘違いがあったようだ。v(-_-;)

2025-05-09
pinMode()とdigitalWrite()を改良しTOGGLE出力を高速化。

2025-05-06
pinMode()に出力初期値指定の追加と不必要なプルアップ設定を解除するようにした。

2025-05-02
下記関数を追加。
static unsigned long nanos(void)
static unsigned long micros(void)
static unsigned long millis(void)
static void delayNanoseconds(unsigned long ns)
static void delayMicroseconds(unsigned long us)
static void delay(unsigned long ms)

2025-04-30
digitalWrite()の出力がリアルに反映されない現象の対策を行った。
その結果、Lチカ出力周波数は、SET/CLRで最大5MHz、TOGGLEでは最大400KHzとなる。

【ライブラリ】

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


This site uses Akismet to reduce spam. Learn how your comment data is processed.