照理来说,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等等,基本上可以直接拿来打样加工了。原理图本身很简单的,有兴趣的也可以自己画一版。 ' A" M' Y$ `& G( O; ?
万能的tb上已经有人做成成品了,套了一个蓝色的外壳,看起来还不错,叫做CANable Z,在某宝上搜CANable 就能搜到,价格很便宜。 4 D8 m, G* l/ W3 d8 C& K& J
固件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
- - V/ _3 c( U2 ]% [
1 N1 y9 \) D( a z; [dfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary
0 m+ f% B0 k: W
" R$ K) @: N: J - $ \% c/ j8 K* A! d
5 ~' S# R7 w3 U
cmd /k
# {! K. a7 H4 v9 \: ~" o: Z# ]; f! P+ a8 e* ^% c2 L- S
& p/ ]: z6 [: k& b: A9 H# D/ r
- 整个目录就像下面这样子
- 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
- 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
- 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了
, f- S v2 k% T9 e) C0 U6 n- T: M
2 N4 U" U7 Z9 L; q) c$ R
, e0 G) U! B* {5 G8 hD:\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
3 {2 e" y0 {1 d9 Z( c( S
% I+ q% o$ t4 U' ~- 2 h! e) ]# s8 f! j" a7 ?
* b$ ^/ z/ Z( H, A# S$ ~
dfu-util 0.9' O+ N$ [" F% B( R2 _; G9 b
# _$ _- k6 p$ h! c0 N1 s3 H9 H' ?( ?
# V6 i2 ^+ q0 n' W
& h; a- L G7 L4 A0 y) C# r& N' _! @3 A
7 T4 ^' w1 m7 a( I" B8 `7 i5 o- . G6 f3 C" l F1 w' e
) l0 s8 i6 _' i# f! \- M
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
- b/ ]% b& o, l6 H( K# p$ P" {+ i% a9 U; O2 N
- % ?5 l) k4 q! ?2 D0 e- L& g" |$ O
\( ^) y. S+ }3 D3 H) @1 U
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
1 m2 s. S& k" |2 @- _; l, f+ d T
- ; `! x2 ?# T- l P9 b* {
: ?. f5 p% O% O, b- w! YThis program is Free Software and has ABSOLUTELY NO WARRANTY, a. u; s) ^7 ^* a( Q2 {2 A
* q, o$ r* g4 J; V4 k0 g2 o
I% }# Y; j; b* Z$ n( `7 H& ?
4 ~% @5 d1 `, DPlease report bugs to http://sourceforge.net/p/dfu-util/tickets/
$ d' G/ V0 c7 |6 @4 N, n- R5 X: o. Q4 ^
7 i0 t- d! g' n( U( \5 L, ^3 F4 p2 H4 | l) J$ ~
# N6 v8 \, l: U9 I7 n- B& h; s
7 o, r. |) \- h/ J1 G1 s }- / A. i' A8 E0 ~" }8 R
6 B7 d" |: f4 f' ]! I) kInvalid DFU suffix signature+ |- l- H# i: w" ]
& r5 r, g4 o* D& f2 N
- ( l6 l7 y: r/ ]3 e% {6 x' ]
0 g: m T) Z; g2 J( f8 BA valid DFU suffix will be required in a future dfu-util release!!!
8 c" |; c/ `9 ]9 ?6 B0 j: g7 x9 ^4 y1 \: J8 J
# q6 i* }7 b# e; f4 s' L* [. {+ l# T" i
Opening DFU capable USB device...- c/ W8 _; z6 d1 B2 l* G- w
$ y& O' E; P1 F' U+ t- ( L y% `1 e1 v, N" f! o
+ G N" ]1 K6 z3 \4 } f; w. l! b8 aID 0483:df11 g+ r3 P' m% E: T( K; S8 U
. ]& K% B# y# ?, K - + H, K6 T. l! o
, C1 a. a c" y- N
Run-time device DFU version 011a, {' {' ^: h3 ^) B) t* O4 r
" e9 D/ L5 G' Q. N: w3 ^ U
: R" w1 E% g# c9 Y3 `
8 o' Z8 B* q/ \$ i! XClaiming USB DFU Interface...3 G( _) p% P( `
# L. k) t$ a2 X8 Z: M: h
; f7 d( O( D D1 ^% a
, U; o7 R5 |! D1 n4 [1 ]; H5 d) D+ ESetting Alternate Setting #0 ...
, [) H$ I0 [9 L% C5 D& c6 [" L- U" N/ s. M
" c/ y- q; x' z/ }) S1 r) _4 Y
* j: E* p& N1 ]+ W- mDetermining device status: state = dfuERROR, status = 105 [9 Y: V2 s3 [# g$ w# o9 C, q, t( z; R
% w+ T( g5 S& U( a5 t3 L$ n- ) Z: n1 ^0 \! M. A! X/ Y9 H
4 O" c3 y% T# p4 u9 s& ~9 r& u1 cdfuERROR, clearing status6 J4 C4 ]2 N3 g2 N; G- d
* r5 a! C0 ^) h- z" y0 S) e
- . d" H. M" N% k6 `6 g2 K5 V0 F
4 b) z0 N( m) P: w# ?" p/ l+ p; H% ^Determining device status: state = dfuIDLE, status = 0
4 i" m' G$ s0 R v: u6 H& u. {5 L" N/ g8 A5 j$ \# w
- ) q+ G' Q6 P" a7 v( t1 \: K
. g; d/ q. Z0 r0 p2 m, D; A n
dfuIDLE, continuing: A b0 T* h! S
u+ |* D' Y6 ` G$ R0 q3 p
& [' Z0 g; `7 v% f/ ^- p1 {4 b, c* g0 Y- N/ D8 R- d" n% o
DFU mode device DFU version 011a N$ i3 ?: k, U: ~5 x
/ X2 s7 w o- _% o, n0 B7 k0 H
5 O' N' u0 { t$ T
x/ y4 c3 w% e0 a) [5 x" L+ [% xDevice returned transfer size 20483 m! `: b1 N% K5 w( B. d5 Q
# I" h% c0 |3 D9 _2 d
- 1 I" x# D, H6 y& \
- X* g! T4 y x" ^3 x9 D4 y
DfuSe interface name: "Internal Flash "2 g+ v+ F# c/ m: D
/ u( l3 }5 Z# y% z
$ |" e( K% _9 e0 ~ S: f$ {5 `0 S5 j) U! p
Downloading to address = 0x08000000, size = 36108
8 F$ D7 d' p9 t& L* D: Y3 B" h$ [1 Q
; ^8 m; X. n' i: G. Q4 l( k9 t; E0 [: y+ b- x
Download [=========================] 100% 36108 bytes
/ v# s. Y3 V8 \# s
% W& I i2 }9 z( d. e U
. U% P) z; \* R5 H/ l; v( \7 O6 r5 s0 }4 i
Download done.
% S+ ]) e, E o' s- w0 E% m) K9 F6 c
( x z. a, {4 W! o
! Y7 W/ Q- i o& A8 `+ k4 n, L' `2 _# ?2 ]: R
File downloaded successfully3 {* ?5 \$ b8 m2 J- ^3 ]6 L
2 d. L x) `; s9 F% Q) _* I# x1 d, E
@* I8 e/ b6 h# h* q8 |1 \7 N7 S 8 h9 R. }5 n, v9 d9 A
上位机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 ' l& [* }9 I E
|