打印

基于“USB虚拟串口+zmodem”的STM32引导程序

[复制链接]
12378|67
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 nicholasldf 于 2011-12-29 10:31 编辑

这是这段时间搞STM32做的一个引导程序。官方有一个基于USART+ymodem的引导程序,但不满足需求,所以才写了自己的引导程序。

下面是该引导程序的来历说明:
1、以前在搞at91sam9260时,做了一个USART+zmodem的引导程序,就是上电时,尝试zmodem连接,如果连接不上,就从DATAFLASH读取应用程序并运行,如果检测到PC机超级终端有zmodem发送行为,则通过超级终端的zmodem的发送功能,把程序发到引导程序,引导程序再写入到AT45DB161 DATAFLASH存储器。这样就非常方便,再也不用通过SAMBA烧录,也不要拔开关。由于9260内部只有4KRAM,所以引导程序不能超过4K,把zmodem裁减到只有接收的功能,并且去掉CRC32的校验,因为CRC32有一个校验表格很占空间,,只保留CRC16校验。优化等级调到最高,这样勉强下来,做到了4K大小。发送512K的程序,用时大概1分钟。

2、在9260应用层,我采用的是全功能的zmodem程序,有接收、发送、CRC32校验功能。同时,把USART+zmodem改成USB虚拟串口+zmodem,发现测试速度大大提升,发送512K程序,只用了几秒钟。

3、基于上述经验,移植了ST官方的USB虚拟串口,只要USB接收和发送部分,不要USART部分。同时加上LCD显示、DATAFLASH驱动、FLASH擦除和写入、蜂鸣器、按键,可以升级STM32应用程序、其他要烧录固化的资源,,存储位置可以是STM32的FLASH、Dataflash等等。

STM32BootLoader开发说明
1、移植了360-APP的zmodem文件传输协议,支持32位CRC校验加快传输速度;也移植过360-BOOT的zmodem但发现传输速度很慢;
2、移植USB虚拟串口,参照360-APP,加上流控制;
3、移植ST官方的基于USART1+ymodem的引导程序,抽取有用部分,如跳转、FLASH清除写保护、FLASH擦除、FLASH编程;
4、引导程序占用32K,占用0x08000000-0x08008000,应用程序大小480K,如果烧录程序时越过边界,会产生不可预料影响,
如引导程序被破坏,应用程序不能正常启动,基于此,引导程序加入了烧录程序大小检查,超过指定大小时,中止会话提示
并烧录失败;此外,解决移植过程中的编译错误,如STM32BootLoader文件夹的包含路径设置为..\.\STM32BootLoader(放在
非中文路径都可以)或e:\STM32BootLoader(只能放在E盘根目录),解决外设库与MDK自带外设库冲突的编译报错;
5、移植uCGUI的6x8和8x8英文字库,加入LCD驱动,背光用IO口直接驱动,并实现LCD显示字符串函数;
6、移植蜂鸣器功能,M25P16驱动,基于SysTick的精确的延时函数;
7、异常程序中,加入关机程序,防止陷入异常导致无法关机;
8、开机按住OK键2秒则认为是正常开机,同时按住left键进入引导程序;进入引导程序后按住right键关机;
9、程序采用最高等级优化,缩小代码空间,更重要的是最高优化等级能提高程序执行速度;
10、应用程序烧录到0x8008000开始处,应用程序编译空间为0x08008000-0x08080000,大小0x78000,480K;
11、引导程序大小为0x4000时,测试OK,定义为0x5000时,测试失败,烧录应用程序后,引导程序也无法运行,估计跟STM32内
部FLASH分区有关系,烧录应用程序时,将引导程序的最末端部分程序擦除了,最后定义为0x8000,稍有点浪费FLASH空间,未
测试0x6000,ST官方的基于USART1+ymodem的引导程序大小为0x2000。
12、烧录注意:超级终端设置为115200、8位数据位、1位停止位、无奇偶校验位、无硬件流控制;用联想笔记本做测试,发现
用JLINK仿真器调试时,zmodem传输速度正常,烧录速度正常,但是不用JLINK仿真器调试时,zmodem速度很慢,数据包频繁出
错,烧录速度很慢,换成台式机USB接收,不用JLINK调试,一切正常。估计跟USB供电能力有关系,笔记本USB电源供电稍差,
台式机正常。插上USB后切换到USB供电,电池则处于充电状态,所以跟电池电量无关系。

烧录演示截图.JPG (60.96 KB )

烧录演示截图.JPG

STM32BootLoader.zip

1.06 MB

沙发
xwhua188| | 2011-12-29 10:24 | 只看该作者
谢谢,是好东西。

使用特权

评论回复
板凳
香水城| | 2012-1-3 18:02 | 只看该作者
鼓励分享!

使用特权

评论回复
地板
xudingguo| | 2012-6-14 10:02 | 只看该作者
无私的奉献,感谢!

使用特权

评论回复
5
wuguoyan| | 2012-6-14 10:55 | 只看该作者
是好东西,谢谢~~

使用特权

评论回复
6
yybj| | 2012-6-14 18:00 | 只看该作者
很好用的引导程序

使用特权

评论回复
7
baidudz| | 2012-6-14 18:06 | 只看该作者
多谢共享,很好的东西

使用特权

评论回复
8
cnyg| | 2013-3-11 18:05 | 只看该作者
好东西

使用特权

评论回复
9
yanupc| | 2013-3-11 19:12 | 只看该作者
很好的程序

使用特权

评论回复
10
zhuxiquan| | 2013-6-19 10:39 | 只看该作者
谢谢分享。

使用特权

评论回复
11
ylzhuai| | 2013-6-21 21:18 | 只看该作者
一定要顶一个!谢谢分享

使用特权

评论回复
12
wangzhihai1986| | 2013-6-22 08:30 | 只看该作者
顶下。

使用特权

评论回复
13
century99| | 2013-10-16 15:59 | 只看该作者
Mark 感谢分享

使用特权

评论回复
14
century99| | 2013-10-18 13:23 | 只看该作者
编译不过有几十条警告,整到最后还有18条搞不了,应该是缺少部分源文件。

使用特权

评论回复
15
nicholasldf|  楼主 | 2015-12-21 16:37 | 只看该作者
century99 发表于 2013-10-18 13:23
编译不过有几十条警告,整到最后还有18条搞不了,应该是缺少部分源文件。 ...

没有吧,,能实现boot的代码全都包含了喔,,警告不用管了:lol

使用特权

评论回复
16
danielyuan2011| | 2016-5-26 22:13 | 只看该作者
多谢分享,好东西

使用特权

评论回复
17
besthuman| | 2016-6-8 13:39 | 只看该作者
thanks for share!

使用特权

评论回复
18
nicholasldf|  楼主 | 2016-10-18 09:51 | 只看该作者
好几个项目又用到这种bootloader

使用特权

评论回复
19
yun_2106118| | 2017-5-27 21:52 | 只看该作者
感谢楼主的无私分享

使用特权

评论回复
20
tanganrong| | 2017-11-29 09:12 | 只看该作者
正在研究YMODEM升级,楼主这个想法不错。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

261

帖子

10

粉丝