Stm8s-IAP-Bootloader设计概要.docx

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Stm8s-IAP-Bootloader设计概要

stm:Bootloader项目介绍在之前的例程和实践中,我们都是使用st-link调试下载的方式进行程序烧录。大家可能已经认识到这种烧录方式的弊端了。因为这种烧录方式首先必须要有以下几个工具或者软件:烧录工具(不能芯片支持的工具不一样,有ST-Link,JTAG等)已经安装了IDE(IAR或者SVD或者CCS等)或者与烧录工具匹配的烧录软件的电脑烧录前后需要物理上电掉电(不建议ST-Link进行热插拔),即开/关电源.也许大家会觉得,对于学习而言,这些都能忍受。但是如果真正做成产品,如果还是用这种方式进行升级,那代价就太大。举个例子吧,我之前的工作是开发和维护大功率的UPS(不间断电源),主要客户是一些大型企业,例如银行的数据中心,中国移动网络中心。UPS内部有许多ARM芯片,DSP芯片。这类应用场合,即便给程序升级,客户也不会让你断电的,而且因为安全性要求,一般MCU,DSP都是在产品内部,根本无法对外开放烧录盒的烧录接口。所以绝大部分嵌入式产品,都会开发Bootloader程序。那么什么是Boot Loader呢?一般来说,嵌入式产品的软件都会分为两部分,第一部分为Bootloader,第二部分为主程序(Main APP),它们存放在flash的不同区域。Bootloader是上电或者复位以后先执行的,通过它,我们可以初始化硬件设备、建立内存空间的映射图,检测程序的完整性,判断是否需要从Bootloader跳转到APP或者更新APP。而主程序呢,则是真正用来实现产品面向客户的功能的。通常呢,在Bootloader会实现一种或者一种以上的IAP方式,可能是UART,SPI,CAN或者Ethernet等。本次例程呢,就是设计一个Bootloader,允许用户用电脑的串口+超级终端实现烧录功能程序流程设计秉承软件开发好习惯,coding前先想好思路,设计好流程框图,coding时才能事半功倍哦。 此次Bootloader程序主要分为三个模式:升级模式Upgrademode:对硬件初始化完成以后,率先检测这个模式,进入该模式的条件为,检测到升级程序的命令,否则进入下一个模式的检测。在这个模式下,LED指示灯闪烁速率最快,为50ms正常模式Normal Mode:这个模式主要作用为检测主程序是否有效,如果有效则进行程序跳转进入主程序,否则进行下一个模式的检测。这边建议在主程序控制LED指示灯以其他的频率(例如500ms或者1s)闪烁,以示区别。等待模式Wait Mode:如果上述两种模式都不满足,则停留在这个模式。这个模式主要作用为循环检测串口数据,如果有收到数据则进行解析,满足升级模式的进入条件则转到升级模式。该模式下,LED指示灯闪烁速率为200ms。程序流程框图如下:正常模式从之前的程序流程图可以看出,我们已经将stm8s的flash分为了Bootloader和Main APP,所以如果没有接到烧录指令且Main APP的flash区域已经有了正常的程序,那么bootloader就跳转到Main APP执行。那么怎么判断Main APP已经有了程序了呢?这边我提供一个比较简单方法。我们可以在Main APP的代码中,把某串特定的字符通过伪指令放入特定的地址,那么Bootloader只要读取该地址与预先规定好的字符是否一致。一致的话则认为Main APP存在。本次实践,我在Main APP中将“XLXWW”字符放入flash的0x9180地址中。当然如果对安全性要求更高的话,我们还可以定义更复杂的方式。业内比较通用的方式是除了刚才提到的方法,还会加上将整个Main APP的flash的值进行checksum校验等。升级模式升级指令会在在两种情况下收到:芯片内部只有bootloader芯片有bootloader和Main APP,且当前程序跑在Main APP。这种情况下,我们在跳转会Bootloader前需要先将这个信息写入EEPROM,bootloader才知道需要升级程序下面定义了升级模式过程中的步骤:如果之前未初始化UART,则首先初始化UART的配置;上位机(PC)通过串口发送询问请求,包括系统型号,程序版本等信息,Bootloader根据自己的信息回复,如果上位机认为匹配成功,则进行下一步上位机根据烧录文件的信息,发送开始烧录请求,请求包中包含了需要擦除的地址段。Bootloader根据上位机的请求,擦除对应地址的flash,成功后回复ok上位机分段将flash的Data传送给你Bootloader,Bootloader将数据依次写入Flash空间所有数据烧写完成后,上位机开始请求验证flash数据是否被正确写入。此时Bootloader分段读取flash数据,发送给上位机,上位机收到数据后与原始烧录文件的数据做对

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档