|
新手请教,am 3517 can 问题,先感谢各位帮助。
第一次开发这种,用的是adlink的sp860板子,am3517的。是将客户仪器上原来的老程序升级,原来是用/dev/can0发,/dev/can14收。
换新的板子后用到了socketcan。
我的做法是:
1. 重新编译内核,在make menuconfig中将相应的can驱动选上;
2. 在/etc/network/interfaces文件中加上
auto can0
iface can0 inet manual
pre-up /ip link set $IFACE type can bitrate 125000 triple-sampling on
up /sbin/ifconfig $IFACE up
down /sbin/ifconfig $IFACE down
使之产生can0设备,
3. 我是在python中调用so进行can通讯,在c程序中打开can0
sockfd = socket(PF_CAN, SOCK_RAW, CAN_RAW);
strcpy(ifr.ifr_name, "can0" );
ioctl(sockfd, SIOCGIFINDEX, &ifr);
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
bind(sockfd, (struct sockaddr *)&addr, sizeof(addr));
附原来的/dev/can打开代码
#define INPUTDEVICE "/dev/can14"
#define OUTPUTDEVICE "/dev/can0"
if ((input = open(INPUTDEVICE, O_RDONLY)) == -1)
throw(IOError, INPUTDEVICE);
if ((output = open(OUTPUTDEVICE, O_WRONLY)) == -1)
{
close(input);
throw(IOError, OUTPUTDEVICE);
}
由于基本概念等不是很清楚,有几个问题:
1. 老的程序中用的/dev/can0做输出,/dev/can14做输入,仪器端是不能变,现在就是换个cpu板子,在socketcan中只要 can0节点就够了吗?是否需要仪器端的协议,我们那边有人说不需要的。
2. 以上3个步骤只能产生can0设备,如果在interfaces文件中增加can1,can14等设备,无法成功。是否上面三个步骤是不对的?
3. 除了make menuconfig中选择驱动,是否还需要其他can驱动?我在网上看到例如 ixcan等所谓的驱动。
|
|