照理来说,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等等,基本上可以直接拿来打样加工了。原理图本身很简单的,有兴趣的也可以自己画一版。 6 V; S) {' l" F1 a# l2 ?# ^* E6 z' L& U
万能的tb上已经有人做成成品了,套了一个蓝色的外壳,看起来还不错,叫做CANable Z,在某宝上搜CANable 就能搜到,价格很便宜。 Y% y& y6 O4 Y/ D0 A q0 B: `
固件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
; H" I7 `# ~7 d# }( B2 u3 ]8 v0 p$ Y
dfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary! r" U4 E+ N' H7 W
0 K& v2 L4 a1 m! S/ ~
; o3 E1 ^& l, n! K+ s6 Q6 \8 X1 x: I2 `
cmd /k
" m# G+ C6 H* k6 A ~
" `/ A" ^. E( Y$ ?4 c5 V& J' t" {% C, |: h% U
- 整个目录就像下面这样子
- 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
- 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
- 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了* R& q4 R+ s- m$ g3 U
! r) {; M7 p' I2 H4 x7 v
; ~8 a& f5 l( H; F5 Z2 e, H: A% E o' gD:\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 j7 a1 |" u# G; M% }- S3 U- n
1 g; j. }* x# G; g, J
. d) g, n! A) X# V! z! d2 n) i4 G( ~
dfu-util 0.92 U2 B6 C4 U7 J: W% S+ P3 D
1 r8 R$ z4 D6 w
* Y; v5 H3 h& e0 \ a7 a3 G$ ?
* Z6 P. J3 O% M+ G& x$ j k2 I
* J: R5 A) s& W/ L& \; ^
& \' _% x! _4 F5 X7 V! J- " p; G' b. [$ h6 c* x3 b
, \& `+ o C4 O$ j5 C
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
, U1 h2 Z3 n/ r% @5 n6 j: h+ k3 Z7 S2 j( n5 F/ e4 e( w
- ! a+ q1 Q* V. L
& a N" B0 g- p# l+ C7 j" _
Copyright 2010-2016 Tormod Volden and Stefan Schmidt7 C5 d8 `- C/ {* S
/ i! t) |- z: E, S4 S# Q. O3 L( l
5 ]* E r* f0 x7 [( k0 e1 \" P# C: q7 M5 o6 `! l% ]5 `% Y
This program is Free Software and has ABSOLUTELY NO WARRANTY
: d% i* t+ `3 ^; n# z. c4 g4 I# S- \/ y7 x5 i3 T
- ( Q x: a" H% p* A( M& o9 R
% P3 | n; Y4 Z+ m- t% T
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/+ _- S0 r9 b* F# P7 |) M' r. s
2 y4 U! k$ {3 V: L$ |& ~ - * m5 P! X2 n3 Q1 ] l, P2 W
; i3 N! z5 r3 x3 r+ ^9 s
0 d3 I' h: y+ w4 R# |4 M
5 v) T& e* E' t - ; [) Q6 `$ T3 r) R# ?8 ?2 `( G
8 o! G' J- m' P, i! N, NInvalid DFU suffix signature
: k* H+ ^8 ?1 g7 ] J
# i+ P% K) A# I, I( s. |" B
; S/ ^' S8 \* n/ N. d7 S4 s, e: |, s; Z- {/ Z0 f7 {
A valid DFU suffix will be required in a future dfu-util release!!!0 S/ L" c! K7 ~( M# `3 L( i
7 i8 L" c) a# y
/ L8 y% z, k3 f2 ^2 c2 ` O8 G7 E c1 @: M
Opening DFU capable USB device...
6 |# s: v: X/ Z; b7 h0 T5 }
: M& H v( H" s7 j3 U7 C- n2 C
4 A) d& m) s L
' e/ ?9 W$ r7 hID 0483:df11
2 D9 I3 ` K- N- _5 Z
- d3 s7 Y2 b1 F& c$ l q# R- : X- d# _$ F6 X$ X! ^8 [
5 P) K3 \/ c2 \$ I: ?9 b9 {2 J
Run-time device DFU version 011a
& D2 D y8 t' v2 }
; Q- O. ^2 v7 z6 f - " T( w9 w+ ^/ _& e4 }
$ Z+ H2 [# C# ~, s1 z5 f$ pClaiming USB DFU Interface...
: w. r6 Z& Z d2 L! N' ?! T7 ] i" I
6 b) D3 V* L9 _8 _8 c" E
A/ S6 K0 i. ]7 n* N- p3 Y; z
I8 M: ~7 n5 f( iSetting Alternate Setting #0 ...
! _5 i" l% _: T; s; \, w0 j, g* [$ n: V, f0 w/ b
6 w8 U) x$ `! u; \# y0 G0 k+ e' G1 k$ i1 k5 V" f
Determining device status: state = dfuERROR, status = 10
7 j# ?0 c' ^2 Y" ~: K$ C' x% e4 x6 w, K) R
9 a" d* o: _9 [
3 i. z( V J' h2 ?1 C) Y6 p2 s# Y0 G
dfuERROR, clearing status" I( {+ ~# I6 s# k) R% W }/ S. _# l
% H( i5 |9 c4 R% T3 B
. n% ?% ]9 ^6 `8 @ R
7 o9 r5 R! G& V% YDetermining device status: state = dfuIDLE, status = 04 @( [6 ~0 J# Y* H% F% I
1 S8 S0 ~4 ]" m! n: Q
- 3 X; ~* M5 Q: r! d& E/ V
; m8 B) X* }( P! H, ~- |; S8 [0 }
dfuIDLE, continuing
2 u6 S: a+ D ^& g( u
4 a1 L* C; j+ z# g! V1 R - & E$ u+ ]; r% ^/ [, }
- l2 z$ G# x$ [4 p7 Q9 p
DFU mode device DFU version 011a1 D4 M9 {' q+ X
' X( p4 |9 U: J
- 4 c( D) u, _2 ]
+ n u& c2 {/ }0 I
Device returned transfer size 2048( q. u+ s7 H) p$ U. W K$ Z
8 l3 U* S9 k- j) O e8 t - * A% {$ V" M) c3 V; u4 |0 k2 ? [
/ W2 \3 Y8 Y5 m& k3 B- r
DfuSe interface name: "Internal Flash "
; c" p; b' T9 c3 J9 L/ ? h! t& w6 \6 e
- ; _2 y( z" A9 D
: G% L g+ ~1 V* p. T/ ^3 F2 @% A$ `Downloading to address = 0x08000000, size = 36108
/ T) Y6 i) ^( f5 S. E+ _. @9 g" g: \* s2 h9 k' @7 m
- 2 W8 u0 |8 u6 | e2 i2 U
6 d, _" @" g( h7 x0 O' } u
Download [=========================] 100% 36108 bytes
" s. x& i; J# l
" q6 }! V! T& L4 t6 u& P - % K' }9 @+ a" |2 x7 f( f/ ?! Z
( h2 u: \1 {) Y2 `$ C( w
Download done.) T% Y2 m e4 X" b
7 {, Y4 Q9 G. g' D6 y9 I
- 9 O8 ~3 Y3 {) O F- d
% ^: O( i/ Y6 {! {! g5 J0 UFile downloaded successfully8 o# |5 l; M4 J$ G; ?& o( k
5 {, a3 v( u, n
# ?5 A; `( M, h- ^2 ?! X) Y 5 X* e7 G0 h9 z. r6 Z) b
上位机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 / E$ v7 ~2 N$ p8 E( @/ T
|