你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
7805-2047233 发布时间:2020-8-27 21:45

照理来说,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等等,基本上可以直接拿来打样加工了。原理图本身很简单的,有兴趣的也可以自己画一版。


, b* |" A$ ]/ c; j# M5 Z

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

( z1 |, e) U2 m$ H9 \
固件candleLight_fw

http://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
    • / F* z6 z% X4 I7 T

      8 ?( a# {  ]2 Edfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary7 v3 f; E4 ]# m0 {; z6 ?5 J

      # q* M' i; g+ e( Q, Z. x+ ~9 M/ G
    • 6 {" n6 Q/ x4 h2 M% v* V

      & ?5 g5 x+ _2 Kcmd /k2 [) f" o- l! X' q6 h+ z

      3 |' E9 X% g8 K: `$ x/ L2 r) T4 t" p  N( G0 N
  • 整个目录就像下面这样子
  • 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
  • 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
  • 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了4 [: s+ T/ C0 H- @& ^& S

  • , O3 h0 o, a! U1 M( ?3 k1 \
    ' k% z% @6 j1 p
    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
    6 h: I# ?/ }2 z1 f0 ?% r
    , m2 \6 a# H7 H3 C9 }  Q
  • ( w7 I8 X) }2 C' ~: m/ H" x

    * n' E6 N# f7 }: N, t% mdfu-util 0.9
    5 z- \! U/ x4 N- M. o
    7 G4 {% o( A* R9 X

  • ( Z4 {' D' h  Y4 @; R" ], f) l
      L; k* K4 ]$ Q! Q9 |0 D7 S; r) Q1 y
    " r) V5 B( k$ U2 b+ m0 X, h

    . I# a- `; m! \, @0 }

  • 5 t" v+ t7 R% M% v/ @& e) F7 b2 p

    $ x6 O+ B* t. m3 A9 q+ J) o+ O; P) ]Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
    # F3 ^& u2 t, E! o" Z

    0 c; E9 h& b. B1 m; }
  • ( o/ ], S4 U  e" n% \! _; ~. C

    0 M4 R1 U) z9 Y, ?1 ^Copyright 2010-2016 Tormod Volden and Stefan Schmidt: h* G) n2 ^! s6 \2 E$ z8 D4 B/ W

    1 z( _+ w  |6 D+ ?# z
  • ' N" \) }7 U/ K2 r
    ) z) |+ C* u( Q3 `8 I
    This program is Free Software and has ABSOLUTELY NO WARRANTY
    3 N. G8 Z4 R; Y4 c4 T+ o

    . F. e1 n7 Z" j5 u1 F8 q

  • . J+ q  T" r; d$ X$ x' T

    / Q0 D: b" N: U+ @. H; V: LPlease report bugs to http://sourceforge.net/p/dfu-util/tickets/
    / p9 O' b' B" e) J- c, G  c

    ) \: @* X7 j) E* ~& M
  • % b! f' s( c4 l6 ]# `
    $ f+ {7 n. C$ a: x

    ' @; O$ ^& H& F0 Q4 z& y
    7 B4 o  v6 t* x- a
  • ) F: b2 p/ p6 `) n4 S
    . m' z' C! ?! H4 z
    Invalid DFU suffix signature) s4 B& H" x7 d' Z
    6 t$ n+ q1 Z/ P( M5 Y, D5 z

  • ' y7 t  r. P9 n- O# \# P* d

    + a# \: Z) r. w! [5 p! b4 JA valid DFU suffix will be required in a future dfu-util release!!!' W  r* j" V" M7 H
    1 f& X* L% J2 R6 J* R  n' Q  k

  • / F. [+ N' c" o7 x# H

      L+ V0 J. W! c& V) NOpening DFU capable USB device...
    5 f/ q; M6 p0 w7 G1 v, y: i

    ) s- X/ r! q5 A; X0 d
  • ' r* q% T7 _6 [7 V6 D

    6 O5 {  o* b% }4 f, SID 0483:df11- K' _, Z6 E& c: m' b1 U) o3 N
    3 y% I( z) _2 }* Q! r+ D+ e
  • - m3 x5 t( ~0 l# }0 A/ v

    - F: x0 N: R* t# X/ Z- ~6 i% VRun-time device DFU version 011a* y5 i1 S- p4 y; Y/ i0 m! W! H

    ; g: A3 X2 J; E' v, ?& s

  • * w# _1 v$ ^# R; B6 Y

    ( T7 \4 P" U- YClaiming USB DFU Interface...
    ! j" P, [- X9 S" y# S& i5 F. a" G

    ; x+ N) D) C+ {1 C

  • ; r/ v9 U5 L+ _8 X

    % S5 v  P: C5 O( @/ pSetting Alternate Setting #0 ...7 g' Q$ b& o" I! H3 E  l
    ; @$ |7 ]2 F& D

  • ( d, i9 s, y2 d

    ) i  w% t  a4 u  B& P  N1 ~' ~' MDetermining device status: state = dfuERROR, status = 10
    5 f7 }' b$ s2 _* p

    6 ~9 B- h$ `* r9 i% U  x' K

  • # H7 B2 r( O" G+ z' r; C

    - Q$ S* ~1 ~5 bdfuERROR, clearing status
    # |7 @1 }4 r6 b( E
    2 [. W' S# A! I- Y2 v' O) Y
  • % z8 [  B( J/ h

    2 J: H! o% {  x. p, KDetermining device status: state = dfuIDLE, status = 0& J" v* z1 d$ E! P
    4 ^( h- r4 a# m8 u6 n

  • 5 y) m6 P, @8 g$ }: s& W

    8 f  |8 t, L+ q" L( udfuIDLE, continuing
    9 R9 o& [/ h! ?
    : N  d, s3 w+ t0 _& K( r; U

  • ; T  d0 e! ~2 \/ b% w$ }. @! v

    + Y  {+ h( v9 t; DDFU mode device DFU version 011a
    7 c5 `+ ]( {3 R% c5 d9 D* ~3 p) o1 G
    8 g) w' k3 h0 s/ b. ]0 q9 w
  • 6 H' L1 l, R0 d) L5 x

    3 v7 ^6 c, m: TDevice returned transfer size 2048
    , M, l7 C) H6 L! ]- i

    4 E) S0 t1 P4 }. l6 C( j, k" Z5 d

  • 3 v: J- w7 E' o8 D

    3 U* Y: e' ^7 ~& V+ o( hDfuSe interface name: "Internal Flash  "0 s8 Y. B5 h1 V: R: Z4 a
    $ F4 \: y0 ?& D& Q/ s
  • " e, v+ G# E+ ~  e
    , {- I+ L' f( Q+ y
    Downloading to address = 0x08000000, size = 36108
    " e# l' k1 v1 I, _7 E
    , C0 }( d% Z5 S! B  v; h) O( R4 [: `$ D

  • ; H: x+ n& w- B, B8 j9 o* o

    2 D. K& f. a. n7 ]8 G% bDownload        [=========================] 100%        36108 bytes5 d7 W- X3 w; z4 u/ I
    # d/ o1 h3 X* p: z, S0 Q

  • ( V1 N0 y+ P, S! h5 v3 j2 Y2 A

    9 y: V  s6 b) R- x' G) vDownload done.; m) K% _- C! M5 _* y  l* h
    . c( N2 T0 w# o$ S: l, g

  • : ]) Q4 C! x9 a
    / \& g) g1 W% s0 L0 v
    File downloaded successfully, Q1 `/ F, ^. K6 V5 g  ?% q# v' G
    3 F1 e8 o$ H* m+ e  }3 N( V

    9 z; l( C# T+ t% @* ?
6 j, M1 z; Y+ e* M
上位机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


( H5 f7 T3 o0 U1 }. [) t9 H3 T
1 收藏 3 评论4 发布时间:2020-8-27 21:45

举报

4个回答
pkoko 回答时间:2020-8-30 11:20:48
不错,支持开源
Siriu 回答时间:2020-12-3 21:37:33
好东西,谢谢楼主分享
goyhuan 回答时间:2020-12-4 08:23:42
谢谢分享
米兰的无线电 回答时间:2020-12-4 11:43:08
这个USB-CAN太牛了

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版