完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
由于近段时间公司较忙,没有来得及更新,,今天主要对imx6的can情况进行试用说明,can 试用CAN A 和CAN B两根线,can 位置, can工具试用了u***转can如下图 CANH连接开发板CAN A ,CANL 连接CAN B,can软件设置如下: 设置波特率为50k,不进行过滤,进行测试,下载对板子上的使用和程序进行说明 在内核中can驱动使用flexcan can驱动,位置linux-src/drivers/net/can/flexcan.c,在内核编译的时候需要将can模块编译进去,使用make menuconfig进行配置,如下图: 需要选择 Networking support > CAN bus subsystem support,确认flexcan.c 生成了flexcan.o文件,说明编译进 内核uImage中,烧写uImage,内核启动后,需要先对can初始化才能正常使用,如波特率等,我是移植了一个ip命令来设置,有些板子自带的ifconfig可以设置, ifconfig设置如下: 如果使用移植的ip如下: ./ip link set can0 up type can bitrate 50000" 设置过波特率后通过ifconfig can0 up 或者ifconfig can1 up来使能can口,设置过后可以通过ifconfig来查看 can0已经up起来,然后就可以使用代码通过sonket进行通信,代码主函数如下 int main(int argc,char *argv[]) { int s; int ret; struct sockaddr_can addr; struct ifreq ifr; int master; system("ifconfig can0 down"); sleep(1); system("./ip link set can0 up type can bitrate 50000"); sleep(1); system("ifconfig can0 up"); srand(time(NULL)); s = socket(PF_CAN, SOCK_RAW, CAN_RAW); if (s < 0) { perror("socket PF_CAN failed"); return 1; } strcpy(ifr.ifr_name, "can0"); ret = ioctl(s, SIOCGIFINDEX, &ifr); if (ret < 0) { perror("ioctl failed"); return 1; } addr.can_family = PF_CAN; addr.can_ifindex = ifr.ifr_ifindex; ret = bind(s, (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { perror("bind failed"); return 1; } test_can_rw(s, master); close(s); return 0; } 我是接收到数据后,会写回去,用来测试can收发是否正常,通过u***转can发送,让板子打印,测试如下: 至此说明can可以正常使用,如果u***转can也可以收到数据,并且我设置的的id递增,每贞数据id不一样,发送速度为20ms每贞, 说明正常通信没有问题,根据波特率计算负载率,使用满负荷%70进行测试,测试一段时间,如果正常,说明can比较稳定,后续可以使用到产品上使用 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【盈鹏飞RK3399安卓主板 XPC-3399Pro免费试用】+烧写出厂固件
10323 浏览 0 评论
【盈鹏飞EVB-T335开发板试用体验】debian系统烧写
3351 浏览 1 评论
【盈鹏飞I.MX6UL工控开发板试用体验】linux can 测试
3226 浏览 0 评论
306浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:03 , Processed in 0.915703 second(s), Total 69, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号