leoyang 发表于 2014-4-1 13:01:53

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

本帖最后由 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。可能问题比较初级,还请大家赐教一二。谢谢啦

leoyang 发表于 2014-4-1 13:25:13

自己顶一下

leoyang 发表于 2014-4-1 16:35:38

目前在 uboot 里面,设置环境变量,添加 can0=1,可以看到 flexcan.0 的驱动成功注册。但
这样一改,启动就不能完成,报告如下:
VFS: Unable to mount root fs via NFS, trying floppy.                                                                                          
VFS: Cannot open root device "nfs" or unknown-block(2,0)                                                                                       
Please append a correct "root=" boot option; here are the available partitions:                                                               
..............................
...............                                                                        
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
应该是 bootargs_base 设置有问题了,导致 NFS 挂载失败。

主要的环境变量设置如下:

bootargs_base=setenv bootargs ${bootargs} console=ttymxc3,115200
bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs nfsroot=${serverip}:${nfsroot} ip=${ipaddr}:${serverip}:${gate}:${mask}::eth0:off,v2,tcp
bootcmd_net=run bootargs_base bootargs_nfs;tftpboot${loadaddr}${kernel};bootm
bootcmd=run bootcmd_net                                                                                                                        
                                                                                                                                                   

FSL_TICS_Rita 发表于 2014-4-1 17:09:29

leoyang 发表于 2014-4-1 16:35
目前在 uboot 里面,设置环境变量,添加 can0=1,可以看到 flexcan.0 的驱动成功注册。但
这样一改,启动就 ...

楼主你好,关于添加flexcan driver,你可以查看一下All Boards FlexCAN。希望对你有帮助。

leoyang 发表于 2014-4-1 17:21:10

FSL_TICS_Rita 发表于 2014-4-1 17:09
楼主你好,关于添加flexcan driver,你可以查看一下All Boards FlexCAN。希望对你有帮助。 ...

这个看过好多次。最开始也是按照这个文档做的,添加了 libsocketcan 和 canutils,编译的镜像,也是不行。
问题就是楼上描述的
在 uboot 的环境变量里面,添加 can0=1 ,确实可以看到 flexCAN.0 的驱动被注册,但系统启动不了啦,报告NFS挂载有问题。
怀疑是 bootargs_base 设置不对,但怎么样才能又 can0=1,又确保 nfs 正确呢?

公司也是要我先开始熟悉评估这个平台,目前就我一个人干,只能不断 google ,唉

leoyang 发表于 2014-4-1 17:22:20

添加了 can0=1,在 uboot 的环境变量里面,按照如下的格式:
       serverip=192.168.1.2
    ipaddr=192.168.1.3
    bootfile=uImage
    gate=192.168.1.1
    mask=255.255.255.0
    nfsroot=/work/ltib/y/ltib/rootfs
    bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs nfsroot=${serverip}:${nfsroot}                        ip=${ipaddr}:${serverip}:${gate}:${mask}::eth0:off,v2,tcp
    bootcmd=run bootcmd_net
    bootcmd_net=run bootargs_base bootargs_nfs;tftpboot${loadaddr}${kernel};bootm
    bootargs_base=setenv bootargs ${bootargs} can0=1 console=ttymxc3,115200 arm_freq=800
    stdin=serial
    stdout=serial
    stderr=serial

      启动后,打印信息如下,can0 的驱动已经可以注册。但可能是我的环境变量的设置格式的问题,系统的启动不能完成。

      vcan: Virtual CAN interface driver
      CAN device driver interface
      flexcan netdevice driver
      flexcan imx6q-flexcan.0: device registered (reg_base=ea9a8000, irq=142)
      flexcan imx6q-flexcan.1: device registered (reg_base=ea9b0000, irq=143)

      后续启动过程只能停止于如下位置:

      snvs_rtc snvs_rtc.0: setting system clock to 1970-01-01 01:07:14 UTC (4034)
      VFS: Unable to mount root fs via NFS, trying floppy.
      VFS: Cannot open root device "nfs" or unknown-block(2,0)
      Please append a correct "root=" boot option; here are the available partitions:
      ............................
         ....
      [<80040a0c>] (__irq_svc+0x4c/0xe8) from [<80041b04>] (default_idle+0x24/0x28)
      [<80041b04>] (default_idle+0x24/0x28) from [<80041d20>] (cpu_idle+0xe0/0x124)
      [<80041d20>] (cpu_idle+0xe0/0x124) from [<104c5df4>] (0x104c5df4)
      
      如果不设置 can0=1,则启动正常。

