bootloader和串口烧写

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

条件:

STM8用串口烧码是利用了BootLoader的功能,所以要想用串口烧码就必须让STM8运行BootLoader

问题:

目前网上的贴有不完美的地方,一个新片,ROP(就是读保护)是使能的, 而BootLoader是关闭的。由于新片用户有一次机会用串口烧一次码,于是网上流传一段程序,让用户第一次烧这个码,将BootLoader使能,然后声称今后就可以一直用串口烧了。但仔细看手册就会知道,STM8今后(不是新片第一次)运行BootLoader的必要条件是一定要把ROP关掉,否则无论你使能BootLoader没有,STM8均不会去运行BootLoader。

修改ROP的方法:

要想关掉ROP,必须将ROP写成0xAA,而写ROP必须用SWIM口写,用串口是修改不了ROP的。用SWIN口就逃不开买ST-Link或其他遵守SWIM 协议的编程器。于是问题变成要想用串口烧码就必须用一次ST-Link,请问有了ST-Link何必再用串口烧码?用户希望用串口开发就是希望不买ST-Link吧?

学习:

我将BootLoadr运行机制翻译如下(见手册UM0560的Figure 1):

STM8上电后先查8000H的内容如果8000H的内容是82H或ACH,表示已有程序也就是烧过码了,这时如果BootLoader没使能,程序就跳到8000H,开始运行你的程序,这种情况无法用串口烧码。

如果BootLoader使能了,STM8就去查看ROP,如果ROP是使能的,也跳到8000H,开始运行你的程序,这种情况还是无法用串口烧码。

如果ROP关闭,STM8才跳到BootLoader,你可在一秒钟内用串口进入烧写程序。

另外一种可能是上电查8000H的内容是空的,或者不是82H或ACH,这时UM0560的描述有点矛盾,Figure 1说还是要查ROP,然后决定运不运行BootLoader,而Table 1说是只要内容是空的,或者不是82H或ACH,STM8就会运行BootLoader(我一直怀疑ST的手册都是印度人写的,语法很怪,描述模棱两可的地方很多)。

但我觉得这两种方式,对我们用串口烧玛都没有意义,我们用串口烧码来开发,就是把前面的内容修改为新的内容,怎么可能每次都是空的呢?难道烧前先全片擦除?但全片擦除也要先进入BootLoader啊?所以空片进不进BootLoader对我们开发没有意义。

解决的方法:

实际上,网上流传的那段程序是有缺陷的,烧它无法做到真正的不买ST-Link就可用串口来开发STM8,你必须先用ST-Link将ROP关掉(写入0xAA)。实际上参考UM0560附录A的说明,在自己的软件最前面加一段跳转到BootLoader的程序就可以了。使不使能BootLoader关不关闭ROP都没所谓,只要抓住新片可用串口烧一次码的机会,将这样的码烧入就可以了。

建议:

可用一个管脚来控制,上电时STM8先查这个脚的电平,如果为低电平就跳到BootLoader,这不会浪费STM8的脚,因为这个脚只在上电时查看一次,上电后你还是可以拿他做输出(做输入不好),你的系统不可能一个输出脚都没有吧?这种方法上电快,不会造成上电延迟。实在不想拿出一个脚来做上电[判断,也可用另一个方法:记数,让程序在上电后跳到BootLoader一次或两次,因BootLoader每次会等一秒钟,所以这种方法会造成每次开机都要延迟一段时间,但不需要去将一个什么脚接地,连RESET开关都不需要,这种方法对连续烧码十分方便。

正式出产品时,可将这段码放在最前面,但会不会造成容易被破_解,就需要大家讨论了。UM0560的建议是希望加个密码什么的验证一下,防止有心人任意进入BootLoader,在你的码里加个木马,读出你的内容.

相关文档
最新文档