OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4360|回复: 13

分享一个超好用开源的USB-CAN项目(采用stm32f0)

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-8-27
在线时间
2 小时
发表于 2020-8-27 21:36:15 | 显示全部楼层 |阅读模式
本帖最后由 lenzslaw 于 2020-8-27 21:40 编辑

照理来说,USB-CAN这种东西应该已经被做的烂大街的工具,国内居然没有一个拿得出手的开源方案。淘宝上各种虚拟串口方案、替换dll兼容某立功软件的各种方案....价格都很低,性能和可靠性嘛.......就不多说了。

这里推荐一个国外的开源工具CANable,ta有完全开源的软硬件及上位机支持,支持windos和linux Stock can并且都免驱哦。且支持Python。

并且与网上众多的USB CAN采用虚拟串口的方式实现免驱不同,CANable采用的winUSB的免驱方案,USB bulk双缓冲的模式,实际传输性能远超那些虚拟串口的USB-CAN,甚至比ZLG早期的产品的每秒帧数还高很多。

我实测过CANable最高接收速率每秒1.5万帧,真的超变态!!!

下面重点来了:本文将介绍如何DIY一个你自己的CANable(后文介绍有成品可以在tb上买到)。

CANable实际上应该是3个项目组成:

硬件candleLight

主页 : https://canable.io/

硬件设计是比较简单的,就是一块带usb和can的stm32f0 + CAN收发器TJA1051/3。

github:https://github.com/HubertD/candleLight

pdf原理图:https://github.com/HubertD/candleLight/blob/master/export/v1.1/pdf/candleLight-v1.1.pdf

这个因为是开源项目,用的pcb软件是kicad,不习惯kicad可以直接去仓库下面export\v1.1目录下查看输出文件,包括gerber,bom,pdf等等,基本上可以直接拿来打样加工了。原理图本身很简单的,有兴趣的也可以自己画一版。


万能的tb上已经有人做成成品了,套了一个蓝色的外壳,看起来还不错,叫做CANable Z,在某宝上搜CANable 就能搜到,价格很便宜。


固件candleLight_fw

https://github.com/candle-usb/candleLight_fw

需要注意的是这个固件工程是在linux下面开发的,编译和烧写的说明均为在linux下的操作。

在Windows上编译这个源码需要花时间重新建立工程。

总之呢,提供源码的好处就是可以自行修改固件添加自己想要的功能,或者学习USB和CAN代码。

正常开发呢,可以使用板子的SWD接口进行仿真和烧写,STM32出厂自带了一个USB BootLoader,大家也可以用下面的两种方法通过CANable自带的USB进行烧写。

web在线烧写固件

如果只是想copy一个来用用,不需要去自己编译烧写,可以直接用STM32的USB DFU通过USB下载固件。

canable还提供了一个web的烧写页面 https://canable.io/updater/

用谷歌浏览器打开这个页面,把板子的boot0接高电平,在用USB连接电脑。选择candlelight的固件,再点connect and update就可以直接通过网页进行烧写。

注:这个网页上只能烧写candlelight或者slcan的默认固件,自行编译的固件无法烧写。

USB DFU-util烧写
  • 下载dfu-util-0.9-win64: https://liquidtelecom.dl.sourceforge.net/project/dfu-util/dfu-util-0.9-win64.zip
  • 解压后,将编译好的.bin文件拷贝到解压后的目录
  • 创建一个文本文件,拷贝以下内容进去,注意candleLight_fw.binary 为要烧写的bin文件,需要改成你自己的文件名。然后把这个文本文件保存为flash.cmd



    • dfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary


    • cmd /k

  • 整个目录就像下面这样子
  • 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
  • 如果识别失败需要下载安装驱动,https://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
  • 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了


  • D:\workspase\USB-CAN-adapter\CANtact\dfu-util-0.9-win64>dfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary


  • dfu-util 0.9





  • Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.


  • Copyright 2010-2016 Tormod Volden and Stefan Schmidt


  • This program is Free Software and has ABSOLUTELY NO WARRANTY


  • Please report bugs to http://sourceforge.net/p/dfu-util/tickets/





  • Invalid DFU suffix signature


  • A valid DFU suffix will be required in a future dfu-util release!!!


  • Opening DFU capable USB device...


  • ID 0483:df11


  • Run-time device DFU version 011a


  • Claiming USB DFU Interface...


  • Setting Alternate Setting #0 ...


  • Determining device status: state = dfuERROR, status = 10


  • dfuERROR, clearing status


  • Determining device status: state = dfuIDLE, status = 0


  • dfuIDLE, continuing


  • DFU mode device DFU version 011a


  • Device returned transfer size 2048


  • DfuSe interface name: "Internal Flash  "


  • Downloading to address = 0x08000000, size = 36108


  • Download        [=========================] 100%        36108 bytes


  • Download done.


  • File downloaded successfully


