Armadilloフォーラム

SPI通信速度

kyas-t5

2021年1月22日 10時56分

お世話になります。
Armadillo-x1でSPI通信をCON8の拡張IFを使用し通信が出来ている状態で
通信速度を6MHzにすると問題ないのですが通信速度をさらに早くしたいと考え8MHzに
変更するとクロックとデータ出力の位相がずれるため、スレーブ側の機器(これもこちらで設計している)で正常に受信ができなくなります。
その為、設定の見直しを含め調査しています。
SPI(ECSPI4)
 72:MISO
 73:MOSI
 74:SCLK
 75:SS(GPIO3_IO3)
Armadillo-x1のSPI通信速度は最大でどのくらいまで上げられるのでしょうか?
それとSclkがなまっている(添付画像)のですが設定が合っていないなど考えられるようであればご助力頂けますでしょうか?

ファイル ファイルの説明
sclk.png
コメント

at_akihito.irie

2021年1月25日 16時33分

入江です。

> Armadillo-x1のSPI通信速度は最大でどのくらいまで上げられるのでしょうか?
https://www.nxp.com/products/processors-and-microcontrollers/arm-proces…
i.MX7としての最大クロックは、上記Data Sheetの"4.10.1 ECSPI timing
parameters"より、SCLK Cycle Timeのmin(43ns)より、およそ23MHzとなってお
ります。

> それとSclkがなまっている(添付画像)のですが設定が合っていないなど考えられるようであればご助力頂けますでしょうか?
SCLKのDrive Strengthの設定により改善するかと存じます。
Drive Strengthはdtsから設定可能です。

詳しくは、「i.MX 7Dual Applications Processor Reference Manual」内の
「SW_PAD_CTL_PAD_LCD_HSYNC SW PAD ControlRegister」の章を参考に、

MX7D_PAD_LCD_HSYNC__ECSPI4_SCLK		0x**

の値を修正し、波形を確認してみてください。

> 入江です。
>
> > Armadillo-x1のSPI通信速度は最大でどのくらいまで上げられるのでしょうか?
> https://www.nxp.com/products/processors-and-microcontrollers/arm-proces…
> i.MX7としての最大クロックは、上記Data Sheetの"4.10.1 ECSPI timing
> parameters"より、SCLK Cycle Timeのmin(43ns)より、およそ23MHzとなってお
> ります。
>
> > それとSclkがなまっている(添付画像)のですが設定が合っていないなど考えられるようであればご助力頂けますでしょうか?
> SCLKのDrive Strengthの設定により改善するかと存じます。
> Drive Strengthはdtsから設定可能です。
>
> 詳しくは、「i.MX 7Dual Applications Processor Reference Manual」内の
> 「SW_PAD_CTL_PAD_LCD_HSYNC SW PAD ControlRegister」の章を参考に、
>
>

> MX7D_PAD_LCD_HSYNC__ECSPI4_SCLK		0x**
> 

>
> の値を修正し、波形を確認してみてください。
ご助力ありがとうございます。
教えてただいた内容で調べているのですが現在のArmadilloに実装しているdtsの状況として以下になっています。
arch/arm/boot/dts/armadillo_x1-ecspi4_mcp3202.dts
MX7D_PAD_LCD_CLK__ECSPI4_MISO 0x70
MX7D_PAD_LCD_ENABLE__ECSPI4_MOSI 0x70
MX7D_PAD_LCD_HSYNC__ECSPI4_SCLK 0x70
MX7D_PAD_LCD_VSYNC__GPIO3_IO3 0x70
となっていまして
MX7D_PAD_LCD_HSYNC__ECSPI4_SCLKを変更するとありましたが初心者としては
「i.MX 7Dual Applications Processor Reference Manual」のドキュメントを見ていてもどのように変更をすれば良いか
わかりませんでした。

・8.2.7.199 SW_PAD_CTL_PAD_LCD_HSYNC SW PAD Control
 Register (IOMUXC_SW_PAD_CTL_PAD_LCD_HSYNC)
 ではPSが該当しているように見えていますが正しいでしょうか?
・また、実際に8MHzで通信を行いたい場合の設定はPSを変更するで宜しいですか?
 00 PS_0_100K_PD — 100K PD
 01 PS_1_5K_PU — 5K PU
 10 PS_2_47K_PU — 47K PU
 11 PS_3_100K_PU — 100K PU
 これの意味もわからないので申し訳ないのですが改めてご助力頂けると助かります。
・同じdtsファイルのしたにspi-max-frequency = <1000000>;
 とありますがこれは変更の必要はないですか?

