打印
[i.MX]

i.mx6 flexcan测试出错

[复制链接]
7243|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xishanggongzi|  楼主 | 2014-10-10 19:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Hi,呼叫技术支持的大大们。
我们用的板子是根据imx6的sabresd改的,内核也是,用的是android4.2.2系统。

我啥都没改,就根据“h不让发url ttps://community.freescale.com/docs/DOC-1437”,这个把内核配置选项选上。然后
root@android:/data/test # ifconfig can0 up                                    
flexcan imx6q-flexcan.0: writing ctrl=0x0e31e055
flexcan imx6q-flexcan.0: flexcan_set_bittiming: mcr=0x5980000f ctrl=0x0e31e055
flexcan imx6q-flexcan.0: flexcan_chip_start: writing mcr=0x7de2020f
flexcan imx6q-flexcan.0: flexcan_chip_start: writing ctrl=0x0e31ec55
flexcan imx6q-flexcan.0: flexcan_chip_start: reading mcr=0x6de2020f ctrl=0x0e31ec55

有这个信息我想,就是说明can能用了是吧。
但是我找了个测试程序测试,提示:flexcan imx6q-flexcan.0: Error Warning IRQ
测试就此失败。
不知道为啥。测试代码如下:
/* 1.报文发送程序 */  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <linux/can.h>
#include <linux/can/raw.h>

#define AF_CAN                29      /* Controller Area Network      */
#define PF_CAN          AF_CAN

int main()  
{  
    int s, nbytes;  
    struct sockaddr_can addr;  
    struct ifreq ifr;  
    struct can_frame frame[2] = {{0}};  
    s = socket(PF_CAN, SOCK_RAW, CAN_RAW);      //创建套接字  
    strcpy(ifr.ifr_name, "can0" );  
    ioctl(s, SIOCGIFINDEX, &ifr);                   //指定can0设备  
    addr.can_family = AF_CAN;  
    addr.can_ifindex = ifr.ifr_ifindex;  
    bind(s, (struct sockaddr *)&addr, sizeof(addr));            //将套接字与can0绑定  
    //禁用过滤规则,本进程不接收报文,只负责发送  
            setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);  
            //生成两个报文  
    frame[0].can_id = 0x11;  
    frame[0]. can_dlc = 1;  
    frame[0].data[0] = 'Y';  
    frame[0].can_id = 0x22;  
    frame[0]. can_dlc = 1;  
    frame[0].data[0] = 'N';  
    //循环发送两个报文  
    while(1) {  
    nbytes = write(s, &frame[0], sizeof(frame[0]));     //发送frame[0]  
    if (nbytes != sizeof(frame[0])) {  
                    printf("Send Error frame[0]\n!");  
                    break;                              //发送错误,退出  
    }  
        sleep(1);  
    nbytes = write(s, &frame[1], sizeof(frame[1]));     //发送frame[1]  
    if (nbytes != sizeof(frame[0])) {  
                    printf("Send Error frame[1]\n!");  
                    break;  
    }  
        sleep(1);  
    }  
    close(s);  
    return 0;  
}  

相关帖子

沙发
FSL_TICS_Rita| | 2014-10-11 08:52 | 只看该作者
楼主你好,请问CAN模块部分你有焊上去吗?我们的参考板是没有焊上去的。

使用特权

评论回复
板凳
xishanggongzi|  楼主 | 2014-10-11 09:24 | 只看该作者
有焊上去,我有找到你们一个文档叫,How to enable CAN bus on i.MX6Q SabreSD.pdf。里面的1、2、3按照修改的。我感觉是不是BSP文件哪里配置的不对。新手多多指教。谢谢!

使用特权

评论回复
地板
xishanggongzi|  楼主 | 2014-10-11 09:25 | 只看该作者
FSL_TICS_Rita 发表于 2014-10-11 08:52
楼主你好,请问CAN模块部分你有焊上去吗?我们的参考板是没有焊上去的。


有焊上去,我有找到你们一个文档叫,How to enable CAN bus on i.MX6Q SabreSD.pdf。里面的1、2、3按照修改的。我感觉是不是BSP文件哪里配置的不对。新手多多指教。谢谢!

使用特权

评论回复
5
xishanggongzi|  楼主 | 2014-10-11 11:36 | 只看该作者
FSL_TICS_Rita 发表于 2014-10-11 08:52
楼主你好,请问CAN模块部分你有焊上去吗?我们的参考板是没有焊上去的。

How to enable CAN bus on i.MX6Q SabreSD.pdf中第5点信息是怎么来的?板子启动后就直接dmesg吗?我板子启动的dmesg中没有can相关的信息。下面是pdf中说的信息:
5.  Start CAN network device
root@freescale ~$ dmesg | grep can
ahci: SSS flag set, parallel bus scan disabled
vcan: Virtual CAN interface driver
flexcan netdevice driver
flexcan imx6q-flexcan.0: device registered (reg_base=c09a8000, irq=142)
can: controller area network core (rev 20090105 abi8)
can: raw protocol (rev 20090105)
can: broadcast manager protocol (rev 20090105 t)  

