硬件:i.MX6ull
软件:yocot_uboot_2016 + yocot_kernel_4.1.15
NXP的工程师们,我在使用i.MX6ULL的CAN的时候遇到了很奇怪的问题。现在将问题的描述如下:
首先,要使用CAN接口,高版本内核需要先适配其设备树。
<1>imx6ull-14x14-xxx.dts
&flexcan1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_flexcan1>;
xceiver-supply = <®_can_3v3>;
status = "okay";
};
&flexcan2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_flexcan2>;
xceiver-supply = <®_can_3v3>;
status = "okay";
};
pinctrl_flexcan1: flexcan1grp{
fsl,pins = <
MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX 0x1b020
MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX 0x1b020
>;
};
pinctrl_flexcan2: flexcan2grp{
fsl,pins = <
MX6UL_PAD_UART2_RTS_B__FLEXCAN2_RX 0x1b020
MX6UL_PAD_UART2_CTS_B__FLEXCAN2_TX 0x1b020
>;
};
<2>imx6ull.dtsi这个文件不用修改
flexcan1: can@02090000 {
compatible = "fsl,imx6ul-flexcan", "fsl,imx6q-flexcan";
reg = <0x02090000 0x4000>;
interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6UL_CLK_CAN1_IPG>,
<&clks IMX6UL_CLK_CAN1_SERIAL>;
clock-names = "ipg", "per";
stop-mode = <&gpr 0x10 1 0x10 17>;
status = "disabled";
};
flexcan2: can@02094000 {
compatible = "fsl,imx6ul-flexcan", "fsl,imx6q-flexcan";
reg = <0x02094000 0x4000>;
interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6UL_CLK_CAN2_IPG>,
<&clks IMX6UL_CLK_CAN2_SERIAL>;
clock-names = "ipg", "per";
stop-mode = <&gpr 0x10 2 0x10 18>;
status = "disabled";
};
<3>驱动程序为flexcan.c,此处无需任何改动
======================================
>>> 编译生成uboot.imx、zImage、dtb
>>> 烧写成功,系统启动 !!!
======================================
系统启动后,通过ifconfig -a查看can0、can1已经存在,只是没有启动


按照“i.MX_Linux_Reference_Manual”中的指导,执行以下命令:
ip link set can0 down
ip link set can0 up type can bitrate 500000


can1也是一样的操作,至此can0、can1 all becomes ready !!!
下面硬件连接can0与can1,HH相连,LL相连。执行以下命令:
candump can1 &
cansend can0 123#1122334455667788
问题来了,为什么can1口接收不到任何数据?我用示波器测量了cpu直接出来的pins,也没有任何波形。

尝试了各种角度,依旧没有找到问题的原因。
a.怀疑pin脚功能被定义错误,仔细检查了uboot和kernel中并没有出现复用其他功能的情况,读取寄存器的值也是正常的 0x20
b.尝试替换官方evk的zImage和dtb后,上述问题依然存在
c.can0发送,can1接收的过程中,ifconfig观察RX、TX的数据变化,遇到了不正常的现象
开始发送接收前:

开始后:

需要的话,附件为我的内核config文件和dts文件,请查阅。
请NXP的FAE or AE ,帮忙解决下这个问题,谢谢。