> > 入江です。
> >
> > > Armadillo-x1のSPI通信速度は最大でどのくらいまで上げられるのでしょうか?
> > https://www.nxp.com/products/processors-and-microcontrollers/arm-proces…
> > i.MX7としての最大クロックは、上記Data Sheetの"4.10.1 ECSPI timing
> > parameters"より、SCLK Cycle Timeのmin(43ns)より、およそ23MHzとなってお
> > ります。
> >
> > > それとSclkがなまっている(添付画像)のですが設定が合っていないなど考えられるようであればご助力頂けますでしょうか?
> > SCLKのDrive Strengthの設定により改善するかと存じます。
> > Drive Strengthはdtsから設定可能です。
> >
> > 詳しくは、「i.MX 7Dual Applications Processor Reference Manual」内の
> > 「SW_PAD_CTL_PAD_LCD_HSYNC SW PAD ControlRegister」の章を参考に、
> >
> >

> > MX7D_PAD_LCD_HSYNC__ECSPI4_SCLK		0x**
> > 

> >
> > の値を修正し、波形を確認してみてください。
> ご助力ありがとうございます。
> 教えてただいた内容で調べているのですが現在のArmadilloに実装しているdtsの状況として以下になっています。
> arch/arm/boot/dts/armadillo_x1-ecspi4_mcp3202.dts
> MX7D_PAD_LCD_CLK__ECSPI4_MISO 0x70
> MX7D_PAD_LCD_ENABLE__ECSPI4_MOSI 0x70
> MX7D_PAD_LCD_HSYNC__ECSPI4_SCLK 0x70
> MX7D_PAD_LCD_VSYNC__GPIO3_IO3 0x70
> となっていまして
> MX7D_PAD_LCD_HSYNC__ECSPI4_SCLKを変更するとありましたが初心者としては
> 「i.MX 7Dual Applications Processor Reference Manual」のドキュメントを見ていてもどのように変更をすれば良いか
> わかりませんでした。
>
> ・8.2.7.199 SW_PAD_CTL_PAD_LCD_HSYNC SW PAD Control
>  Register (IOMUXC_SW_PAD_CTL_PAD_LCD_HSYNC)
>  ではPSが該当しているように見えていますが正しいでしょうか?
> ・また、実際に8MHzで通信を行いたい場合の設定はPSを変更するで宜しいですか?
>  00 PS_0_100K_PD — 100K PD
>  01 PS_1_5K_PU — 5K PU
>  10 PS_2_47K_PU — 47K PU
>  11 PS_3_100K_PU — 100K PU
>  これの意味もわからないので申し訳ないのですが改めてご助力頂けると助かります。
> ・同じdtsファイルのしたにspi-max-frequency = <1000000>;
>  とありますがこれは変更の必要はないですか?
1点修正をさせて下さい。
ECSPI4としていましたがCOM8のECSPI2を使用しています 。
失礼いたしました。
ECSPI2で確認すると
 MX7D_PAD_ENET1_RGMII_TD2__ECSPI2_MISO 0x70
 MX7D_PAD_ENET1_RGMII_RD3__ECSPI2_MOSI 0x70
 MX7D_PAD_ENET1_RGMII_RD2__ECSPI2_SCLK 0x70
 MX7D_PAD_ENET1_RGMII_TD3__GPIO7_IO9 0x70

 spi-max-frequency = <8000000>;
でした。

at_akihito.irie

2021年1月29日 10時37分

入江です。

> > ・また、実際に8MHzで通信を行いたい場合の設定はPSを変更するで宜しいですか?
> >  00 PS_0_100K_PD — 100K PD
> >  01 PS_1_5K_PU — 5K PU
> >  10 PS_2_47K_PU — 47K PU
> >  11 PS_3_100K_PU — 100K PU
> >  これの意味もわからないので申し訳ないのですが改めてご助力頂けると助かります。

dtsの修正は、SCLKの波形のなまりに対する解決策のひとつです。
8MHzでSCLKの位相がずれる問題とは関係ありません。

ちなみに今回は無関係ですが、PSはi.MX 7D内部で当該のピンを特定の抵抗値
でプルアップ/プルダウンするという設定項目です。

SCLKのなまりに対する対策ですが、ECSPI2を使用しているのでしたら、dtsの

MX7D_PAD_ENET1_RGMII_RD2__ECSPI2_SCLK	0x70

の部分を修正します。

「i.MX 7Dual Applications Processor Reference Manual」内の
「SW_PAD_CTL_PAD_ENET1_RGMII_RD2 SW PAD ControlRegister」の章を参照し
てください。

今回はDrive Strengthですので、DSEを修正します。
現在DSEは0x70の末尾2bitですので、00に設定されているようです。
値を変えつつ波形のなまりを確認してみてください。

位相のずれに関してましては、まずはArmadilloに接続されるお客様がお使い
のSPIスレーブデバイスの仕様を再度ご確認いただけますでしょうか(最大動作
周波数やSPIモードなど)。

以上、よろしくお願いいたします。