使用特权

评论回复
6
xishanggongzi|  楼主 | 2014-10-11 17:38 | 只看该作者
本帖最后由 xishanggongzi 于 2014-10-11 17:47 编辑
FSL_TICS_Rita 发表于 2014-10-11 08:52
楼主你好,请问CAN模块部分你有焊上去吗?我们的参考板是没有焊上去的。

重新测试了下,前面6次打印成功了,然后就失败了。是每次ifconfig can0 down 然后在up,前面6次是发送成功的,后面都发送失败了。Error Warning IRQ依然存在。打印如下,
imx6q-flexcan.0: Error Warning IRQ
frame[1].10 success,nbytes=16
frame[1].9 success,nbytes=16
frame[0].8 success,nbytes=16
frame[1].8 success,nbytes=16
frame[0].7 success,nbytes=16
frame[1].7 success,nbytes=16
frame[0].6 success,nbytes=16
frame[1].6 success,nbytes=16
frame[0].5 success,nbytes=16
frame[1].5 success,nbytes=16
frame[0].4 success,nbytes=16
Send Error frame[1]
!Send Error frame[0] ,nbytes = -1
!Send Error frame[1]
!Send Error frame[0] ,nbytes = -1
!Send Error frame[1]
!Send Error frame[0] ,nbytes = -1
!Send Error frame[1]
!Send Error frame[0] ,nbytes = -1
!Send Error frame[1]

使用特权

评论回复
7
xishanggongzi|  楼主 | 2014-10-13 09:20 | 只看该作者
FSL_TICS_Rita 发表于 2014-10-11 08:52
楼主你好,请问CAN模块部分你有焊上去吗?我们的参考板是没有焊上去的。

FSL_TICS_Rita sir, 帮看了吗?急等中啊。

使用特权

评论回复
8
xishanggongzi|  楼主 | 2014-10-13 10:41 | 只看该作者
FSL_TICS_Rita 发表于 2014-10-11 08:52
楼主你好,请问CAN模块部分你有焊上去吗?我们的参考板是没有焊上去的。

FSL_TICS_Rita 只能发生6个包的错误原因找到了,cat /sys/class/net/can0/tx_queue_len 的值是10,当我把他设置的更大时就可以发生更多。这个应该不是问题。
但是flexcan imx6q-flexcan.0: Error Warning IRQ错误依然会报,不知道会不会有问题?
配置命令如下:
ifconfig can0 down
ip link set can0 type can bitrate 125000 triple-sampling on
ifconfig can0 up
但是当我设置为回环模式,ip link set can0 type can loopback on,这个时候是不会报flexcan imx6q-flexcan.0: Error Warning IRQ错误的

使用特权

评论回复
9
xishanggongzi|  楼主 | 2014-10-13 16:55 | 只看该作者
就是因为这个缓冲区/sys/class/net/can0/tx_queue_len的值是10 ,所以在只有一块板子没有把CAN总线接到另一个can设备时就只能发送缓冲区这么多的数据。我之前就是用的一块板子做发送测试的,没有接到另一个can总线设备。所以报错。当我把两块板子的can总线接口对接后,立马ok。
好了,结贴!特别感谢@FSL_TICS_Rita 兄弟给予的支持!谢谢!

使用特权

评论回复
10
xishanggongzi|  楼主 | 2014-10-13 16:58 | 只看该作者
结不了贴啊,我把10分全给了@FSL_TICS_Rita  ,提示我分数未分配完或分数分配错误。

使用特权

评论回复
11
FSL_TICS_Rita| | 2014-10-14 09:24 | 只看该作者
xishanggongzi 发表于 2014-10-13 16:55
就是因为这个缓冲区/sys/class/net/can0/tx_queue_len的值是10 ,所以在只有一块板子没有把CAN总线接到另一 ...

恭喜楼主问题解决啊,其实这个问题我也没有太帮上忙的,主要是楼主自己搞定的。

使用特权

评论回复
12
FSL_TICS_Rita| | 2014-10-14 09:25 | 只看该作者
我这两天事情比较多,所以没怎么有时间帮大家调试的。欢迎你有问题继续在本论坛中交流哈~大家一起学习讨论。

使用特权

评论回复
13
FSL_TICS_Rita| | 2014-10-14 09:27 | 只看该作者
xishanggongzi 发表于 2014-10-13 16:58
结不了贴啊,我把10分全给了@FSL_TICS_Rita  ,提示我分数未分配完或分数分配错误。  ...

你好,结帖方式建议你查看一下我整理出来的截图,一目了然,不会耽误您的时间的。

使用特权

评论回复
14
mini1986| | 2015-4-17 17:15 | 只看该作者
正在学习imx6中......学习了......

使用特权

评论回复
15
zjp1013| | 2019-1-31 15:46 | 只看该作者
请问flexcan在p1010的代码或者技术资料有吗?谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

123

帖子

4

粉丝