これはTJA1120Aのデバイスツリーです - cpsw_port1、cpsw3g_phy0
&cpsw_port1 {
status = "okay";
phy-mode = "rgmii-txid";
phy-handle = <&cpsw3g_phy0>;
};
&cpsw_port2 {
status = "okay";
phy-mode = "rgmii";
phy-handle = <&cpsw3g_phy1>;
};
&cpsw3g_mdio {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&main_mdio1_pins_default>;
cpsw3g_phy0: ethernet-phy@0 {
compatible = "ethernet-phy-id001b.b031";
reg = <4>;
};
cpsw3g_phy1: ethernet-phy@1 {
compatible = "ethernet-phy-id0022.1620";
reg = <0>;
txc-skew-ps = <900>;
rxc-skew-ps = <900>;
rxd0-skew-ps = <420>;
rxd1-skew-ps = <420>;
rxd2-skew-ps = <420>;
rxd3-skew-ps = <420>;
txd0-skew-ps = <420>;
txd1-skew-ps = <420>;
txd2-skew-ps = <420>;
txd3-skew-ps = <420>;
rxdv-skew-ps = <420>;
txen-skew-ps = <420>;
};
};ここでは、TJA1120Aのphy-modeとして「rgmii-txid」を指定します。
しかし、レジスタRGMII_TXC_DELAY_CONFIGを読み取ると、 0x0014が読み取られ、これは遅延なし(15ビット目)を意味し、 RGMII_RXC_DELAY_CONFIGは0x8014を読み取り、これは遅延が設定されている(15ビット目)ことを意味します。
また、DTでphy-modeを「rgmii-rxid」に変更すると、 RGMII_RXC_DELAY_CONFIGは0x0014、 RGMII_TXC_DELAY_CONFIGは0x8014になります。
DTで「rgmii」を設定し、phytoolを使用してこれらのレジスタを設定してみましたが、完全に反映され、pingが開始され、その後RGMII_RXC_DELAY_CONFIGの15ビット目がHIGHに設定され、 RGMII_TXC_DELAY_CONFIGの15ビット目がLOWに設定されました。
物理モードのDT設定において、なぜこのような反転現象が発生するのかを理解したい。
私たちのAM62A7ベースのECUでは、PCBがRX_Clockの内部遅延を必要としているため、「rgmii-txid」が設定されました。問題なく動作しています。
また、DTSが処理してくれるのであれば、このPHYモードにおけるピンストラップの使用についても知りたいです。
こんにちは、
TJA1120Aドキュメントによると、RGMIIの遅延構成はレジスタ名とレジスタ内で記述された遅延が直接一致しないため、やや混乱を招くことがあります。
デバイスDS内のRGMII_RXC_DELAY_CONFIG/RGMII_TXC_DELAY_CONFIGレジスタのビット説明を参照してください。
したがって、設定を確認する際に重要なのは、実際のレジスタビットの記述と初期化後の最終レジスタ読み返し値です。
また、ピンストラップはリセット後のデフォルト設定のみを定義する点に注意してください。ソフトウェアドライバは後でMDIOでこれを上書きできるため、システム起動後にレジスタを読み返すことで有効な構成を検証する必要があります。
また、同じRGMIIクロック遅延がMAC側とPHY側の両方で有効化されていないかも、基板のタイミング設計で意図されていないことを確認してください。
BR、ペトル