照理来说,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主页 : http://canable.io/ 硬件设计是比较简单的,就是一块带usb和can的stm32f0 + CAN收发器TJA1051/3。 github:http://github.com/HubertD/candleLight pdf原理图:http://github.com/HubertD/candleLight/blob/master/export/v1.1/pdf/candleLight-v1.1.pdf 这个因为是开源项目,用的pcb软件是kicad,不习惯kicad可以直接去仓库下面export\v1.1目录下查看输出文件,包括gerber,bom,pdf等等,基本上可以直接拿来打样加工了。原理图本身很简单的,有兴趣的也可以自己画一版。
/ K% L0 E3 Z) M; c6 V9 \1 _( N万能的tb上已经有人做成成品了,套了一个蓝色的外壳,看起来还不错,叫做CANable Z,在某宝上搜CANable 就能搜到,价格很便宜。 9 C5 l7 ^0 I7 c& N
固件candleLight_fwhttp://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的烧写页面 http://canable.io/updater/ 用谷歌浏览器打开这个页面,把板子的boot0接高电平,在用USB连接电脑。选择candlelight的固件,再点connect and update就可以直接通过网页进行烧写。 注:这个网页上只能烧写candlelight或者slcan的默认固件,自行编译的固件无法烧写。 USB DFU-util烧写- 下载dfu-util-0.9-win64: http://liquidtelecom.dl.sourceforge.net/project/dfu-util/dfu-util-0.9-win64.zip
- 解压后,将编译好的.bin文件拷贝到解压后的目录
- 创建一个文本文件,拷贝以下内容进去,注意candleLight_fw.binary 为要烧写的bin文件,需要改成你自己的文件名。然后把这个文本文件保存为flash.cmd
- 1 L$ t2 ]3 n2 M7 J% ]0 p4 ~) _9 o( x
4 P+ |+ H7 C0 B6 e- Ndfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary
) i( J3 O0 h( |, I8 p0 v, ` y& [9 j. H1 q4 V- E
" Q$ x ^; F- j% V. F: _7 t$ U* |" G' W% q ?7 _' Y
cmd /k" [0 o/ l: }# C
# c: h& r; h+ h _: t
- c8 S9 \/ [7 B! ~; r m, u
- 整个目录就像下面这样子
- 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
- 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
- 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了
& h! P3 p7 h# n/ D
1 q! Y- {% s+ `& }' G
. G; c* B& W# o5 v" P/ D tD:\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.binary7 x) X2 }3 r# D# o/ j3 g
* f; i9 v7 y0 K2 c: Q% ^5 `
* [! h" e; F& Y, V" a8 {, I
/ H2 u, h) n" }+ c- }$ E9 m* i5 u. Adfu-util 0.9. J* ^) I7 x2 ]! v8 M1 v' ~
7 T- d: y9 }6 ]
- # p) o$ E. ^6 h( l2 R: @, G6 q \
" o1 i5 h2 X6 }, w
& L- B& t+ [* E/ G0 o& U6 K6 Y% e- L+ Q) I$ ~- e# K
7 Q. i- s: O; y" f9 o0 u. L* j6 [
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc./ ?4 n& S7 c: m2 [+ I$ w, }1 w/ k2 i
\3 O5 v& d" b2 `( Q' f- / I% |2 d& U. l' c! ]) ^8 X
: t" D5 e4 l. `Copyright 2010-2016 Tormod Volden and Stefan Schmidt9 i. i3 q! s6 i( |4 r# ~4 m# F
- C/ E1 \$ h# H3 Z4 p - 5 w" z* X, T V- S8 }& Z
) K: [7 l, I% s( u
This program is Free Software and has ABSOLUTELY NO WARRANTY7 ~& Q u/ A, c
( A% F1 N+ W2 x3 p - 9 ~9 F5 }1 A1 [& s
* X+ S. i6 ?+ c9 \. W8 b \Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
3 D* G4 I# V; k1 M# R5 V1 `4 m
1 ^+ |' g. z% r5 a - . {( X1 b( d* T$ J$ u1 ]5 v
8 o3 p, ]! B3 |, P! M2 { v
* ~+ w+ }) P9 _5 C+ A
1 L# a! j; t; W" z( W2 n" j
- Q! @2 u, k( v+ u( F* A2 i% Z8 \8 ^5 x7 I0 `
Invalid DFU suffix signature
: ^& o3 h" H1 e7 M9 Z' \# M0 e+ R7 L5 {$ f: o0 E$ N" V" L4 F/ A2 i
- h! s2 z/ Y" n
" E3 N# d/ Y h9 P. ~A valid DFU suffix will be required in a future dfu-util release!!!1 m5 D& p6 F8 R: I0 }" _6 X; h, ~9 u' i
- O9 }6 z2 [) ^' u( v B S, @- w
2 q& h5 F7 D) u% y8 W: {1 m5 G* o8 Q% l; w5 `. M
Opening DFU capable USB device...$ j, l2 z8 g6 j1 k0 i* u7 @. f* [9 d
" P& _+ {7 W) S! s8 ~! g0 w
- L* x4 `; b& d0 m$ e
1 u+ k. B3 I- a' Q, u$ j6 @+ r3 _
ID 0483:df11
3 N5 s/ B' d; L! u" D* B
! S1 H2 h- n4 u' w/ o- o - 4 ^' ^, R0 ?0 H; V1 U! a* H
7 T6 D9 _/ k N6 h4 k& K2 ?Run-time device DFU version 011a
. e" o5 _2 u3 a
7 M2 D, G1 Z. E# u! F& b
$ F. y L: q" t& l0 o4 P* {+ z5 Z: J' s
Claiming USB DFU Interface...# { Y# V. N# Z5 M2 U1 ^
( i5 W: r6 k2 A2 I6 v
5 f0 M' R# c' C$ p& i! E1 m& P- j* y6 b/ Z$ o/ g! G
Setting Alternate Setting #0 ...7 r% h5 D& k5 f# Y% ?/ y
# i+ e$ I5 C& s& U$ ~- , O1 b) L4 G* d+ I; g% M( J4 e8 Y7 g
, I$ D5 a8 c* p6 ^
Determining device status: state = dfuERROR, status = 10
: O9 F' `; ?& F7 g% i9 Q+ F' t, i/ ~$ G* I6 b$ E& O3 x1 C
* X: u! D3 R1 A3 T+ w& x+ ^# B& S+ c$ O
dfuERROR, clearing status) ~8 T% K- l' A2 R* t6 ]0 A% q
. o4 J( C4 u2 M$ J) E& C; y- . f7 O6 {0 E& w) E( _
3 H! E# I/ P8 a# y- ^8 q o7 b, G5 cDetermining device status: state = dfuIDLE, status = 0$ h3 t% B }1 s. j) E Z# V" X+ `
2 x! ?; |6 V5 ^+ C! L
- & s0 y( I* T4 n$ V
9 I2 v( m, k4 u- Y1 L3 h% @9 t
dfuIDLE, continuing
5 u' Q- E7 l% [* s
( |2 j' X+ q5 q$ I8 C
7 t( F9 k" \0 u# Q3 X R) Y% k2 g! z( ?
DFU mode device DFU version 011a7 B+ ?- E6 `& s0 d
& q1 Y4 R g" h/ s7 z2 |
8 ]6 R" Z. W& a9 V0 m) E
1 ?: g& |, f. Z& K T- C4 Q& ?Device returned transfer size 2048
. U+ F& u, n1 Q6 O8 f; t/ T! \8 E- o5 y* R0 m7 N! u
8 [1 g, Q- |4 Y7 h7 A/ \ D5 p* o
! z r: x& S" aDfuSe interface name: "Internal Flash "
9 r7 s/ x( @* S* p9 n" B% {3 |0 }7 K; t
- ' N9 L8 t+ |6 P, x! m3 a0 c- q
. t1 g! x9 _7 \& B4 ~' iDownloading to address = 0x08000000, size = 36108/ Q% ]1 e& g; }7 ?% x
% t" \/ V2 J) c- W7 W - 5 G4 O( X4 l' _. ^) K1 G
# v# k! A2 b+ K& E: r+ g7 z) ^Download [=========================] 100% 36108 bytes
: O( |1 Q A" P( @8 S& |% @. n- ~5 k" N3 I% ~5 W0 s
" C- c, }4 w, O3 a
$ ]! E, B2 y5 U4 @' \0 @, vDownload done.
. J: Z0 q$ C3 _1 u6 d) X4 q3 Q b
* F; ?& h$ I, h0 D$ @3 J- _- - A8 h! g4 Q) b4 S S
]/ |3 y6 c! e1 J, k
File downloaded successfully7 K! _0 F, u- H" b8 ^
9 d! b! ] c' w/ B& y
, _( v6 `7 f) O 3 S$ J2 r" d; v1 t
上位机cangaroo初支持基本的can报文收发之外,cangaroo还支持: 1. 导出报文数据 2. loopback 自发自收模式 3. 静默模式(接收到报文不应答ACK,用于总线监听) 4. 调整通讯采样点 5. one-shot 单次发送模式(禁止自动重发) 6. 加载DBC协议文件 github:http://github.com/normaldotcom/cangaroo zip下载:http://canable.io/utilities/cangaroo-win32-0363ce7.zip
K! ]+ i. n1 s# l, M% F" { |