k-tsuru
2017年6月21日 20時29分
いつもお世話になっております。
Armadillo-X1にて、拡張I/F(CON8)のSPI利用時、
クロックの周波数設定についてご教授ください。
サンプル等を参考に、50MHzでの動作を行おうとしましたが、
30MHz程度しか出力されておりませんでした。
設定等足りない点を教えて頂きたく思います。
---------------------------------------------------
SPIの設定に関しては、下記投稿を利用させていただきました。
https://users.atmark-techno.com/blog/615/2577
armadillo_x1-ecspi4_user1.dtsを利用させてもらい、
spi-max-frequencyを下記のように修正。
・spi-max-frequency = <50000000>;
ユーザーランド側にて、spidevのioctl、
・SPI_IOC_RD_MAX_SPEED_HZ、
・SPI_IOC_WR_MAX_SPEED_HZ
それぞれ50000000に設定。
---------------------------------------------------
上記設定後、ioctlのSPI_IOC_MESSAGEより、データの読み込みを実施した所、
SCLKのクロックが期待の値となっておりませんでした。
何か設定等足りないものがあると思いますので、ご助言いただけませんでしょうか。
以上、よろしくお願い致します。
コメント
k-tsuru
溝渕様
いつもお世話になっております。
回答ありがとうございます。
> 源clockが60MHzなので、50MHzで動かそうとすると、div2で30MHzになってしまいます。
imx7dual-reference-manualを確認したところ、
・源clock p1145「ECSPI4_CLK_ROOT」のFrequencyが60MHz
・Div p2602 「ECSPIx_CONREG」の15-12bit (にて出力可能な周波数を設定)
という事でしょうか。
p506, p524にある記載より、SYS_PLLの480MHzを2分周して、
60MHzのソースとなっているPLL_SYS_MAIN_240Mを生成していると思われますが、
PLL_SYS_MAIN_240Mからの240MHz⇒60MHzの仕組みが読み取れませんでした。
> 50MHzで動作させたい場合は親clockの変更等を行う必要があります。
源clock 60MHzの変更方法をご教授お願いできませんでしょうか。
よろしくお願い致します。
at_mizo
溝渕です。
> > 源clockが60MHzなので、50MHzで動かそうとすると、div2で30MHzになってしまいます。
> imx7dual-reference-manualを確認したところ、
> ・源clock p1145「ECSPI4_CLK_ROOT」のFrequencyが60MHz
> ・Div p2602 「ECSPIx_CONREG」の15-12bit (にて出力可能な周波数を設定)
> という事でしょうか。
>
> p506, p524にある記載より、SYS_PLLの480MHzを2分周して、
> 60MHzのソースとなっているPLL_SYS_MAIN_240Mを生成していると思われますが、
> PLL_SYS_MAIN_240Mからの240MHz⇒60MHzの仕組みが読み取れませんでした。
ecspi3_srcは、pll_sys_main_240m_clkで240MHzです。
これを、p506にあるpre dividerでdiv4し、ecspi3_root_clkは60MHzになります。
さらに、p2602にあるPRE/POST_DIVIDERでdiv2して30MHzになっています。
> > 50MHzで動作させたい場合は親clockの変更等を行う必要があります。
> 源clock 60MHzの変更方法をご教授お願いできませんでしょうか。
丁度50MHzを作るのであれば、pll_enet_250m_clkを使うのが良いと思います。
ecspi4_root_clkは、最大80MHzなので、ここを50MHzにしています。
DTS内のecspi4ノードのプロパティとして、以下を追加してください。
assigned-clocks = <&clks IMX7D_ECSPI4_ROOT_SRC>,
<&clks IMX7D_ECSPI4_ROOT_CLK>;
assigned-clock-parents = <&clks IMX7D_PLL_ENET_MAIN_250M_CLK>;
assigned-clock-rates = <0>, <50000000>;
k-tsuru
溝渕様
いつもお世話になっております。
下記設定を行ったところ、無事目的のクロックでの動作を確認できました。
> assigned-clocks = <&clks IMX7D_ECSPI4_ROOT_SRC>,
> <&clks IMX7D_ECSPI4_ROOT_CLK>;
> assigned-clock-parents = <&clks IMX7D_PLL_ENET_MAIN_250M_CLK>;
> assigned-clock-rates = <0>, <50000000>;
ご助力感謝いたします。
ご教授いただき、ありがとうございました。
at_mizo
2017年6月23日 10時29分
溝渕です。
> サンプル等を参考に、50MHzでの動作を行おうとしましたが、
> 30MHz程度しか出力されておりませんでした。
源clockが60MHzなので、50MHzで動かそうとすると、div2で30MHzになってしまいます。
50MHzで動作させたい場合は親clockの変更等を行う必要があります。