2022年3月8日火曜日

ZYBO用Linux作成時のXilinx/linux-xlnxとu-boot-xlnxのzynq-zybo.dtsのクロックの罠

久々にZYBO用のLinuxイメージを作成しようとu-bootやカーネルの構築をしていた。
u-bootとカーネルが出来上がり、既に別基板で動作しているrootfsが構築されたSDカードに入れ、ZYBOのJ11(microBのUSB)をPCへつなげ、
TeraTermにてCOM接続でコンソールを表示させようとした。
なにか表示はされているものの文字化けしてしまっている。リセットスイッチを押して再起動をかけても同じように文字化けしてしまう。
文字が出るタイミングがブート時のそれっぽい感じなので起動自体はしていそうな感じだった。
TeraTermの設定を確認するも設定は問題なく、もちろんボーレートは115200bpsでデバイスツリーに記述されたボーレートと一致している。

デバイスツリーがうまく読み込まれず115200bpsではない異なるボーレートになっている可能性を考えTeraTerm標準で選択可能なボーレートを試したがどれも文字化けしてしまう。
念のためArduinoのシリアルモニタでも確かめてみる。TeraTermでは標準ではない74880bpsでビンゴ。なぜか74880bpsで文字化けせずに通常通り起動できた。
文字化けしないボーレート突き詰めたしこのままでいいかとも思ったが、SSHログインしようとLANケーブルをつなげてもうまく通信できない。pingも通らない。Ethernet部が正常に動いていないのか。

やっぱり真因を突き止めないとダメなようなのでu-bootとカーネルのデバイスツリーを眺めていると、zynq-zybo.dtsのクロック部分が「ps-clk-frequency = <50000000>」になっていることに気が付いた。
ZYBOのクロックって33.33・・・MHzだったような気がする。vivadoを開いてボードファイルがZybo Z7-20に設定されたzynqのIP設定を見てみるとやはり33.333333MHzとなっている。
linux-xlnx(https://github.com/Xilinx/linux-xlnx/blob/master/arch/arm/boot/dts/zynq-zybo.dts)とu-boot-xlnx(https://github.com/Xilinx/u-boot-xlnx/blob/master/arch/arm/dts/zynq-zybo.dts)両方のzynq-zybo.dtsとも「ps-clk-frequency = <50000000>」を「ps-clk-frequency = <33333333>」に変更しビルドし起動させた。
ボーレートは115200bpsで文字化けなし、SSHログインも問題なく、Ethernetは正常に動いているようだ。

クロック設定の正誤の比33333333÷50000000=0.66666666、ボーレートの比74880÷115200=0.65となりほぼ一致するのでやっぱりクロックの記述ミスが文字化けの原因と考えて間違いない。
なんでZYBO用のデバイスツリーなのに33.333333MHzではなく50MHzと書かれたままなんだろうか。Z7-20じゃないZYBOは50MHzだったりするんだろうか。結構な罠な気がする。

0 件のコメント:

コメントを投稿