上位机cangaroo

初支持基本的can报文收发之外,cangaroo还支持:

1. 导出报文数据

2. loopback 自发自收模式

3. 静默模式(接收到报文不应答ACK,用于总线监听)

4. 调整通讯采样点

5. one-shot 单次发送模式(禁止自动重发)

6. 加载DBC协议文件

github:https://github.com/normaldotcom/cangaroo

zip下载:https://canable.io/utilities/cangaroo-win32-0363ce7.zip


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-8-28 13:46:54 | 显示全部楼层
确实国外开源氛围很好,而且项目有头有尾的很多。支持支持
回复 支持 反对

使用道具 举报

3

主题

93

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
459
金钱
459
注册时间
2014-3-7
在线时间
51 小时
发表于 2020-8-28 15:34:43 | 显示全部楼层
这个软件  国外开源的?
回复 支持 反对

使用道具 举报

0

主题

104

帖子

0

精华

高级会员

Rank: 4

积分
725
金钱
725
注册时间
2015-5-23
在线时间
137 小时
发表于 2020-8-28 15:46:05 | 显示全部楼层
谢谢,下载来学习下
回复 支持 反对

使用道具 举报

16

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2012-7-29
在线时间
19 小时
发表于 2020-8-28 15:56:00 | 显示全部楼层
1s 15000帧数据 不丢帧?
回复 支持 反对

使用道具 举报

0

主题

17

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2020-8-13
在线时间
7 小时
发表于 2020-8-28 17:00:26 | 显示全部楼层
学习了  非常棒准备入手一个学习CAN通讯
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-8-27
在线时间
2 小时
 楼主| 发表于 2020-8-28 23:03:21 | 显示全部楼层
eydj2008 发表于 2020-8-28 15:34
这个软件  国外开源的?

完全开源的
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-8-27
在线时间
2 小时
 楼主| 发表于 2020-8-28 23:06:33 | 显示全部楼层
小猪siyuan 发表于 2020-8-28 15:56
1s 15000帧数据 不丢帧?

是的,改天再分享一下测试方法
回复 支持 反对

使用道具 举报

16

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2012-7-29
在线时间
19 小时
发表于 2020-8-29 13:59:19 | 显示全部楼层
lenzslaw 发表于 2020-8-28 23:06
是的,改天再分享一下测试方法

表示怀疑?CAN 2.0 达不到 这个速度,帧间隔只是200+us
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-8-27
在线时间
2 小时
 楼主| 发表于 2020-8-29 21:38:43 | 显示全部楼层
小猪siyuan 发表于 2020-8-29 13:59
表示怀疑?CAN 2.0 达不到 这个速度,帧间隔只是200+us

这个就是CAN总线高负载测试的精髓了。先不说如何接收每秒1.5万帧,如何产生最高的总线负载就是一件值得讨论和研究的事情。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-8-27
在线时间
2 小时
 楼主| 发表于 2020-8-29 21:51:47 | 显示全部楼层
小猪siyuan 发表于 2020-8-29 13:59
表示怀疑?CAN 2.0 达不到 这个速度,帧间隔只是200+us

先看个发送波形,这个是1M速率下最大负载波形。不过是8字节数据帧的,实际最多7000多帧/秒。1.5万帧需要用短帧(远程帧)来产生

回复 支持 反对

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3453
金钱
3453
注册时间
2015-4-19
在线时间
374 小时
发表于 2020-12-11 15:50:18 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2019-8-8
在线时间
83 小时
发表于 2020-12-12 17:28:18 | 显示全部楼层
非常感谢
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2020-12-15 09:04:00 | 显示全部楼层
淘宝上那卖的吹什么USB双缓冲,各种好,我看了下代码 没看到哪用了双缓冲,就是常用的BULK传输,理论上速率最大 700K/S
1-1
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 00:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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