Facebookって、職業の「現在も働いています」チェックを外さないと、2社で働いていることになってしまうんですね。知らなんだ。
メモ: 技術系の話はFacebookから転記しておくことにした。
目次: ROCK64/ROCKPro64
また忘れてしまいそうなので、メモがてら残しておきます。
ROCK64のデバイスツリーを見ると、I2Sデバイスの先頭i2s0には2つクロックが定義されています。ラベルはi2s_clkとi2s_hclkです。再生時にマスタークロックとして使われるのは前者の方で、クロックコントローラのID: SCLK_I2S0(= 41)のクロックでした。
RK3328のクロックドライバから、SCLK_I2S0のクロックを調べてみると、クロックゲートはCRU_CLKGATE_CON1アドレス0xff440204のビット3のようです。RK3328のTRM(Technical Reference Manual)を見るかぎり、ビット3のフィールド名はclk_i2s0_enとなっているので、たぶん合ってるでしょう。
クロックの設定はCRU_CLKSEL_CON6アドレス0xff440118のようです。レジスタの値をダンプしてみると、親クロックはCPLLで分周比1/16の設定になっていました。理由は知りません。
CPLLの発振周波数として /sys/kernel/debug/clk/cpll/clk_rateを信じるなら、CPLLは1.2GHzらしいです。従ってi2s0のマスタークロックは1.2GHz / 16 = 75MHzですね。
RK3328のI2Sドライバは、2 * 32 * fs(48kHzなど)と、マスタークロックが整数比にならない場合、エラーで弾く実装になっています。オーディオ用のコーデックICの仕様書とかで出てくる表現で書くと、MCLK = 64fsです。
しかし48kHzや44.1kHzは、75MHzとは整数比になることはありません。ふーむ、困った。次は、マスタークロックの周波数を変える方向で調べてみましょうかねえ。
目次: ROCK64/ROCKPro64
やっとROCK64を置けそうな場所を確保できて、Linuxカーネルで遊べるようになりました。
先月linux-nextでRK3328のAudio(I2S)を動かそうとしていたことまでは覚えているものの、どうして動かないのか、どうやって追うつもりだったか、完全に忘れました。
引っ越し前にLKMLにぶん投げたパッチは、全てUpstreamに取り込まれたようですから、ここらで一つ、初心に帰って解析するのもありでしょう。
できればボードが訳わからん動きをした時のデバッグのため、オシロをボードの隣に置きたいんですが、自分のスペース(60cm幅の棚1つだけ)には置けそうにありません。困ったな〜。
ついでにRaspberry Pi 3もROCK64の隣に置いておきました。とはいえRasPi 3はカーネル起動時にシリアルを出す方法が分からんので、カーネル開発用としてはほとんど使っていません。
それと気のせいでなければ、RasPi 3はROCK64より一段遅い気がします。どちらも同じCortex A53 x 4で、SDカードからブートしているんですけどね。メモリアクセスが遅いのかなあ?
< | 2018 | > | ||||
<< | < | 10 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | 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 | 31 | - | - | - |
合計:
本日:
管理者: 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.)