ak-satou
2020年8月22日 3時27分
古河電池の佐藤と申します。
お世話になります。
掲題の件、Armadillo-X1の拡張インターフェースを使用し、2CHのCAN通信可能なボードを作成中です。
「Armadillo標準ガイドハードウェア拡張編 8.2.2.対応カーネルイメージ」の作成を参考に以下の手順で作成しようと考えております。
(1)Device Tree の編集→(2)カーネルコンフィギュレーションでのCAN の有効化→(3)カーネルとDTB をビルドしArmadillo に書き込み
ところが(1)で躓いております。
arch/arm/boot/dts/armadillo-640-can2.dtsiを参考に、armadillo-x1-ext-can.dtsiというファイルを作成し、arch/arm/boot/dts/armadillo_x1l.dtsにincludeしようとしておりますが、PAD(各ピンの入出力特性などの設定)の設定値(以下のXXの部分)について、どのように値を決めればよろしいでしょうか?
「i.MX 7Dual Applications Processor Reference Manual」を調べてもみたのですが、わかりませんでした。
初心者的な質問で申し訳ありませんがよろしくお願いいたします。
ーーー 以下、dtsiファイル ---
&iomuxc {
pinctrl_can1: can1grp {
fsl,pins = <
MX7D_PAD_ENET1_RGMII_RD2__FLEXCAN1_RX XX
MX7D_PAD_ENET1_RGMII_RD3__FLEXCAN1_TX XX
>;
};
pinctrl_can2: can2grp {
fsl,pins = <
MX7D_PAD_ENET1_RGMII_TD2__FLEXCAN1_RX XX
MX7D_PAD_ENET1_RGMII_TD3__FLEXCAN1_TX XX
>;
};
};
&can1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_can1>;
status = "okay";
};
&can2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_can2>;
status = "okay";
};
---以上ーーー
コメント
ak-satou
佐藤様
> 例えば「MX7D_PAD_ENET1_RGMII_RD2__FLEXCAN1_RX」ですと、
> 「i.MX 7Dual Applications Processor Reference Manual」内の「SW_PAD_CTL_PAD_ENET1_RGMII_RD2 SW PAD Control
> Register」という章に設定値に関する説明が書かれているかと思います。
>
ご回答ありがとうございます。
上記設定値の「Pull Enable Field」及び「Pull Select Field」について質問させてください。
作成中の回路では、拡張インターフェースからの信号をCANトランシーバのTXD,RXDに直結しております。
Pull Enable FieldにてPull Enabledとした方がよろしいでしょうか?
その場合の、Pull Select Fieldについては推奨値はありますでしょうか?
> > MX7D_PAD_ENET1_RGMII_TD2__FLEXCAN1_RX XX
> > MX7D_PAD_ENET1_RGMII_TD3__FLEXCAN1_TX XX
> 上記は、FLEXCAN2_RX と FLEXCAN2_TX かと思います。
>
誤記でした。
失礼いたしました。
at_makoto.sato
佐藤です。
> 作成中の回路では、拡張インターフェースからの信号をCANトランシーバのTXD,RXDに直結しております。
> Pull Enable FieldにてPull Enabledとした方がよろしいでしょうか?
> その場合の、Pull Select Fieldについては推奨値はありますでしょうか?
基本的には pull up 設定をしなくてもよいかと思いますが、
ご自身の環境によっては、不安定な状態になることを避けるために 100k pull up 設定をしたほうがよいかもしれません。
Armadillo-640の例となりますが、以下では100k pull up を設定しています。
https://manual.atmark-techno.com/armadillo-guide-std/armadillo-guide-st…
ak-satou
佐藤様
> Armadillo-640の例となりますが、以下では100k pull up を設定しています。
> https://manual.atmark-techno.com/armadillo-guide-std/armadillo-guide-st…
>
了解いたしました。
まずは、100k pull upに設定してみます。
その他については、640の例にならい、以下の通り設定してみます。
・Hysteresis Disabled
・Slow Slew Rate
・DSE_3_X6
ありがとうございました。
ak-satou
佐藤様
お世話になります。
ご教授いただいた結果を反映し、armadillo-x1-ext-can.dtsiを作成し、armadillo_x1.dtsに上記ファイルをinclude、カーネル及びDTBをビルドしArmadillo-X1に書き込み、再起動しました。
dmesgで起動時のログに関し、canでgrepしたところ、以下のようなメッセージが表示されておりますが問題ないでしょうか?
atmark@armadillo:~$ dmesg | grep can
[ 0.277733] imx7d-pinctrl 30330000.iomuxc: no groups defined in /soc/aips-bus@30000000/iomuxc@30330000/can1grp
[ 0.277744] imx7d-pinctrl 30330000.iomuxc: no groups defined in /soc/aips-bus@30000000/iomuxc@30330000/can2grp
[ 0.349062] i2c i2c-2: can't use DMA, using PIO instead.
[ 0.408733] i2c i2c-3: can't use DMA, using PIO instead.
[ 1.684989] imx7d-pinctrl 30330000.iomuxc: unable to find group for node can1grp
[ 1.691093] flexcan: probe of 30a00000.can failed with error -22
[ 1.695844] imx7d-pinctrl 30330000.iomuxc: unable to find group for node can2grp
[ 1.701961] flexcan: probe of 30a10000.can failed with error -22
[ 2.573100] snvs-secvio 30370000.caam-snvs: can't get snvs clock
[ 2.744681] can: controller area network core (rev 20120528 abi 9)
[ 2.752928] can: raw protocol (rev 20120528)
[ 2.755898] can: broadcast manager protocol (rev 20161123 t)
[ 2.760262] can: netlink gateway (rev 20130117) max_hops=1
no groups defined inとかflexcan: probe of XXXXXXXX.can failed with error -22
と表示されているので失敗しているように見えます。
ご教授いただけますでしょうか。
armadillo_x1.dts及びarmadillo-x1-ext-can.dtsiをarmadillo_x1.zipとして添付いたします。
ファイル | ファイルの説明 |
---|---|
armadillo_x1.zip |
at_makoto.sato
佐藤です。
armadillo-x1-ext-can.dtsi 内の can1grp と can2grp の定義部分を以下のように修正してみてもらえますでしょうか。
&iomuxc { armadillo-x1-can-ext { pinctrl_can1: can1grp { fsl,pins = < MX7D_PAD_ENET1_RGMII_RD2__FLEXCAN1_RX 0x77 MX7D_PAD_ENET1_RGMII_RD3__FLEXCAN1_TX 0x77 >; }; pinctrl_can2: can2grp { fsl,pins = < MX7D_PAD_ENET1_RGMII_TD2__FLEXCAN2_RX 0x77 MX7D_PAD_ENET1_RGMII_TD3__FLEXCAN2_TX 0x77 >; }; }; };
ak-satou
佐藤様
ご回答ありがとうございます。
以下のメッセージに変わりました。
atmark@armadillo:~$ dmesg | grep can [ 0.349052] i2c i2c-2: can't use DMA, using PIO instead. [ 0.409248] i2c i2c-3: can't use DMA, using PIO instead. [ 1.668146] 30a00000.can supply xceiver not found, using dummy regulator [ 1.674455] flexcan 30a00000.can: device registered (reg_base=f5a00000, irq=43) [ 1.680627] 30a10000.can supply xceiver not found, using dummy regulator [ 1.686841] flexcan 30a10000.can: device registered (reg_base=f5a10000, irq=44) [ 2.558044] snvs-secvio 30370000.caam-snvs: can't get snvs clock [ 2.737524] can: controller area network core (rev 20120528 abi 9) [ 2.745786] can: raw protocol (rev 20120528) [ 2.748755] can: broadcast manager protocol (rev 20161123 t) [ 2.753147] can: netlink gateway (rev 20130117) max_hops=1
unable to find group for node ~やcan failed with errorは消えました。
xceiver not foundというメッセージがありますが、これは問題ないでしょうか?
at_makoto.sato
ak-satou
ak-satou
佐藤(彰)と申します。
以前、Linux-4.9-x1-at15の環境でCANの動作確認に成功したのですが、改めて、at19の環境で動作確認を使用としたところ失敗してしまいました。
具体的には、以下の様に実行した際に、”can0”が見つからないと表示されます。
# ip link set can0 type can bitrate 500000 loopback off
Cannot find device "can0"
.configや編集したDevice treeを確認しましたが差異はないようです。
dmesgの結果を確認した結果、at19には以下が表示されていませんでした。
[ 1.668146] 30a00000.can supply xceiver not found, using dummy regulator
[ 1.674455] flexcan 30a00000.can: device registered (reg_base=f5a00000, irq=43)
[ 1.680627] 30a10000.can supply xceiver not found, using dummy regulator
[ 1.686841] flexcan 30a10000.can: device registered (reg_base=f5a10000, irq=44)
これらからどの辺を確認すればよいか、ご教授願います。
at_akihito.irie
入江です。
以下のコマンドを実行後に再度コンフィギュレーションとビルドを行った場合
もCANが使用できませんでしょうか。
[ATDE ~/linux-4.9-x1-at19] make distclean // この後再コンフィギュレーション、ビルド
上記手順でも解決しない場合は、本現象が発生しているArmadillo-X1上の以下
のファイルと、お客様が作成・編集されたdtsファイル送って頂けると何かア
ドバイスできるかもしれません。
[armadillo]# mount /dev/mmcblk2p1 /mnt [armadillo]# ls /mnt/armadillo_x1.dtb /mnt/armadillo_x1.dtb ←このファイルを送ってください。
ak-satou
入江様
ご回答ありがとうございます。
> 以下のコマンドを実行後に再度コンフィギュレーションとビルドを行った場合
> もCANが使用できませんでしょうか。
>
>
> [ATDE ~/linux-4.9-x1-at19] make distclean > // この後再コンフィギュレーション、ビルド >
念の為、確認ですが、make distclean実施後の再コンフィギュレーション、ビルドの手順は以下で問題ないでしょうか?
atmark@atde7:~/linux-4.9-x1-at19$ ln -s ../initramfs_x1-v2.0.0.cpio.gz initramfs_x1.cpio.gz atmark@atde7:~/linux-4.9-x1-at19$ make ARCH=arm x1_defconfig atmark@atde7:~/linux-4.9-x1-at19$ make ARCH=arm menuconfig [*] Networking support ---> [*] CAN bus subsystem support ---> CAN Device Drivers ---> [*] Platform CAN drivers with Netlink support [*] Support for Freescale FLEXCAN based chips atmark@atde7:~/linux-4.9-x1-at19$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- atmark@atde7:~/linux-4.9-x1-at19$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x80008000 uImage
at_akihito.irie
ak-satou
入江様
make distcleanを実施後、確認いたしましたが、can0を使おうとすると、
Cannot find device "can0"
と表示されてしまいます。
ご依頼のファイルを添付いたしました。
よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
armadillo_x1_20210510.zip | armadillo_x1.dtb, armadillo_x1l.dts, armadillo-x1-ext-can.dtsi |
at_akihito.irie
ak-satou
at_makoto.sato
2020年8月24日 9時57分
佐藤です。
> arch/arm/boot/dts/armadillo-640-can2.dtsiを参考に、armadillo-x1-ext-can.dtsiというファイルを作成し、arch/arm/boot/dts/armadillo_x1l.dtsにincludeしようとしておりますが、PAD(各ピンの入出力特性などの設定)の設定値(以下のXXの部分)について、どのように値を決めればよろしいでしょうか?
>
> 「i.MX 7Dual Applications Processor Reference Manual」を調べてもみたのですが、わかりませんでした。
例えば「MX7D_PAD_ENET1_RGMII_RD2__FLEXCAN1_RX」ですと、
「i.MX 7Dual Applications Processor Reference Manual」内の「SW_PAD_CTL_PAD_ENET1_RGMII_RD2 SW PAD Control
Register」という章に設定値に関する説明が書かれているかと思います。
> MX7D_PAD_ENET1_RGMII_TD2__FLEXCAN1_RX XX
> MX7D_PAD_ENET1_RGMII_TD3__FLEXCAN1_TX XX
上記は、FLEXCAN2_RX と FLEXCAN2_TX かと思います。