乐山

穷则独善其身,达则兼善天下。
四轴论坛:thetravels.top。刚刚开通,希望大家多多支持

USBS移植 STM32F4 NO1:写在动手之前

USBS移植 STM32F4 NO1:写在动手之前


                                                                             -------- 转载请注明出处
                                                                             -------- 更多笔记请访问:merafour.blog.163.com 

                                                                             -------- 2015-6-15.冷月追风

                                                                             -------- email:merafour@163.com 


资料下载:https://yun.baidu.com/s/1sjnzffn#path=%252FRelease
    USBS最初是笔者基于 STM32F103系列开发出来的一个 bootloader,通过把设备做成一个USB接口的存储设备即U盘从而摆脱以往升级固件过程中所需要的上位机跟驱动(即免驱)。USBS全称是:"USB Storage",具有一下特点:

        一、只要你的操作系统支持 U盘原则上都可以使用,目前已经测试了 Windows、Ubuntu跟苹果;
        二、可通过 PC端软件配置所使用的 IO并设置其余 IO的默认输出,也就是说检测 IO跟 LED指示 IO用户可以自定义;
        三、自带不依赖外部 EEPROM的加密算法, 32B加密数据确保程序读到另外一颗 IC上不能运行;
        四、为 App提供单独的加密算法(32B),用户可通过 PC软件设置加密 "licence"。

    前我在 STM32F103平台实现 USBS的时候我以为 F4跟 F103是能够通用的,所以当时并没有在 F4平台上进行测试,其实当时我手上也没有 F4的板子可供测试,于是这事就一直耽搁了。而现在,我由于个人的原因要辞职去旅行了,于是决定借 STM32F4 平台写下完整的 USBS移植教程,毕竟作为 USBS的设计者我希望她被使用在更广的平台以及更多的产品当中,我觉得 USBS应该像 DFU一样最后演变成一种升级标准,而不是具体某一个产品中的 bootloader。关于旅行结束我目前并没有任何打算,毕竟我并不是去一两天,也不是一两个礼拜。在地图上粗略地测量了一下把全国都走一边行程在三万公里以上,所以一年是必须的。而在旅行开始之后我不太可能给大家提供 USBS移植方面的帮助,特别是涉及到代码调试的,所以我希望我的教程能够尽可能地详细。在写教程之前我已经基于开发板的代码跟 ST的库移植了两遍,现在是第三遍了,希望大家跟移植的时候能够一帆风顺。

    移植过程中涉及到的一些技术是如:段、链接文件,是传统Windows环境单片机开发所不需要涉及的,所以大家在调试代码的时候,特别是移植到一个新的平台需要有足够的耐心。很多问题可能你根本就找不到参考资料,你只能自己去分析,比如在移植到 F4平台的时候,由于 F4的 Flash扇区太大,我不得不把代码放到 RAM中去运行,不是通过工具在 RAM中调试代码,而是让代码正常运行的时候就跑在 RAM当中。最开始在做的时候我也是一片茫然,可是网上并没有找到资料,于是也就只好自己分析解决问题了。

    实 Bootloader最根本的功能就两个:下载固件跟引导固件,其它的都是辅助功能。个人是这么理解的。所以你只要实现了这两个功能你就实现了一个 Bootloader。而 USBS在这两个基本功能上与我们之前使用的如 DFU最大的不同在于下载固件的方式。其基本思路是:我们既然可以将 SD卡在电脑上挂载成一个 U盘,那么将 SD卡换成片内 Flash就可以用 U盘的方式将数据拷贝到 Flash中,而拷贝的这个文件如果是一个程序,那么我们就实现了程序的下载,从而拜托了繁琐的上位机。这是 USBS下载固件思路,大家一定要牢记!然后就是 USBS的流程图,还有一些额外的知识需要了解。而回过头来看 USBS,站在传统 Windows环境下单片机开发这的角度看,很多都是技巧性的东西,这些技巧也许你一辈子都不会用到,但却可以加深你对于程序本身的理解。

    了段跟链接文件之外汇编基础也是需要的,至少要能够看得懂启动代码,并且会简单修改。然后我们还需要学会看一个文件:*.map,这是我们在移植过程中很重要的一个文件,特别是后面要把端口配置跟加密移植进去的时候 map文件尤其重要,因为很多问题直接通过 map文件就可以找出来。

    面我们来看下 USBS的流程图:

USBS移植 STM32F4 NO1:写在动手之前 - Lonelys - 徒留我孤单在湖面成双

 


 

 

不过有一点,流程图归流程图,我们具体在实现的时候不必完全按流程图的先后顺序一步一步去实现,而是应该由易到难从简单的功能开始最终完成整个流程图。当然这个需要你对于 USBS的整个流程相当熟悉。

    植是基于 ST的库的,这个可以自行到 ST官网下载,或者有开发板的开发板光盘里边应该都会有,或者直接下载我到时候提供的 USBS_F4的源码。

    F103平台开发出来的 USBS之所以不能够运行在 F4平台很重要一个原因在于 Flash不一样了,我们可以打开数据手册看下两者的扇区有什么不一样:

USBS移植 STM32F4 NO1:写在动手之前 - Lonelys - 徒留我孤单在湖面成双

 
------------------------------------------------------------------------------------------------

USBS移植 STM32F4 NO1:写在动手之前 - Lonelys - 徒留我孤单在湖面成双

 

所以通过这两张表对照我们就发现,USBS 不管是加密还是升级固件的时候都会把自己的代码给擦掉,那么程序肯定是不能够正常运行的。而且这么大的扇区如果代码在 Flash中运行加密肯定也没法做,因为你会很容易把正在执行的代码给擦除掉,所以在 F4平台我们只能现在把程序放在 RAM中运行,除非我们放弃加密!但是我肯定不愿意这么干!

    另外,在时钟方面 F4其实跟 F103也不完全一样, F103最高 72MHz,USBS跑 48MHz(内振只能到48M),但是 F4可以跑到 168MHz,内振也可以跑这么高,所以 USBS在 F4上依然使用内振但跑的是 168MHz。当然这些都是体外话,下面我们就来开始在 F4平台上移植 USBS。

评论