嵌入式爱好者

查看: 8237|回复: 4

关于can编程

[复制链接]

0

主题

0

帖子

0

积分

扫一扫,手机访问本帖
发表于 2011-2-28 14:24:20 | 显示全部楼层 |阅读模式
之前说请发一下can的手册和例程,回答我去下载区,可是下载区根本没有。
现在我自己试了一下,但是还没有成功。

我用的内核是28的,编译的时候我就直接把can里面本来选做模块的那个直接include了。

进入系统后我就用了
ifconfig can0 up
然后它就说是normol mode了,之后我就用了一个网上查到的一个基本的socketcan的程序,如下
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <sys/ioctl.h>
  4. #include <net/if.h>

  5. #include <linux/can.h>
  6. #include <linux/can/raw.h>
  7. #include <string.h>

  8. #include <stdio.h>

  9. /* At time of writing, these constants are not defined in the headers */
  10. #ifndef PF_CAN
  11. #define PF_CAN 29
  12. #endif

  13. #ifndef AF_CAN
  14. #define AF_CAN PF_CAN
  15. #endif


  16. int main()
  17. {
  18.    /* Create the socket */
  19.    int skt = socket( PF_CAN, SOCK_RAW, CAN_RAW );

  20.    /* Locate the interface you wish to use */
  21.    struct ifreq ifr;
  22.    strcpy(ifr.ifr_name, "can0");
  23.    ioctl(skt, SIOCGIFINDEX, &ifr); /* ifr.ifr_ifindex gets filled
  24.                                   * with that device's index */

  25.    /* Select that CAN interface, and bind the socket to it. */
  26.    struct sockaddr_can addr;
  27.    addr.can_family = AF_CAN;
  28.    addr.can_ifindex = ifr.ifr_ifindex;
  29.    bind( skt, (struct sockaddr*)&addr, sizeof(addr) );

  30.    /* Send a message to the CAN bus */
  31.    struct can_frame frame;
  32.    frame.can_id = 0x123;
  33.    strcpy( frame.data, "foo" );
  34.    frame.can_dlc = strlen( frame.data );
  35.    int bytes_sent = write( skt, &frame, sizeof(frame) );

  36.    printf("byte_sent:%d \n", bytes_sent);

  37.    /* Read a message back from the CAN bus */
  38.    int bytes_read = read( skt, &frame, sizeof(frame) );

  39.    printf("byte_read:%d \n", bytes_read);


  40.    return 0;
  41. }
复制代码
程序发送的部分能跑过去,但是实际can口并不正常,我用示波器看了一下,运行之后就一直在不停地发送,即使程序停掉之后也不会停止。看了波特率大概在230k左右。我用我的usb-can转换口也没有接到,置于接收部分就停在那了。

希望客服能给我一个可以工作的完整的包括发送与接收的例程,还有能告诉我一下设置波特率的方法,我是要做一个项目,时间比较紧,对驱动之类的我也不懂,之所以选择你们的板子就是因为你们驱动什么的都有。我现在界面储存之类的都没有问题就差一个can通讯了,希望能赶快给我些帮助。
回复

使用道具 举报

29

主题

9048

帖子

5593

积分

发表于 2011-2-28 16:46:30 | 显示全部楼层
app.tar.gz (4.58 KB, 下载次数: 153)

0

主题

0

帖子

0

积分

 楼主| 发表于 2011-3-1 14:20:31 | 显示全部楼层
回复 2# 飞凌-fatfish


    十分感谢啊,这个程序确实可以发送和接收了,但是还有一些问题。

发送和接收一定数量之后就不能再用了。后来我又用socketcan的那套can-util下面的cansend试了一下,发送了一些之后就开始报no buffer space available的错误了。后来我上socket can上面看了一下,这个问题好像是有的,后来应该是有个补丁处理了这个问题。

飞凌的6.28里的那个驱动好像已经比较老了,6.36里的驱动比较新,但是用6.36的内核的话就没有can0这个设备了,是不是现在6.36的代码还没有提供对can的支持?
追梦鸟 该用户已被删除
发表于 2012-12-26 10:21:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
点评回复 支持 反对

使用道具 举报

pcibusgood 该用户已被删除
发表于 2012-12-26 11:14:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
点评回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-12-23 23:26

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表