wdluo 发表于 2016-12-9 14:16:15

开源基于CAN总线的Bootloader/IAP,含上位机及单片机源码

功能简介:
利用CAN总线实现对有CAN总线接口的设备进行固件升级;
升级采用一键升级方式,傻瓜式操作,方便使用;
用户可以自己修改上位机源码和下位机源码,实现固件的加密传输;
目前此项目包含了STM32F1,STM32F2,STM32F4系列单片机示例源码,后面会增加其他单片机源码;
上位机界面程序目前是用Qt(C++)实现,后面会增加C#,Labview版本代码;

使用步骤:
1,找到和你所使用的单片机对应的源码,比如为STM32F103芯片,用keil 5打开bootloader/RVMDK目录下的工程,检查下你的CAN总线引脚配置是否跟我代码里面的一样,若是一样的,则可以直接编译下载,若不一样,则需要更改CAN总线引脚配置部分代码;
2,和bootloader同目录下有个app目录,同样打开app/RVMDK目录下的工程文件,并编译工程,若一切正常的,那么在app/RVMDK/Output目录下应该会生成一个.bin文件,这个就是我们后面用来升级的固件;
3,使用Qt5打开software/CANBootloader-Qt/project目录下的CAN_Bootloader.pro文件,点击“构建”->“运行”即可编译运行此程序(若没有Qt开发环境,可以直接下载我打包好的程序,安装后即可运行,百度网盘下载地址:http://pan.baidu.com/s/1hsFjZMk ,在“软件”->“CANBootloader”目录)。
4,运行CANBootloader上位机软件后,点击“操作”->“扫描节点”,此时软件会弹出节点地址范围设置对话框,设置好扫描的节点返回,点击“确定”之后软件就开始扫描节点,同时将扫描到的节点显示在节点列表里面,选择列表里面的节点,然后再点击界面上的“打开文件”按钮,在弹出的文件浏览对话框中找到第2步编译出来的.bin文件,然后再点击“更新固件”按钮,此时就会开始固件更新,固件更新成功后,节点列表里面的节点固件类型会由原来的“BOOT”变成“APP”,到此固件更新完毕。
5,若当前固件是“APP”的情况下,一样是可以进行固件更新的,只是在更新固件之前程序会有一个固件跳转的操作,具体流程可以参考源码。

软件演示:

源码下载:
https://github.com/usbxyz/CAN-Bootloader
上位机软件安装程序下载:http://pan.baidu.com/s/1qY6gkJa

wmm20031015 发表于 2016-12-9 15:05:58

不错,很强大!!!

xiaowenshao 发表于 2016-12-9 15:09:03

顶,期待labview例程

N_EMBED 发表于 2016-12-9 15:12:47

赞,操作清晰明了。

闲鱼翻身 发表于 2016-12-9 15:16:28

感谢分享,默默MARK,很强大啊

bbandpp 发表于 2016-12-9 15:31:21

太强大了

honami520 发表于 2016-12-9 15:33:41

楼主又出好东西了啊!支持下!

wdluo 发表于 2016-12-9 15:35:01

honami520 发表于 2016-12-9 15:33
楼主又出好东西了啊!支持下!

{:handshake:}               

sunrosewang 发表于 2016-12-9 15:37:44

很好,有空下来学习一下

powerlabor001 发表于 2016-12-9 15:38:59

这个咱也必须支持一下,很强大的东西。

阿豪博士 发表于 2016-12-9 15:55:57

谢楼主!

qq451982051 发表于 2016-12-9 15:59:17

牛逼    很好很强大啊

落叶知秋 发表于 2016-12-9 16:18:59

下载来看看,多谢分享

Xiyuhexuan 发表于 2016-12-9 16:21:48

很强大!!!

Gline77 发表于 2016-12-9 16:43:06

操作清晰明了,赞

vc9181 发表于 2016-12-9 16:46:30

强悍{:handshake:}{:handshake:}

相由心生 发表于 2016-12-9 16:47:06

就这破玩意儿,就这做的代码的品质,还开源呢,只能说能用,品质到底了。

kxb 发表于 2016-12-9 17:26:55

谢谢分享

Excellence 发表于 2016-12-9 17:37:28

支持!下载测试

zheng8648 发表于 2016-12-9 17:50:44

好东西,必须顶!

chenhuiedu 发表于 2016-12-9 17:56:22

谢谢共享

了无 发表于 2016-12-9 19:58:40

相由心生 发表于 2016-12-9 16:47
就这破玩意儿,就这做的代码的品质,还开源呢,只能说能用,品质到底了。 ...

不管楼主的东西怎么样,你直接这样贬低说明人品有问题!
ps:你行你来!

相由心生 发表于 2016-12-9 20:02:57

了无 发表于 2016-12-9 19:58
不管楼主的东西怎么样,你直接这样贬低说明人品有问题!
ps:你行你来!

难道我会用冰箱,要会造冰箱么。我会用手机,要会造手机么。

GoingDown 发表于 2016-12-9 22:11:50

支持楼主, 希望楼主不要被有的人影响,这个世界有太多的dream killer.

njjh1718 发表于 2016-12-9 22:18:44

大神啊

njjh1718 发表于 2016-12-9 22:20:35

相由心生 发表于 2016-12-9 16:47
就这破玩意儿,就这做的代码的品质,还开源呢,只能说能用,品质到底了。 ...

咱都以作品说话   别扯没用的   来点干货

njjh1718 发表于 2016-12-9 22:20:35

相由心生 发表于 2016-12-9 16:47
就这破玩意儿,就这做的代码的品质,还开源呢,只能说能用,品质到底了。 ...

咱都以作品说话   别扯没用的   来点干货

mcu005 发表于 2016-12-9 22:33:23

喷得凶才体现楼主强大

相由心生 发表于 2016-12-9 22:34:35

我这么这么说,我还是比较认真的看过。
1、开源项目,硬件不开源,而且做广告,开个毛源,等于挖一个新坑。
2、软件没有架构概念,一坨代码杂在一起,这样的软件只能说能用,能用到产品中去吗?变像也是坑。
3、文档以注释为主,没有说明工作原理。
4、我公司产品中can、串口、蓝牙、GPRS升级已经是早就产品化,只是不能开源。
5、几个开源软件意识要有:
   1、说明依赖
   2、遵从的协议
   3、工作原理
   4、良好的软件架构
   5、尽量不埋坑

315936392 发表于 2016-12-9 22:56:01

支持楼主的开源。另外鄙视楼上

wdluo 发表于 2016-12-9 22:57:36

本不想说啥,但是还是想说几句

dengterry 发表于 2016-12-9 23:01:10

顶            

wdluo 发表于 2016-12-9 23:02:03

1,项目中用到的usb转can适配器确实是我们公司的产品,这个即使我想开源也不能开源,至于广告一说,你要这样理解也可以,就算做个广告应该也不是什么无耻的事情,毕竟代码不能当饭吃,至于是不是坑,需要使用的人来评判好了

wdluo 发表于 2016-12-9 23:05:51

2,个人编程能力确实有限,只能尽量写好一点,当然以后也会更加努力,需要使用的人在使用这些代码的时候也只能做参考,有坑的地方也希望大家能指出来,我会尽量努力给填上

wdluo 发表于 2016-12-9 23:07:39

3,文档方面目前确实做得不好,后面我也会尽量完善,不过对稍微有点基础的人来说,应该很容易理解的

wdluo 发表于 2016-12-9 23:10:59

4,产品化的东西当然不方便开源,这个大家都懂,不过你也可以剥离一点出来造福下广大坛友被,相信以你能力,随便弄一段代码对于我们都是很大的福利啊,期待~~

wdluo 发表于 2016-12-9 23:14:14

5,至于开源协议,我没去做过大的开源项目,所以也不懂,我只是奉献了一点我觉得还有点用的东西而已,事实上也有很多客户使用此方案应用到自己的产品中

wdluo 发表于 2016-12-9 23:20:04

总之,我很多开源贴都仅供参考,个人能力有限,难免会有些错误,也希望大家指正

foxpro2005 发表于 2016-12-9 23:39:52

不错,感谢分享,给你顶起

guoj 发表于 2016-12-10 05:17:37

支持楼主

ycwjl728 发表于 2016-12-10 06:52:02

Mark!
学习一下!

wtiechen1969 发表于 2016-12-10 08:35:38

强帖留名,CAN总线的Bootloader/IAP

brightchl 发表于 2016-12-10 08:44:33


谢楼主!

Wo456 发表于 2016-12-10 08:51:48

这个真的是好东西,谢谢!

fenglove 发表于 2016-12-10 08:53:07

谢谢楼主,标记一下can总线IAP

霸气侧漏 发表于 2016-12-10 09:56:57

楼主的动态图怎么弄的,

ZYBing 发表于 2016-12-10 10:06:16

感谢分享

liao-ljj 发表于 2016-12-10 10:06:19

百度链接失效啊!能重发一下嘛?谢谢!

1785345205 发表于 2016-12-10 10:38:02


谢谢分享
谢谢分享

wdluo 发表于 2016-12-10 17:52:48

霸气侧漏 发表于 2016-12-10 09:56
楼主的动态图怎么弄的,

录屏后转换成gif图片

wdluo 发表于 2016-12-10 17:53:21

liao-ljj 发表于 2016-12-10 10:06
百度链接失效啊!能重发一下嘛?谢谢!

我刚刚测试没问题啊

lcl 发表于 2016-12-10 18:04:17

这个牛逼,谢谢楼主,收藏{:lol:}{:lol:}{:lol:}

PCBBOY1991 发表于 2016-12-10 22:39:53

顶楼主!

joyang 发表于 2016-12-11 00:03:41

很强, 果断收了

cdlxzlp 发表于 2016-12-11 13:09:47

高手来的,总会有好东西!

fengyunyu 发表于 2016-12-11 13:20:19

支持一下,挺好的!

片羽之神 发表于 2016-12-11 16:28:17

严重关切labview~mark~~

596142041 发表于 2016-12-11 19:48:22

多谢楼主的分享,给我提供了一些帮助,正准备做这。

caizhiwei 发表于 2016-12-11 19:57:48

支持楼主,被29楼喷了,别在意~哈哈

aduecho 发表于 2016-12-11 21:42:41

多谢楼主,上周花了一周的时间查看了楼主的上一个版本,借鉴其中的一些思路用cvi也整了个,没想到楼主这么快又发布新的版本了。赞一个

guzhongqi 发表于 2016-12-12 08:15:45

对CAN更新的协议更感兴趣,CAN的加密有点麻烦。

yqlomg 发表于 2016-12-12 08:34:13

楼主好样的!

lsdavid 发表于 2016-12-12 08:37:14

正好公司要做CAN,及时雨啊!多谢!

wdluo 发表于 2016-12-12 08:55:42

guzhongqi 发表于 2016-12-12 08:15
对CAN更新的协议更感兴趣,CAN的加密有点麻烦。

其实一点都不麻烦,直接把原始bin文件加密,然后CAN传输的数据也是加密之后的bin文件数据,单片机接收到这些数据之后再解密写入Flash即可,因为不想把项目搞得太复杂,所以这里没实现这样的功能

guzhongqi 发表于 2016-12-12 12:40:19

wdluo 发表于 2016-12-12 08:55
其实一点都不麻烦,直接把原始bin文件加密,然后CAN传输的数据也是加密之后的bin文件数据,单片机接收到 ...

通信不加密就能被监听,在单片机解密意味着有明文保存的密钥,所以只要解密了bootloader你所谓的加密就没有意义了。

aduecho 发表于 2016-12-12 12:51:43

楼主上一个版本里面数据传输后加了两字节的crc,个人感觉没必要,因为Can协议本身已经带crc 验证了。收到的数据就是可靠的。

wdluo 发表于 2016-12-12 14:09:06

guzhongqi 发表于 2016-12-12 12:40
通信不加密就能被监听,在单片机解密意味着有明文保存的密钥,所以只要解密了bootloader你所谓的加密就没 ...

是的,若bootloader程序被读出来,确实也没办法了

wdluo 发表于 2016-12-12 14:12:55

aduecho 发表于 2016-12-12 12:51
楼主上一个版本里面数据传输后加了两字节的crc,个人感觉没必要,因为Can协议本身已经带crc 验证了。收到的 ...

我程序里面有两次CRC校验,一是接收完数据之后,而是数据写入Flash之后
第一种情况主要是怕在接收数据的时候,同时又收到了CAN总线上其他节点发了刚好跟这个命令一样的数据,这样从节点必须通过CRC来保证接收到的数据是无误的
第二种情况是保证写入Flash的数据是完全没问题的,比如Flash没被擦除的情况,虽然也可以成功写入,但是写入之后的数据跟原始数据就不一样了,所以这个CRC校验最好是加上

lovecxm 发表于 2016-12-13 12:27:23

楼主好样的,不管是否能够产品化,至少提供了一种思路,比光说不做的人好太多了

yuanpiggy 发表于 2016-12-13 17:03:21

楼主牛逼.

robin林 发表于 2016-12-15 09:49:47

楼主辛苦!有c#版本的吗?感谢楼主,我也在做,但是对c#小白做起来吃力

wdluo 发表于 2016-12-15 14:58:51

robin林 发表于 2016-12-15 09:49
楼主辛苦!有c#版本的吗?感谢楼主,我也在做,但是对c#小白做起来吃力

暂时还没有,后面打算做,你若急要我可以给你一个C#版本的控制台程序,188298598

wdluo 发表于 2016-12-15 18:02:21

Labview版本的上位机程序写好了,大家可以到github上下载,LABVIEW不是很熟悉,程序写得不怎么好,但是能正常工作,仅供参考

yanshanbao 发表于 2016-12-16 11:57:22

非常不错,正需要。非常感谢。mark: can总线IAP

gzhua20088ssj 发表于 2016-12-16 12:31:20

不错,感谢分享CAN IAP

wdluo 发表于 2016-12-16 12:54:39

这两天在做C#版本上位机程序,估计下周可以做好{:titter:}{:titter:}

linquan315 发表于 2016-12-16 13:35:52

相由心生 发表于 2016-12-9 22:34
我这么这么说,我还是比较认真的看过。
1、开源项目,硬件不开源,而且做广告,开个毛源,等于挖一个新坑。 ...

说的很好,是做产品的人。
玩了很多开发板,但是发现国产的开发板的特点是面子上的高大全,除了CPU外,用的电路很多都是老套的快淘汰的方案,在产品上无法使用。例程虽然很多,但是在都是一些底层得不能再底层的例子,配置文件、功能等根本无法直接借鉴,而且很多代码是堆砌、照搬来的,有用的和没有用的混在一起,想使用的话,要把文件全部看一遍,然后发现还不如重新写了。如果照搬,到处都是坑,会死的很惨。
宁愿多花一点钱,买国外的原厂的开发板,像STM32的DICSO系列,Necluo系列的开发板,应用说明文件,电路、外围电路、例程都很经典,而且方案都是比较新的,价格也不贵。

linquan315 发表于 2016-12-16 13:41:22

产品都有应用背景,电子只是其中很小一部分,其实在电子方面开源倒是可能的,毕竟核心竞争力不在这一块,而且大家能够相互借鉴,节省开发时间,所以国外的开源网站特别火,而且开源的项目质量较高。国内乌龙混杂,没有办法,大家都要挣钱,每一个人都想借助别人的力量,站在巨人的肩膀上。

dwiller_ARM 发表于 2016-12-16 13:48:12

不错!我也正想做个类似这种东西!我在51单片机上实现了,下一步试试STM32强大的性能,
界面我用MFC写的,只是没楼主那么熟练,界面线程还在练习

只是楼主这个扫面节点也太快了吧,超时时间估计就250MS吧

wdluo 发表于 2016-12-16 14:32:56

dwiller_ARM 发表于 2016-12-16 13:48
不错!我也正想做个类似这种东西!我在51单片机上实现了,下一步试试STM32强大的性能,
界面我用MFC写的, ...

程序设置的10毫秒,可以根据实际应用情况进行更改

wdluo 发表于 2016-12-16 14:40:25

linquan315 发表于 2016-12-16 13:35
说的很好,是做产品的人。
玩了很多开发板,但是发现国产的开发板的特点是面子上的高大全,除了CPU外,用 ...

大环境不一样,说这些都没啥用
若广大电工都不用考虑赚钱养家,那肯定也会花时间把事情做好,做到极致,相信搞技术的人都是有这种匠人精神的,但是没办法,在国内你做好了,还开源了,就只有一个结局而已...

wdluo 发表于 2016-12-16 14:41:40

linquan315 发表于 2016-12-16 13:41
产品都有应用背景,电子只是其中很小一部分,其实在电子方面开源倒是可能的,毕竟核心竞争力不在这一块,而 ...

你敢把你公司产品代码放出来给大家借鉴不??{:lol:}

online9930 发表于 2016-12-16 19:41:42

强大,谢谢分享

philix 发表于 2016-12-16 20:21:04

不错,很强大!!!谢谢分享

linquan315 发表于 2016-12-18 13:31:29

wdluo 发表于 2016-12-16 14:41
你敢把你公司产品代码放出来给大家借鉴不??

有部分代码用到了,你看俺的帖子,:
modbus用到了,STM32F4与LPC1758的FreeModbus移植
CAN总线的用到了,动态内存+环形队列库+CAN驱动(LPC17XX)
串口的驱动程序用到了,STM32串口驱动(拼音检索测试通过)(环形队列+内存动态分配+DMA。
这些在产品中用到了的。
这些自己写也容易,只是需要时间,验证更加需要时间,就像文字一样,只是一个载体而已,但是具体的产品的功能部分,肯定有很多不能公开的,这是你说的。
技术在中国不是最关键的,市场、渠道、关系、背景才是。

wdluo 发表于 2016-12-18 16:00:43

robin林 发表于 2016-12-15 09:49
楼主辛苦!有c#版本的吗?感谢楼主,我也在做,但是对c#小白做起来吃力

C#版本的代码做好了,源码你可以到github上去下载,这里给你一个可以直接运行的文件

wdluo 发表于 2016-12-18 16:02:00

jslc2012 发表于 2016-12-18 20:27:45

这各教程做的好啊,学习了

aichuang 发表于 2016-12-18 21:59:13

教程含金量很高啊,值得学习,

dory_m 发表于 2016-12-19 09:21:03

学习,谢谢!!!

lsls666888 发表于 2016-12-19 10:31:53

教程不错,学习了

wdluo 发表于 2016-12-19 12:21:12

最新的协议说明文档已经上传到github

bingxiin8 发表于 2016-12-19 13:06:05

正要用,谢谢

dhw5qq 发表于 2016-12-29 12:32:51

支持透传不? 我现在485, 主机+3从机,主机转发,从机根据地址进行烧录?

zhangfeng0115 发表于 2016-12-29 14:33:52

改天试一试。。。。。。。。。。。。。

wuhuan 发表于 2016-12-29 22:43:51

好东西,谢谢

蓝蓝的恋 发表于 2016-12-29 23:11:34

收藏了先!

Eastnorth 发表于 2016-12-30 07:56:17

有用到,多谢楼主分享。

wdluo 发表于 2016-12-30 10:36:25

dhw5qq 发表于 2016-12-29 12:32
支持透传不? 我现在485, 主机+3从机,主机转发,从机根据地址进行烧录? ...

不太明白你说的透传具体是怎么个传输...

dhw5qq 发表于 2016-12-30 11:00:56

就是一个主机+3个从机485通讯,现在上位机与主机通讯,然后上位机可以通过主机对从机进行烧录!
页: [1] 2 3
查看完整版本: 开源基于CAN总线的Bootloader/IAP,含上位机及单片机源码