2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AR9341の二つ目のuart

Last updated at Posted at 2025-12-30

mp3ストリームの再生に使っているAR9341なモジュールになんらかの表示機能を付けたいと思いました。

AR9341にはI2CはありませんがGPIOのビットバングで制御することは可能です。しかしGPIOはいろいろ使いあまり残っていません。

AR9341はGPIOピンを他の機能にアサインできるので二つ目のuartを利用すればTX一本ですむので良いかと考えました。

なにかマイコンを使って受信したデータを表示するモジュールを作るつもりです。

FreeBSDのsys/mips/atherosにあるAtherosのコードにはGPIOのOUTのピンアサインを設定する機能が実装されています。なぜかINはありません。

AR9341のデータシートを見ると、コンソールなどで使っているuartと二つ目のuartは全く仕様の違うようです。

AtherosはAR933xでuartの仕様を従来のns16550互換から独自仕様に変更しました。これは大不評だったみたいで、AR934xでは元に戻しました。そのAR933xで作られた新しい仕様のものが二つ目になっているようです。

AR934xではリファレンスクロックを100Mにして最大3MBpsの通信ができるように改良されたようです。

FreeBSDのAtherosのコードはhintsベースのコンフィグレーションでuartが二つあると区別がつかないので二つ目をuart_hsとしました。hsはHigh Speedの略です。

uartのコードはuart_busのコードと実体のuart_devのコードが分離されていて、uart_busのコードを作るだけですみました。

AR933x用に作っていたuart_devのコードがほぼそのまま使えました。

ただAR933xの場合u-bootが初期化してくれているので、その処理を追加しました。

consoleになることはないので、それ関係の処理は入れていません。

既存のAtherosのuart_busコードはgonzoさんが大昔に書いたものがそのままなので、今風な書き方にしてあります。

コードは自分のレポジトリに置いてあります。

GPIOのpinのhintsは以下のように設定しています。

# RESET SW to UART1_TD
hint.gpio.0.func.17.gpiofunc=79
hint.gpio.0.func.17.gpiomode=1
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?