link もっと前
   2019年 2月 18日 -
      2019年 2月 9日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示

日々

link permalink

RockPro64 のシリアル文字化け - 回路図を見る

RockPro64 シリアル文字化けの話のまとめ。

RockPro64 のシリアル文字化けの原因は、RK3399 の端子ドライブ能力不足が原因である可能性は高そうですが、最大値の 12mA に設定しても立ち上がりが遅い(立ち下がり 50ns 以下に対し、立ち上がり 300ns 以上かかる)点が気になります。

SoC 以外に原因があるとすれば、ボードの回路くらいですが、回路となると門外漢も良いところで、確かめ方がわかりません。

RockPro64 の Schematics を素直に信じると、SoC の出力ピンが直接コネクタに接続されていて、抵抗も何もないように読めます。RK3399 は SoC 裏面がハンダ付けされている(BGA)ため、コネクタ〜SoC 端子間に、本当に抵抗や断線がないかどうかは確かめようがありません。

文字化けの頻度はかなり減ったので、今のままでもそれなりに使えますが、なぜ立ち上がりだけが異常に遅いのか、釈然としません。うーん……。

ドライバ観点からの Rock64 や RockPro64 の使いやすさ

Rock64 というか Rockchip RK3328 の HDMI ドライバは drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c です。このドライバは多くの処理を drivers/gpu/drm/bridge/synopsys/dw-hdmi.c つまり Synopsys DesignWare の HDMI IP 用のドライバに頼っています。

Synopsys の HDMI ドライバは映像出力と、音声出力の機能を持っています。映像側の作りは知りませんが、音声側は ASoC フレームワークに合わせて作られています。そのお陰で Rock64 に HDMI 音声出力対応を追加するときは、デバイスツリーに記述を足すだけで良く、非常に楽でした。

Synopsys のドライバは linux-next に Upstream されていますが、コミットログを見る限り Synopsys のメールアドレスの人はあまり出現しません

社外の人や、会社と関係のない所属の人がわざわざドライバに修正をコミットしてくれるなんて、凄いことだと思います。人気のある IP のドライバを OSS にすると、色々な人が直してくれて、正のスパイラルが構築される、良い例と言えるでしょう。

この辺の根回しの良さは、さすが IP 屋さんの Synopsys って感じがしました。

メモ: 技術系の話は Facebook から転記しておくことにした。追記した。

[編集者: すずき]
[更新: 2019年 4月 1日 01:50]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

RockPro64 のシリアル文字化け - オシロスコープで解析

RockPro64 シリアル文字化けの話のまとめ。

以前(2018年 12月)に RockPro64 を購入したのですが、シリアルが文字化けして使い物にならず、ずっとお蔵入りになっていました。

最初はケーブルの接続や、接地がおかしいのかと思いましたが、GND 側はきっちり 0V でした。どうも単純な原因ではなさそうだったので、オシロスコープで信号を見ることにしました。テストパターンとして 0 と 1 が交互に出現し、一番転送が難しいパターンと思われる 0x55 'U' の文字を出力しています。

正常に出力できている Rock64 と比較すると、Rock64 は出力が 0 → 1 → 0 と変化する際に 0V → 3V → 0V のように電圧が振れますが、RockPro64 は、0V → 2.48V → 0V のように立ち上がり側が遅く、中途半端な電圧になっています。

下記の画像の青色の線が Rock64 のシリアル出力で、オレンジ色の線が RockPro64 のシリアル出力です。どちらも 1秒ごとに 'U' を出力して、最初の立ち下がり(Start Bit、必ず 0)にトリガを掛けています。


Rock64 のシリアル出力の波形


RockPro64 のシリアル出力の波形

Rock64 は綺麗な波形ですが、RockPro64 は 0V → 3V への立ち上がりが間に合っていないことが分かるかと思います。

文字化けの原因ですけども、シリアルの転送速度(1.5Mbps、1ビット 666ns)に対し、0 → 1 の立ち上がりが遅すぎる(650ns くらい)からでしょう。出力側は 1 を送出しているつもりでも、信号が立ち上がるのが遅いため、受信側は 0 だと解釈してしまう場合があります。

転送速度を落とせば改善するかもしれません。しかし Rockchip の U-Boot はなぜか 1.5Mbps 固定で転送してくる困った奴で、下手にシリアルの転送速度を変えると U-Boot が操作できなくなり、非常に使いづらいのです。イマイチですね……。

RockPro64 のシリアル出力の文字化けを改善する

