目次: ROCK64/ROCKPro64
昨日(2018年11月10日の日記参照)の続きです。残る問題は3つありました。
2番目の「認識しなくなる問題」の原因が判明しました。
I2S2を有効にするとSPDIFが使えなくなる問題は、DMAの資源が枯渇していたせいでした。
RK3328はARMのPL330(or互換)のDMAを持っています。SPI, UART, I2S, SPDIF, PWM, PDMなど16のハードウェアがこのDMAを使えますが、実は同時に使えるのは8つまでという制約があります。知るかそんなこと……。
オーディオ系のハードを全てdisableにしたときのDMA資源の割り当ては、
このようになっていて、残りは4つです。
I2S0, 1, 2はそれぞれDMA資源を2つ使い(TX, RXがあるため)、SPDIFは資源を1つ使います(TXしかないため)。
Rockchip Linux(Rockchipが独自にメンテナンスしているLinuxのツリーのこと)の設定ではI2S0, I2S1のみを有効にしてSPDIFを切り捨てています。ちょうど資源を8つ使いきる設定ですね。ROCK64はピンヘッダにしかSPDIF信号が出せませんし、捨てるのも妥当かなとは思います。
私が前にエラーになってできないと言っていたパターンはI2S0, I2S1, I2S2, SPDIFを有効にするパターンです。この場合、
以上のようにDMA資源が足りなくなり、エラーになってしまいます。
ちなみにI2S0, I2S1, SPDIFを有効に(11/16: I2S2 → I2S1に訂正)すると、一応動くのですが、割り当てを調べると、
このようにUARTが犠牲になってしまうようです。Audioが動いても、UARTが死んじゃうのはダメな気がします。
(11/16加筆)UARTはDMAが無効になっても動作はしますので、死んでしまうという言い方は間違いでした。正しくは、Audioのために勝手にUARTのDMAを無効にしてしまうのはダメな気がします。デバイスツリー上は有効になっているように見えるので。
せっかく鳴るようになったSPDIFを活かすか、Rockchip Linuxに合わせるか、さて、どうしたもんかなあ。
メモ: 技術系の話はFacebookから転記しておくことにした。少し加筆。
< | 2018 | > | ||||
<< | < | 11 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | - |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.15.
using GD bundled (2.1.0 compatible)(png support.)