打印
[STM8]

发个占用资源少的STM8 bootloader

[复制链接]
楼主: way2888
手机看帖
扫描二维码
随时随地手机跟帖
41
way2888|  楼主 | 2015-9-6 21:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
LZJ361155817 发表于 2015-9-4 10:49
谢谢!一大早登上论坛,看到前辈您的回复非常开心!您的代码非常高效好用,您对底层的了解一定非常透彻并 ...

1.因为要达到代码最小化,所以有的工作是交到PC端软件完成,所以这个BOOT必须配套软件使用,AACC,CCDD是由软件固定发送的,你如果改的话必须MCU和VB都要更改
2.其实还有4字节改变,而不是2字节,这是记录用户的复位向量,而0x8000的复位向量只能指向LOADER
3.这个做法就是我最初做的那样,V3.0版本,这样做不是很安全,当升级失败的话,可能再无办法进入LOADER了,现在的是改进了,即使升级失败,也不会进入不到LOADER
4.通信协议很简单,简单的乒乓应答模式,你对照VB和BOOT之间的应答就知道了

使用特权

评论回复
42
LZJ361155817| | 2015-9-8 16:32 | 只看该作者
way2888 发表于 2015-9-6 21:12
1.因为要达到代码最小化,所以有的工作是交到PC端软件完成,所以这个BOOT必须配套软件使用,AACC,CCDD是 ...

今天看您boot工程的代码,因为不懂VB,上位机发送数据处理没能看懂。
监控了串口数据,发现如果hex文件的中有0xCC这个数据时,上位机处理是先发0xEE,再发0xEC,然后下位机判断处理得知这是一个0xCC。如果hex文件数据里面含有0xEE呢,我也改了个hex文件试了,上位机会处理会发送0xEE 0xEE 。对于数据中包含关键词字节数据的,都会在其前面发一个0xEE。
1:那么上位机会处理哪些关键词数据的?除了0xEE还有0xCC,应该还有0xAA吧?还有哪些呢?
2:0x8000开始的第一个block是用的字编程,其后才用的block编程。为什么不全部用block编程呢?
3:代码中FLASH块编程之后 有“ obj->Addr+= obj->BlockSize;",但是Addr不是每次接受且校验完成都会被更新吗?会发挥实际作用吗?

使用特权

评论回复
43
way2888|  楼主 | 2015-9-8 19:37 | 只看该作者
LZJ361155817 发表于 2015-9-8 16:32
今天看您boot工程的代码,因为不懂VB,上位机发送数据处理没能看懂。
监控了串口数据,发现如果hex文件的 ...

1.AA转义为EE EA ,CC转义为EE EC,EE转义为EE EE
2.为的是不擦除0x8000前4字节,保证复位必须跑到loader里
3.S103时一次下载有2个BlockSize

使用特权

评论回复
44
mailbomd| | 2015-9-16 21:14 | 只看该作者
感谢楼主在此坛也共享这个,***把我帐号删除了之后很久没有见过如此实用的东西了

使用特权

评论回复
45
LZJ361155817| | 2015-9-18 11:16 | 只看该作者
楼主大神,向您请教一个问题。用您的方案已经很好并且成功了。但因为MCU空间充足并且想要把IAP功能集合到一个工程。我还想尝试以下不同方案。需重定位中断向量地址,需配置IAR的icf文件将地址分段。
0x8000-0x807F 为region vectitt , 对应放置跳转到重定义的中断向量地址0x9000-0x907f。
0x8080-0x8FFF  为region iaprom,对应iap相关的loader代码处理。
0x9000-0x907f  为region  revector ,为重定义的中断向量地址
0x9080-0xFFEF  为region  rom ,对应app功能区代码
0xFFF0-0xFFFF   为region  iapdoneflag ,对应存一个标志来判断是要跳至iap还是app.

重定义中断向量时我用了以下代码:
__root const long reintvec[] @ ".intvec"=
{ 0x82008080,,0x82009004.....};