RockPro64 には Rockchip の RK3399 と言う SoC が搭載されていて、RK3399 は一部のピンの Drive Strength、つまりピンに流せる電流量を調整できます。決して特殊な機能ではなく、大抵の SoC が持つ普通の機能です。

RockPro64 がコネクタに引き出しているシリアルは UART2 です。UART2 は GPIO4_C4(TX)と GPIO4_C3(RX)というピンに割り当てられています。幸運なことに RK3399 ではこれらのピンの Drive Strength が変更できるので、設定値を振って(※)オシロで波形を見てみました。

下記の画像が測定結果です。1枚目はデフォルトかつ最小の 3mA、2枚目は最大の 12mA 設定です。出力している文字は前回同様 0x55 'U' で、トリガも前回同様 Start Bit の立ち下がりに仕掛けています。オシロの Rising, Falling Time 解析を ON にしたので、立ち上がり、立ち下がりに掛かった時間も一緒に表示されています。


Drive Strength = 3mA のときのシリアル出力波形


Drive Strength = 12mA のときのシリアル出力波形

字が若干見づらいので、一応書いておくと、立ち上がりの時間は 650ns → 300ns くらいに改善しました。良い感じですね。

ちなみにスクリーンショットの色が変で、文字が読みづらいのは仕様です。Tektronix さん、スクリーンショット背景の白黒反転処理、バグってますよ……??

それはさておき Drive Strength の変更で、RockPro64 のシリアル文字化けはかなり改善されました。しかし完全ではなく大量に出力した際に若干文字化けします。

さらなる改善のためには、シリアルの転送速度を落とすくらいしか思いつきません。が、U-Boot の書き換えをするのが面倒くさいので、また今度にします……。

(※)レジスタ名は GRF_GPIO4C_E で、アドレスは 0xff77e138 です。書き込む値は 0x03c00xx0 をお勧めします。xx の部分はドライブ能力を最小にするなら 00 で、最大にするなら 3c です。

メモ: 技術系の話は Facebook から転記しておくことにした。追記、文章の組み換えをした。

[編集者: すずき]
[更新: 2019年 3月 21日 17:35]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

クロック分周器

Linux のクロックフレームワークで実装できるクロック分周器のドライバは 2種類あります。

1つは integer divider で、入力されたクロック周波数の 1/3 や 1/4 など整数比の周波数で出力するハードウェアです。もう 1つは fractional divider で、周波数を x/y にするハードウェアです。

後者の fractional divider ドライバは、標準動作とカスタム動作のドライバが書けます。

標準動作の場合、分子と分母に設定できる値に、何ら制約がないものとして動作します。カスタム動作のドライバは、特殊な制約のあるハードウェア向けです。

今のところカスタム動作の fractional divider ドライバを実装しているのは Rockchip だけです。Rockchip の場合、分母が分子の 20 倍以上でなければ出力周波数が不安定になる制約があるようです。

Rockchip が変な仕様であることは間違いないと思いますが、Linux に対応しているだけ、まだマシとも取れますね。

世の中には「どうしてこうなった??」としか思えない、変な仕様のハードウェアがたくさん存在しますし……。

メモ: 技術系の話は Facebook から転記しておくことにした。

[編集者: すずき]
[更新: 2019年 2月 13日 00:23]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2019年 2月 18日 -
      2019年 2月 9日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 10/13 23:20

カレンダー

<2019>
<<<02>>>
-----12
3456789
10111213141516
17181920212223
2425262728--

最近のコメント 5件

  • link 19年09月01日
    すずき 「私も正直びっくりです。間違って違う製品を...」
    (更新:09/04 23:39)
  • link 19年09月01日
    hdk 「車向けの製品の中でも、車載コンピューター...」
    (更新:09/02 23:20)
  • link 19年07月18日
    hdk 「あっ、AAMはマニュアルのオペレーション...」
    (更新:07/25 00:02)
  • link 19年07月18日
    すずき 「AAM(ASCII Adjust AX ...」
    (更新:07/24 22:22)
  • link 19年07月18日
    hdk 「加算減算は符号のありなしどちらも命令が同...」
    (更新:07/24 07:25)

最近の記事 3件

link もっとみる
  • link 19年10月06日
    すずき 「[RISC-V のバイナリダンプを逆アセンブルする] 相変わらず空...」
    (更新:10/13 23:20)
  • link 19年10月12日
    すずき 「[台風 19号] あの台風 15号(Faxai)(2019年 9月...」
    (更新:10/13 22:04)
  • link 19年09月08日
    すずき 「[台風 15号] 超強力な台風 15号(Faxai)が来るというこ...」
    (更新:10/13 22:03)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報