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

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

( h: w; z) N; H8 m

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


$ x. x' W# O7 [  H7 E固件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( t, D1 B" s

      + }( z$ Y4 |0 H, ?* o: Ddfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary
      4 k( S) p* I5 C0 e9 s

      0 n) {& m$ J4 Z/ |

    • 7 M  U# g1 a. Y! c
      ; \% h& i6 v# U, o; v, K- X1 }; V
      cmd /k
      ( H( S, v6 F  M9 A  o

      % R& i" m1 c5 t* M% v
      0 J1 C6 [5 I3 h# M( S4 [2 |
  • 整个目录就像下面这样子
  • 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
  • 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
  • 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了8 W; A: R- Q7 s7 O9 t0 x$ j( O
  • % |& o! a% d# _' ]5 ]
    / N2 o* Q* N: 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  d& ^; q$ g3 u" i* o1 p/ E
    ' K5 t' m+ y! [0 }8 ^0 b1 }: `* Z

  • 9 G. G; a" ]# n1 C

    , ]7 N: a) x% L7 T; pdfu-util 0.9
    : \5 R+ A* @9 C$ p- N- Q  n

    % R  E8 G& ~3 o8 F+ u

  •   [/ s' L; Y9 ?; w/ l$ D& i

    ' Y* M' w" {& G% Z6 k. _0 w/ ?" n- w
    % x- J7 h' |4 b- v

      j* t0 c1 v/ W# `0 N* ^

  • + n/ F0 X* H+ R; }  ~% h

    : `  G2 [/ r" u: ^# k& R4 ]1 `Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
    9 O0 G- i3 U6 o0 V: X

    - T4 j7 ~6 T% l9 _6 i3 Z* S6 r
  • + {3 g9 ?8 R" J5 ]4 i  a

    4 t* l# _  [: ]$ X& Z8 z# `+ mCopyright 2010-2016 Tormod Volden and Stefan Schmidt. e0 L. l& D2 I! U: j3 ]- i- H
      a! O! J/ |9 L  ?; h

  • 6 |  P8 V8 |6 R- \7 M( _

    ( Q8 C' O7 `3 l- V1 G9 e' uThis program is Free Software and has ABSOLUTELY NO WARRANTY
    * I6 b8 f8 H- W6 r& }5 n1 ^

    % m% ?; g4 e! ]1 u, f  V
  • % I5 ?$ \" L% h4 F
    % r" I/ R3 B! ]
    Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
    ' f0 ~9 g- P3 w" s  B9 w

    7 |5 g- M$ Y, J' J( B9 ^

  • / v1 Y' Z; W; U9 l

    + k  ^  [8 j- C7 D& q
    : g- V$ J1 J8 M2 {" g( q

    7 y5 i2 J" X. i9 l; I: D# a7 L

  • 7 a0 v9 z) [& `  [, I

    ) X4 N# T' v9 [, X7 o8 Z* NInvalid DFU suffix signature
    - y1 K) _4 `+ A* N6 C% o
      Z  Y' A6 o4 h7 j! D3 `1 u4 v6 U

  • ; G/ J9 x* w) Q" N- u1 ]' q
    3 ~" Y" [% c+ a: s& i" t* D. A- P* E
    A valid DFU suffix will be required in a future dfu-util release!!!
    $ l( d; |. U% w0 V7 U% ?9 K0 f
    6 k, E+ U, j- T% w" [
  • ; f2 ~" x5 K$ m) x$ c& ]

    6 Z3 j0 G& Z2 H9 f% E% C- t% g/ S: ^Opening DFU capable USB device...$ L/ G9 Q2 v: T
    7 [2 p: k% a; t! w! b# X# F

  • 7 [4 m/ A% a9 s' H
    : N/ I9 j/ q( c( I
    ID 0483:df11
    # G- `3 J: L0 N1 ?4 X
    2 F  p1 T; h( G6 n/ ^7 v

  • $ }9 \/ ~: j+ o
    8 O5 _% f1 {8 V* _9 X
    Run-time device DFU version 011a( ]! ]2 a$ [) P' L/ T2 h' e

    / x1 M- L" @  R  `; b
  • / E- ]9 }1 k  W- D! B, B

    8 E1 l+ ?- B* o& ?2 g5 t4 PClaiming USB DFU Interface...- y4 l' h1 y$ t8 S- E, f
    ! t; N1 o* O  y0 R
  • # J6 ?! Z: ?" s8 D" J) Q, r9 h
    * `4 J$ ^" z  n2 d! t$ `
    Setting Alternate Setting #0 ...
    5 z$ N' }/ A+ n# E0 _+ n+ m! ]' b

    # Z2 I# X' _8 L! K5 @) f! e/ O
  • 6 A, V" [7 b8 u% t7 h( @* v
    : w$ p5 L! ~! @" {5 t9 L9 F( R$ t- H
    Determining device status: state = dfuERROR, status = 101 t; r# F9 q/ v" H; `
    3 N. |: K; \+ r/ \1 P
  • - q+ H$ Y+ q1 e, Z8 A9 N" O

    ! [+ I9 i! q. `7 ?+ Y  XdfuERROR, clearing status# |( H) e  @) M' n

    , S2 @+ ]' R4 I
  • ( P. o. h) ^& j* B& C. y0 Y( s4 i
    , j, P- L( y) {7 ?
    Determining device status: state = dfuIDLE, status = 0# Z7 V& F/ B: J0 r3 k7 m
    * X, D0 g/ H( M+ Y5 k

  • * _9 C' L# W5 Q: M% Y
    " t- ]4 Q; ~7 k8 I; W
    dfuIDLE, continuing0 k1 V3 w, r! z5 U3 |

    1 L% v  c) Z9 R4 N- @

  • 4 u: G7 A, |# E- N  H/ t
    4 R3 u4 X- Q0 P+ s% L6 k7 q; ~
    DFU mode device DFU version 011a3 [- X" W( ]- S2 n8 b
    5 ?$ A. l% V3 E+ R& x7 m; ^, g( J! Y
  • 5 ^- G9 O& J: s8 N

    8 A! N+ N0 c1 v) t( v9 k8 ~' W, E2 M* rDevice returned transfer size 2048
    + U  s' v8 c8 K5 m+ k

      ~) F0 u3 x! _( f% ]
  • # D: S5 U! ^! |

    1 y; @4 q; g' v1 z1 X3 B. VDfuSe interface name: "Internal Flash  "
      J% o; W* Q% a% y0 [
    ' D% a( n. K3 u- H. ?- h0 ^7 E) F6 ^

  • 3 f1 n  W3 ^( D% b

    6 T, H' |3 {: Z$ `9 [% ^Downloading to address = 0x08000000, size = 361089 x5 G- [: \+ _
    + h" k7 n8 U# ^% J

  • % G2 x4 d0 @2 z

    * W' Z, y, n9 O" \: vDownload        [=========================] 100%        36108 bytes' q) M, b; E: }' u$ Z5 x- K
    1 K' q- z8 p# m8 o8 O- A) n

  • % p$ L* V! _% Y$ }

    " L$ |3 X: h# K3 vDownload done.
    % J2 j( z* f* w# v3 P1 n. z

    2 S3 b  X( t$ E/ a2 l. x7 M- X/ @+ t7 H
  • . C! d# I+ [: e

    : k3 K; ^1 s. k3 r$ B% BFile downloaded successfully* D9 `- @1 I8 T: D( W) E5 Z
    ( z- K6 c8 @3 Q% F$ L3 e

      a% f8 w" S0 u0 V  x* o
, N8 E6 x8 |- z' J
上位机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

0 m" a- ?+ J5 B# [
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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版