开源基于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 不错,很强大!!! 顶,期待labview例程 赞,操作清晰明了。 感谢分享,默默MARK,很强大啊 太强大了 楼主又出好东西了啊!支持下! honami520 发表于 2016-12-9 15:33
楼主又出好东西了啊!支持下!
{:handshake:} 很好,有空下来学习一下 这个咱也必须支持一下,很强大的东西。 谢楼主! 牛逼 很好很强大啊 下载来看看,多谢分享 很强大!!! 操作清晰明了,赞 强悍{:handshake:}{:handshake:} 就这破玩意儿,就这做的代码的品质,还开源呢,只能说能用,品质到底了。 谢谢分享 支持!下载测试 好东西,必须顶! 谢谢共享 相由心生 发表于 2016-12-9 16:47
就这破玩意儿,就这做的代码的品质,还开源呢,只能说能用,品质到底了。 ...
不管楼主的东西怎么样,你直接这样贬低说明人品有问题!
ps:你行你来! 了无 发表于 2016-12-9 19:58
不管楼主的东西怎么样,你直接这样贬低说明人品有问题!
ps:你行你来!
难道我会用冰箱,要会造冰箱么。我会用手机,要会造手机么。 支持楼主, 希望楼主不要被有的人影响,这个世界有太多的dream killer. 大神啊 相由心生 发表于 2016-12-9 16:47
就这破玩意儿,就这做的代码的品质,还开源呢,只能说能用,品质到底了。 ...
咱都以作品说话 别扯没用的 来点干货 相由心生 发表于 2016-12-9 16:47
就这破玩意儿,就这做的代码的品质,还开源呢,只能说能用,品质到底了。 ...
咱都以作品说话 别扯没用的 来点干货 喷得凶才体现楼主强大 我这么这么说,我还是比较认真的看过。
1、开源项目,硬件不开源,而且做广告,开个毛源,等于挖一个新坑。
2、软件没有架构概念,一坨代码杂在一起,这样的软件只能说能用,能用到产品中去吗?变像也是坑。
3、文档以注释为主,没有说明工作原理。
4、我公司产品中can、串口、蓝牙、GPRS升级已经是早就产品化,只是不能开源。
5、几个开源软件意识要有:
1、说明依赖
2、遵从的协议
3、工作原理
4、良好的软件架构
5、尽量不埋坑 支持楼主的开源。另外鄙视楼上 本不想说啥,但是还是想说几句 顶 1,项目中用到的usb转can适配器确实是我们公司的产品,这个即使我想开源也不能开源,至于广告一说,你要这样理解也可以,就算做个广告应该也不是什么无耻的事情,毕竟代码不能当饭吃,至于是不是坑,需要使用的人来评判好了 2,个人编程能力确实有限,只能尽量写好一点,当然以后也会更加努力,需要使用的人在使用这些代码的时候也只能做参考,有坑的地方也希望大家能指出来,我会尽量努力给填上 3,文档方面目前确实做得不好,后面我也会尽量完善,不过对稍微有点基础的人来说,应该很容易理解的 4,产品化的东西当然不方便开源,这个大家都懂,不过你也可以剥离一点出来造福下广大坛友被,相信以你能力,随便弄一段代码对于我们都是很大的福利啊,期待~~ 5,至于开源协议,我没去做过大的开源项目,所以也不懂,我只是奉献了一点我觉得还有点用的东西而已,事实上也有很多客户使用此方案应用到自己的产品中 总之,我很多开源贴都仅供参考,个人能力有限,难免会有些错误,也希望大家指正 不错,感谢分享,给你顶起 支持楼主 Mark!
学习一下! 强帖留名,CAN总线的Bootloader/IAP
谢楼主! 这个真的是好东西,谢谢! 谢谢楼主,标记一下can总线IAP 楼主的动态图怎么弄的, 感谢分享 百度链接失效啊!能重发一下嘛?谢谢!
谢谢分享
谢谢分享 霸气侧漏 发表于 2016-12-10 09:56
楼主的动态图怎么弄的,
录屏后转换成gif图片 liao-ljj 发表于 2016-12-10 10:06
百度链接失效啊!能重发一下嘛?谢谢!
我刚刚测试没问题啊 这个牛逼,谢谢楼主,收藏{:lol:}{:lol:}{:lol:} 顶楼主! 很强, 果断收了 高手来的,总会有好东西! 支持一下,挺好的! 严重关切labview~mark~~ 多谢楼主的分享,给我提供了一些帮助,正准备做这。 支持楼主,被29楼喷了,别在意~哈哈 多谢楼主,上周花了一周的时间查看了楼主的上一个版本,借鉴其中的一些思路用cvi也整了个,没想到楼主这么快又发布新的版本了。赞一个 对CAN更新的协议更感兴趣,CAN的加密有点麻烦。 楼主好样的! 正好公司要做CAN,及时雨啊!多谢! guzhongqi 发表于 2016-12-12 08:15
对CAN更新的协议更感兴趣,CAN的加密有点麻烦。
其实一点都不麻烦,直接把原始bin文件加密,然后CAN传输的数据也是加密之后的bin文件数据,单片机接收到这些数据之后再解密写入Flash即可,因为不想把项目搞得太复杂,所以这里没实现这样的功能 wdluo 发表于 2016-12-12 08:55
其实一点都不麻烦,直接把原始bin文件加密,然后CAN传输的数据也是加密之后的bin文件数据,单片机接收到 ...
通信不加密就能被监听,在单片机解密意味着有明文保存的密钥,所以只要解密了bootloader你所谓的加密就没有意义了。 楼主上一个版本里面数据传输后加了两字节的crc,个人感觉没必要,因为Can协议本身已经带crc 验证了。收到的数据就是可靠的。 guzhongqi 发表于 2016-12-12 12:40
通信不加密就能被监听,在单片机解密意味着有明文保存的密钥,所以只要解密了bootloader你所谓的加密就没 ...
是的,若bootloader程序被读出来,确实也没办法了 aduecho 发表于 2016-12-12 12:51
楼主上一个版本里面数据传输后加了两字节的crc,个人感觉没必要,因为Can协议本身已经带crc 验证了。收到的 ...
我程序里面有两次CRC校验,一是接收完数据之后,而是数据写入Flash之后
第一种情况主要是怕在接收数据的时候,同时又收到了CAN总线上其他节点发了刚好跟这个命令一样的数据,这样从节点必须通过CRC来保证接收到的数据是无误的
第二种情况是保证写入Flash的数据是完全没问题的,比如Flash没被擦除的情况,虽然也可以成功写入,但是写入之后的数据跟原始数据就不一样了,所以这个CRC校验最好是加上 楼主好样的,不管是否能够产品化,至少提供了一种思路,比光说不做的人好太多了 楼主牛逼. 楼主辛苦!有c#版本的吗?感谢楼主,我也在做,但是对c#小白做起来吃力 robin林 发表于 2016-12-15 09:49
楼主辛苦!有c#版本的吗?感谢楼主,我也在做,但是对c#小白做起来吃力
暂时还没有,后面打算做,你若急要我可以给你一个C#版本的控制台程序,188298598 Labview版本的上位机程序写好了,大家可以到github上下载,LABVIEW不是很熟悉,程序写得不怎么好,但是能正常工作,仅供参考 非常不错,正需要。非常感谢。mark: can总线IAP 不错,感谢分享CAN IAP 这两天在做C#版本上位机程序,估计下周可以做好{:titter:}{:titter:} 相由心生 发表于 2016-12-9 22:34
我这么这么说,我还是比较认真的看过。
1、开源项目,硬件不开源,而且做广告,开个毛源,等于挖一个新坑。 ...
说的很好,是做产品的人。
玩了很多开发板,但是发现国产的开发板的特点是面子上的高大全,除了CPU外,用的电路很多都是老套的快淘汰的方案,在产品上无法使用。例程虽然很多,但是在都是一些底层得不能再底层的例子,配置文件、功能等根本无法直接借鉴,而且很多代码是堆砌、照搬来的,有用的和没有用的混在一起,想使用的话,要把文件全部看一遍,然后发现还不如重新写了。如果照搬,到处都是坑,会死的很惨。
宁愿多花一点钱,买国外的原厂的开发板,像STM32的DICSO系列,Necluo系列的开发板,应用说明文件,电路、外围电路、例程都很经典,而且方案都是比较新的,价格也不贵。 产品都有应用背景,电子只是其中很小一部分,其实在电子方面开源倒是可能的,毕竟核心竞争力不在这一块,而且大家能够相互借鉴,节省开发时间,所以国外的开源网站特别火,而且开源的项目质量较高。国内乌龙混杂,没有办法,大家都要挣钱,每一个人都想借助别人的力量,站在巨人的肩膀上。 不错!我也正想做个类似这种东西!我在51单片机上实现了,下一步试试STM32强大的性能,
界面我用MFC写的,只是没楼主那么熟练,界面线程还在练习
只是楼主这个扫面节点也太快了吧,超时时间估计就250MS吧 dwiller_ARM 发表于 2016-12-16 13:48
不错!我也正想做个类似这种东西!我在51单片机上实现了,下一步试试STM32强大的性能,
界面我用MFC写的, ...
程序设置的10毫秒,可以根据实际应用情况进行更改 linquan315 发表于 2016-12-16 13:35
说的很好,是做产品的人。
玩了很多开发板,但是发现国产的开发板的特点是面子上的高大全,除了CPU外,用 ...
大环境不一样,说这些都没啥用
若广大电工都不用考虑赚钱养家,那肯定也会花时间把事情做好,做到极致,相信搞技术的人都是有这种匠人精神的,但是没办法,在国内你做好了,还开源了,就只有一个结局而已... linquan315 发表于 2016-12-16 13:41
产品都有应用背景,电子只是其中很小一部分,其实在电子方面开源倒是可能的,毕竟核心竞争力不在这一块,而 ...
你敢把你公司产品代码放出来给大家借鉴不??{:lol:} 强大,谢谢分享 不错,很强大!!!谢谢分享 wdluo 发表于 2016-12-16 14:41
你敢把你公司产品代码放出来给大家借鉴不??
有部分代码用到了,你看俺的帖子,:
modbus用到了,STM32F4与LPC1758的FreeModbus移植
CAN总线的用到了,动态内存+环形队列库+CAN驱动(LPC17XX)
串口的驱动程序用到了,STM32串口驱动(拼音检索测试通过)(环形队列+内存动态分配+DMA。
这些在产品中用到了的。
这些自己写也容易,只是需要时间,验证更加需要时间,就像文字一样,只是一个载体而已,但是具体的产品的功能部分,肯定有很多不能公开的,这是你说的。
技术在中国不是最关键的,市场、渠道、关系、背景才是。 robin林 发表于 2016-12-15 09:49
楼主辛苦!有c#版本的吗?感谢楼主,我也在做,但是对c#小白做起来吃力
C#版本的代码做好了,源码你可以到github上去下载,这里给你一个可以直接运行的文件
这各教程做的好啊,学习了 教程含金量很高啊,值得学习, 学习,谢谢!!! 教程不错,学习了 最新的协议说明文档已经上传到github 正要用,谢谢 支持透传不? 我现在485, 主机+3从机,主机转发,从机根据地址进行烧录? 改天试一试。。。。。。。。。。。。。 好东西,谢谢 收藏了先! 有用到,多谢楼主分享。 dhw5qq 发表于 2016-12-29 12:32
支持透传不? 我现在485, 主机+3从机,主机转发,从机根据地址进行烧录? ...
不太明白你说的透传具体是怎么个传输... 就是一个主机+3个从机485通讯,现在上位机与主机通讯,然后上位机可以通过主机对从机进行烧录!