在icf文件中对应有修改如下:
define region vectitt = [from 0x8000 to 0x807F];
define region IapRom = [from 0x8080 to 0x8FFF];
define region Revectit = [from 0x9000 to 0x907F];
define region Rom = [from 0x9080 to 0xFFEF];
define region IapFlag = [from 0xFFF0 to 0xFFFF];
define region NearFuncCode = [from 0x9080 to 0xFFEF];
define region FarFuncCode = [from 0x9080 to 0xFFEF];
define region HugeFuncCode = [from 0x9080 to 0xFFEF];

define block INTVEC with size = 0x80 { ro section .intvec };    //用此三行编译无法通过!
define block INTVEC with size = 0x80 { ro section .intvec };   //用此三行编译无法通过!
place at start of vectitt  { block INTVEC };                            //用此三行编译无法通过!

屏蔽以上三行,改用:
place at start of vectitt      { rw section .intvec };      //则编译可以通过
编译可以通过,但是编译出来却不是我想要的,0x8000-0x8080之间竟然是空的!
我重定位的地址向量(82008080等)被写到FarFuncCode 这段空间里面去了。

我以为的理想状态应该是0x8000-0x807F之间被填充为82008080,82009004,。。。

要怎样修改icf文件实现想要的功能呢???还请大神赐教!

使用特权

评论回复
46
尘封的双眸| | 2015-9-28 19:19 | 只看该作者
楼主附件app工程中,入口地址是否有误???#define BOOT                (u32) (0x8000+FLASH_SIZE-4)
if(Sbuf==0xa5) _run(BOOT);
复位地址是FFFC。
但loader工程的hex文件中FFFC是跳转到FF0C,FF0C地址在loader工程仿真如截图。
复位地址应该是FF1F才对吧?!


QQ截图20150928191101.png (53.1 KB )

loader仿真截图

loader仿真截图

2.png (19.79 KB )

loaderhex文件截图

loaderhex文件截图

使用特权

评论回复
47
DIYfashaoyou| | 2015-11-12 16:32 | 只看该作者
顶,下载下来学习一下  !大谢楼主

使用特权

评论回复
48
foxglove| | 2015-11-12 16:38 | 只看该作者
STM8 bootloader

使用特权

评论回复
49
wode112233| | 2015-11-13 11:15 | 只看该作者
学习了

使用特权

评论回复
50
951478331| | 2015-12-6 20:05 | 只看该作者
您好,我正在使用您的串口BOOT  不知为什么,上位机一直提示通信超时,检查连线,我已经检查过了,线路没有问题,下位机使用的你提供的STM8F103的,直接刷,但是依旧没有任何反应,能不能帮助一下,谢谢

使用特权

评论回复
51
cox__w| | 2015-12-7 15:42 | 只看该作者
谢谢分享,去***下载

使用特权

评论回复
52
chj123758| | 2015-12-10 15:44 | 只看该作者
久旱逢甘霖,谢谢大能。谢谢way2888

使用特权

评论回复
53
巴了吧| | 2015-12-25 09:07 | 只看该作者
请问一下楼主,stm8有BOOT引脚吗?可不可以通过外部短接来使能他的isp功能那?!

使用特权

评论回复
54
994560847| | 2016-5-8 18:11 | 只看该作者
非常好的学习资料,给楼主32个赞。

使用特权

评论回复
55
wingis| | 2016-11-28 18:48 | 只看该作者
好东西谢谢分享!!

使用特权

评论回复
56
changjianqiyuan| | 2017-3-7 14:40 | 只看该作者
学习            

使用特权

评论回复
57
jiayong612| | 2017-4-30 09:23 | 只看该作者
谢谢分享!

使用特权

评论回复
58
josonxie| | 2017-4-30 23:51 | 只看该作者
make!!!!

使用特权

评论回复
59
iloveh| | 2017-6-11 16:46 | 只看该作者
刚好要用到BOOTLOADER。学习下下

使用特权

评论回复
60
qingyu_lv| | 2017-7-24 14:13 | 只看该作者
正好需要 我看看有问题没  谢了 借鉴一下

使用特权

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

本版积分规则