iMX6DL sabreSD的开发板的Flexcan不能工作(已解决)

2020-02-21 21:03发布

本帖最后由 FSL_TICS_ZJJ 于 2014-5-7 10:24 编辑

第一次用 iMX6 的处理器,第一次用 Linux ,才开始学习。
基本情况:
host:ubuntu 12.04 LTS,安装 NFS和TFTP服务;
采用LTIB编译的内核镜像,用的是 L3.0.35-4.1.0-130816;
开发板:FSL原厂的SabreSD,处理器是 IMX6DL;
用 TFTP 的方式加载 kernel ,用 NFS 方式加载 ROOTFS,启动正常;
正常调试:  
已经通过访问字符设备的方式 使用串口收发正常;
使用套接字的方式访问以太网接口,收发正常;

通过LTIB,配置内核,添加了与CAN 有关的驱动模块,编译,
添加 libsocketcan 和 canutils,并且 ./ltib -p libsocketcan.spec -f 以及 ./ltib -p canutils.spec -f
目前存在的问题:回环模式能发不能收,正常模式发送就会导致 BUS-OFF

目前发现问题如下:
(1)  Chip scan failed
(2) 启动过程中注册的flexcan.1 ,而不是正常的 flexCAN.0 ,我采用 cansend can0 ,发送应该就会错误,但不知道如何纠正。
root@freescale ~$ dmesg | grep can
Chip scan failed
vcan: Virtual CAN interface driver
flexcan netdevice driver
flexcan imx6q-flexcan.1: device registered (reg_base=ea9a8000, irq=143)
can: controller area network core (rev 20090105 abi 8)
can: raw protocol (rev 20090105)
can: broadcast manager protocol (rev 20090105 t)
flexcan imx6q-flexcan.1: writing ctrl=0x0e312005
flexcan imx6q-flexcan.1: flexcan_set_bittiming: mcr=0x5980000f ctrl=0x0e312005
flexcan imx6q-flexcan.1: flexcan_chip_start: writing mcr=0x7de2020f
flexcan imx6q-flexcan.1: flexcan_chip_start: writing ctrl=0x0e31ec55
flexcan imx6q-flexcan.1: flexcan_chip_start: reading mcr=0x6de2020f ctrl=0x0e31ec55

第一次用linux 和imx6。可能问题比较初级,还请大家赐教一二。谢谢啦
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
FSL_TICS_Rita
1楼-- · 2020-02-22 18:54
leoyang 发表于 2014-4-2 14:09
******
结贴:
******

非常高兴楼主已经把问题解决了,i.mx6dl sabre-ai 的板子是支持Flexcan的。所以,在使用的时候在u-boot bootargs t中要先enable can0 interface,同时设置正确就可以正常工作了。
很抱歉给你回复晚了,一开始你没有说是用的i.mx6dl sabre-ai 的板子,我以为你用的是i.mx6dl-sdp这块板子,这块板子不支持flexcan,所以在使用的时候要修改一些内容才支持。
欢迎楼主有问题在本论坛中创贴,大家一起交流学习~~感谢楼主对我们工作的支持,非常感谢~~
leoyang
2楼-- · 2020-02-22 23:55
FSL_TICS_Rita 发表于 2014-4-2 14:24
非常高兴楼主已经把问题解决了,i.mx6dl sabre-ai 的板子是支持Flexcan的。所以,在使用的时候在u-boot b ...

因为和以太网复用了,所以用 NFS 的话,就用不了 CAN0。
目前正在研究怎么用 CAN1,因为系统启动是默认注册的 flexCAN.1 的驱动。版主救我!!!
FSL_TICS_Rita
3楼-- · 2020-02-23 00:08
leoyang 发表于 2014-4-2 16:34
因为和以太网复用了,所以用 NFS 的话,就用不了 CAN0。
目前正在研究怎么用 CAN1,因为系统启动是默认注 ...

我看到你又新创建了一个帖子,我在那里回你了哈,这里就不回了~~
leoyang
4楼-- · 2020-02-23 05:45
 精彩回答 2  元偷偷看……
leoyang
5楼-- · 2020-02-23 09:16
[结贴]
问题解答了,感谢 FSL 的工程师的帮助。
照抄一下在 FSL community 的解答:
In your kernel, you only enabled one hardware CAN device successfully. It is hardware interface CAN1, since there is only one CAN device, the hardware CAN1 will be registered as linux device "can0".

I think you had modified some kernel code, which caused hardware CAN0 driver can't be loaded successfully.

In Freescale default BSP, with boot parameter "can0", the kernel will register two CAN devices, hardware device CAN0 was registered first, it will be linux device "can0"; hardware device CAN1 was registered second, then it will be linux device "can1".
Without the boot parameter "can0", the hardware CAN0 will not be registered, so only hardware device CAN1 was registered, it will be linux device "can0".

In another works, althought your command "ip link set can0 up type can bitrate 125000" accessed the "can0" device, the hardware interface CAN1 was used.
aniuge123
6楼-- · 2020-02-23 09:56
查看两位大神的讨论,受益匪浅,知道牛人是怎样工作的了。作为一名入门级都不到的菜鸟,感觉很有压力,很惭愧啊

一周热门 更多>