leoyang 发表于 2014-4-2 14:09:00

******
结贴:
******
原因: 在 sabre ai 板上,CAN1 的TXD 与 以太网的 ENET_MDC 复用的。我启用 CAN1,就会关闭以太网,用 NFS 方式挂载的 ROOTFS 就用不了,启动就不行。

解决:要么不用NFS,通过写 SD 卡进行调试,要么就看看能不能启用 can2,就还可以用 NFS。

FSL_TICS_Rita 发表于 2014-4-2 14:24:39

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 发表于 2014-4-2 16:34:19

FSL_TICS_Rita 发表于 2014-4-2 14:24
非常高兴楼主已经把问题解决了,i.mx6dl sabre-ai 的板子是支持Flexcan的。所以,在使用的时候在u-boot b ...

因为和以太网复用了,所以用 NFS 的话,就用不了 CAN0。
目前正在研究怎么用 CAN1,因为系统启动是默认注册的 flexCAN.1 的驱动。版主救我!!!

FSL_TICS_Rita 发表于 2014-4-2 17:36:55

leoyang 发表于 2014-4-2 16:34
因为和以太网复用了,所以用 NFS 的话,就用不了 CAN0。
目前正在研究怎么用 CAN1,因为系统启动是默认注 ...

我看到你又新创建了一个帖子,我在那里回你了哈,这里就不回了~~

leoyang 发表于 2014-4-3 08:38:38

FSL_TICS_Rita 发表于 2014-4-2 17:36
我看到你又新创建了一个帖子,我在那里回你了哈,这里就不回了~~

谢谢,另开一帖可能清楚一点。

leoyang 发表于 2014-4-10 16:00:50

[结贴]
问题解答了,感谢 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 发表于 2014-4-15 11:02:27

查看两位大神的讨论,受益匪浅,知道牛人是怎样工作的了。作为一名入门级都不到的菜鸟,感觉很有压力,很惭愧啊

leoyang 发表于 2014-4-16 12:15:05

aniuge123 发表于 2014-4-15 11:02
查看两位大神的讨论,受益匪浅,知道牛人是怎样工作的了。作为一名入门级都不到的菜鸟,感觉很有压力,很惭 ...

我也是刚开始一个月,也是第一次接触。

aniuge123 发表于 2014-5-27 16:11:52

牛人,可否留个联系方式噻(QQ或邮箱),以便有问题可以请教下。    最近项目用到imx6   是在wince 7下搞了一个CAN的驱动,才刚刚做到可以用,后期的优化真的很让人发愁。以前从未接触过操作系统,感觉知识好匮乏。

leoyang 发表于 2014-6-12 15:24:00

aniuge123 发表于 2014-5-27 16:11
牛人,可否留个联系方式噻(QQ或邮箱),以便有问题可以请教下。    最近项目用到imx6   是在wince 7下搞 ...

就在这里交流挺好的。
ubuntu下没有用qq,越来越宅的啦。
你用 i。MX6 在什么方面,我这边是用在车载设备的。

aniuge123 发表于 2014-9-4 17:08:46

不好意思,最近都没有上论坛,已经搞定了。我们是用在挖掘机控制上的。希望您以后多多指教,谢谢!

aniuge123 发表于 2014-9-4 17:09:04

leoyang 发表于 2014-6-12 15:24
就在这里交流挺好的。
ubuntu下没有用qq,越来越宅的啦。
你用 i。MX6 在什么方面,我这边是用在车载设备 ...

不好意思,最近都没有上论坛,已经搞定了。我们是用在挖掘机控制上的。希望您以后多多指教,谢谢!
页: [1]
查看完整版本: iMX6DL sabreSD的开发板的Flexcan不能工作(已解决)