|
照理来说,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等等,基本上可以直接拿来打样加工了。原理图本身很简单的,有兴趣的也可以自己画一版。
5 j; B, B. x" N8 I" Q I! T. \万能的tb上已经有人做成成品了,套了一个蓝色的外壳,看起来还不错,叫做CANable Z,在某宝上搜CANable 就能搜到,价格很便宜。 5 ^4 h7 h' C/ x+ T H
固件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
0 ? `& b) h9 F1 `( e, Y. c
& G/ i9 F7 P+ h( Mdfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary
% X) k6 x# Z' ^4 _- M4 X: P6 ~* t) p
3 |, m! d5 E9 P( o5 o% E
4 O/ ?# g* w$ s) s4 w2 @& j% x) H0 o
' P0 b& q; l; G. ]( bcmd /k* o* E0 J- D2 `# A+ t9 O$ u! Y
: W1 ~- ^$ Z4 w8 ] ^) Z" S6 C3 o8 `. h c
- 整个目录就像下面这样子
 - 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
 - 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
- 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了; z1 h9 _! p+ X' P/ w# l
* v( b+ J3 F) Y; h: L' V
4 ~3 {% Z6 G5 A7 xD:\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
. n1 B7 ~' ]: _, M
& M: ]" ?- ?6 J8 k- 6 u# a A- _5 n5 r) f2 e3 g8 C4 U- p
3 d3 i3 V1 K+ ^( T8 z$ jdfu-util 0.9
- P7 i9 r Y5 p$ b5 ?2 Z Y5 [( c1 S8 C% f5 n1 D' M( y
- 1 p4 R: k# J& t$ ~0 R
$ ^- f `- s9 N- s
) D( r! [1 |: Y* S7 A; j) j Z7 k1 H& @( I* r7 E: ^! _8 A9 q! I
- 7 z% m0 j8 q- L+ Z2 s; |
Y7 s' }/ h* n+ H1 ?" SCopyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.) Y4 `9 a1 r6 e$ T2 n
7 o- K! ^; g8 W& v# {' ^
: C1 n( i8 w h: b0 _6 O6 ]7 Q$ n0 n( n0 G3 ]% D
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
# D1 Z3 P7 G5 f" C# O! u& e- W
- f+ o" q j4 B- M* r, w- . Z% ?4 p9 S, b, @: ?8 ~' J4 [& |
# [9 {/ k% ?, }* u- {+ ^This program is Free Software and has ABSOLUTELY NO WARRANTY6 V" R S# a& H
+ {, O/ \6 z1 X2 D
0 u5 A6 I# o% i4 \' P$ K4 A& l' {6 {+ [- x0 `4 V. d
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
9 m# B1 R* }7 ]; U* h
; G& C& K7 v6 E
: p, ?. ]8 j+ S5 J1 s+ g. J
, d$ x4 G5 A& t* Y8 c& Y% z) _5 e/ y0 K
; e6 k! L% w2 J2 ^
( O2 d" G6 B! g$ {0 ?6 r3 T. F, O; a% a; [
Invalid DFU suffix signature
1 o t- D) D4 z6 F6 R" D
) I) |! i4 Q) s' B( `
5 s+ t) l+ r9 f9 z9 R# w
/ l* R$ Z( ?6 L1 vA valid DFU suffix will be required in a future dfu-util release!!!
0 l4 [1 T% {1 S! C2 s
3 R4 V2 u& B3 f+ I9 a- / G# [; t2 v8 ~+ M$ E R
3 C& J$ ~+ [) a! ~
Opening DFU capable USB device.... y3 q! u' V7 R F
; C F1 H6 p. q0 W9 K! K0 K# A
- , y4 c# O% }8 B( t! U. V
8 K4 [0 n- _. B' j6 L* C) n
ID 0483:df11* K1 _' H) [$ n, M- B
/ M. j' Q' R9 V& { I
/ G4 U+ D0 p) f* v. I9 W! X% s
3 a7 k; _- a9 @% D; TRun-time device DFU version 011a
( l- T( e. m2 a B% b- \9 X- j, j- n
2 P0 V6 h: x' ~0 L1 b
6 \ h a5 i# z4 a: A" [. F* Z- `' }3 ]% I2 g$ c! F& k
Claiming USB DFU Interface...
5 s% O: S1 @& T- L( T0 ~* r# `- ]5 j( e
- 0 s i' U7 ^# q+ z
0 ^* A4 S2 K- [ D
Setting Alternate Setting #0 ...
+ c5 z/ O8 l" E- V
: W: B! M4 G$ w1 k! o, J - ; O$ F0 l6 O$ Z6 C
! Q% N% g4 C2 zDetermining device status: state = dfuERROR, status = 10
: N- r5 d' y. h5 q5 y% E3 Y$ n7 R
! {/ ^4 Y/ a; y0 \2 X& x! n( r* f& D9 \! U6 s" c [
dfuERROR, clearing status
. a0 z7 @( R/ A9 r% G# w, L0 Z
& s; g2 i" e; \ ~/ e
5 q- q8 n1 F" c; I2 ~
/ l% T" ?7 _6 ~) m+ zDetermining device status: state = dfuIDLE, status = 0
$ \$ H* M: @; b9 T' `
. u& I$ l: R* I! J( }3 }
! n) @3 @' {$ C2 C8 U. X: J8 B
' H/ ^) D' G- J6 O1 \! {" RdfuIDLE, continuing
6 @4 k. j. [/ Q% l! O' p, [/ h7 @( o- _7 l5 x$ ?+ Z
- r0 N. ] b0 Y5 p' v0 Q/ p* n8 ~/ |, t7 j! I7 Y
DFU mode device DFU version 011a
4 p. _ P$ ^7 u! ?2 C3 V, L" x
% J' Z0 Z& ?" V8 h; N+ y+ \* W- / Z. w3 B- H! _6 ~" E3 H% O
9 Y6 F) g# |% d8 m) B0 JDevice returned transfer size 20486 r+ Y2 H) T" l+ ^3 R0 `$ q
- P; G: _. s' Q& ^8 A - , d# y0 P' m+ ^! d# q3 W
9 O; ^/ \% m, w2 x) UDfuSe interface name: "Internal Flash "$ F! e R6 Q* ^7 X& d5 a
' R# b. L# b* {# h# i" _
( r* v) ]8 F: F. X6 r# O' R
4 R P) |4 K3 a) k; _Downloading to address = 0x08000000, size = 361081 y* ?7 N. m1 M- M( I
( D- l( M4 v# p5 L; Y E
- 2 }4 `, i& G; k. T
2 I. B x% l1 `* ~Download [=========================] 100% 36108 bytes
! x9 W$ }) Y( L9 B' d/ ~& Z8 P$ k z; r1 x, @1 o$ I% S2 c' a A
0 x0 A' }" w4 z: c! _( K% N( h( b4 |( w& S* c. Y
Download done.
0 [4 m8 j# m+ [( m3 t5 u+ [6 J# b" S2 T9 e" q
- # c- t! s/ c2 V: a$ |6 m; ^0 c% o
# w, u) b$ F) A ]
File downloaded successfully
& l# E7 U3 |2 J! t; w8 ~$ S: v; k6 e; O2 u$ e7 }: |/ T7 f
, m: x# R! t3 @/ h' R ) V9 v: Q l) G" g* F. u: D; Q
上位机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 1 {+ X, P! t. t. N" ^5 ^
|