SiliconLabs/C8051F Bootloader问题,有搞过的大神么?

[复制链接]
2823|25
手机看帖
扫描二维码
随时随地手机跟帖
hzocce|  楼主 | 2018-4-8 20:19 | 显示全部楼层 |阅读模式
本帖最后由 hzocce 于 2018-4-9 11:43 编辑

按我的理解,做单片机的Bootloader应该分为2部分。
1.是Bootloader引导部分,单独一个工程,单独一个HEX文件,也就是在此部分中,做一步步的程序CODE搬运工作,讲CODE往单片机的FLASH中写入,擦出,写入,直到写完为止,然后调到正常的程序启动。
2.另外就是用户正常的程序部分,也是单独一个工程,单独一个HEX文件。
  此文件,Uart,CAN,USB或者其他的通讯中断中,有一个判断,接到某一条命令,就将程序跳转到bootloader区;
这样的理解应该是对么?

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

可是问题来了:
1.  分2次下载HEX文件?
2.  2个HEX的起止地址是不同的,可是如何分开这个地址呢?
3.  是在编译之前在KEIL 的魔法棒"option for target"里面设置好么?
4.  还是是下载的时候在"option for target"中的设置?
5.  里面有一个BL51 Locate,还有一个BL51 Misc, 在哪里设置?
6.  是不是下载2个HEX文件,都是重复上次的地址设置动作?
7.  后面在更新用户程序的时候,是不是直接在Uart,CAN, USB工具中,直接点击发送HEX文件就可以么?

以上困惑,麻烦各位热心肠坛友指点指点,谢谢~~~~~~

相关帖子

xuyaqi| | 2018-4-8 20:37 | 显示全部楼层
flash.png
仔细看这一部分

使用特权

评论回复
linqing171| | 2018-4-8 21:17 | 显示全部楼层
1 可以分两次,先下boot,再用boot下载主程序。也可以把两个hex合并为一个,把前面的那个的最后一行删了。
2 hex文件的每行都包括地址。
3 是的。
4 不是。
5 都可以。
6 用keil下载的话,别选全擦。
7 是的
官方有教程。想起来十几年前第一次做bootloader,也是看着atmel官方的文档做的。先拿官方的例子练手。

使用特权

评论回复
hzocce|  楼主 | 2018-4-9 10:10 | 显示全部楼层
谢谢楼上2位大师的耐心回复。
这样的话,为什么我这样定位,却报错呢?

CAN_BL.png

CAN Bootloader.pdf

128.94 KB

使用特权

评论回复
hzocce|  楼主 | 2018-4-9 10:21 | 显示全部楼层
还有个问题是,如果在XX_Starup.A51文件中,已经定位了地址,是不是就不需要在Keil的"option for target"选项卡中的A51.Locate或者A51 Misc中设置了?
这3个定位多是同等效果????

使用特权

评论回复
linqing171| | 2018-4-9 16:57 | 显示全部楼层
不是。
你的startup那段代码放什么地址,和其他的c语言链接的时候放它前面还是后面,这两者没有任何关系。
所以都需要指定地址。如果有中断向量迁移的话,还需要额外设置。

使用特权

评论回复
hzocce|  楼主 | 2018-4-9 18:05 | 显示全部楼层
本帖最后由 hzocce 于 2018-4-9 18:42 编辑

谢谢!

1.-----------------------------------------------------------------还有一个问题,bootloader引导程序中,话说不使用中断的办法,
可是在Stattup.A51为什么还有这些话,做何用意呢?

PUBLIC START_APPLICATION            ;The entry point (relocated reset vector)
START_APPLICATION     EQU  0600h    ;for the application FW project

INTVEC_TABLE          EQU  START_APPLICATION+3  ;Interrupt vector table starts here
INTVEC_SEPARATION     EQU  3        ;Interrupt vector separation is 3 Bytes

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 0)  ;03h (Intr. 00)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 0)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 1)  ;0Bh (Intr. 01)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 1)

     CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 2)  ;13h (Intr. 02)
     AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 2)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 3)  ;1Bh (Intr. 03)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 3)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 4)  ;23h (Intr. 04)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 4)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 5)  ;2Bh (Intr. 05)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 5)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 6)  ;33h (Intr. 06)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 6)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 7)  ;3Bh (Intr. 07)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 7)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 8)  ;43h (Intr. 08)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 8)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 9)  ;4Bh (Intr. 09)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 9)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 10) ;53h (Intr. 10)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 10)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 11) ;5Bh (Intr. 11)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 11)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 12) ;63h (Intr. 12)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 12)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 13) ;6Bh (Intr. 13)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 13)

      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 14) ;73h (Intr. 14)
      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 14)



2-------------------------------------------------------------------------------------------------------------

  还有一个问题就是如果Boot从0地址开始,APP从0x0600开始。
  如果Boot程序执行完后,通过一个这样一句话:  (*((void (*)())0x0600))();
  而APP又没有写入,这样的话,是不是一直停顿在那里?如果Boot有一个死循环的话。

3.换句话的意思,就是boot中只有有一句话  (*((void (*)())0x0600))();0x0600开始执行用户的程序?
如果APP中只要有一句话  (*((void (*)())0x0000))(); 又跑到boot里面去了?

使用特权

评论回复
ningling_21| | 2018-4-9 18:58 | 显示全部楼层
hzocce 发表于 2018-4-9 18:05
谢谢!

1.-----------------------------------------------------------------还有一个问题,bootloader ...

上电就从0地址进入boot,再根据情况跳转到APP或者其它

使用特权

评论回复
linqing171| | 2018-4-9 20:29 | 显示全部楼层
hzocce 发表于 2018-4-9 18:05
谢谢!

1.-----------------------------------------------------------------还有一个问题,bootloader ...

1 中断二级跳,跳应用程序那里。不过应用程序需要在C51里面设置中断的vector的offset。
2 如果App没有写入,跑过去可能那边都是 0xFF 对应着反汇编是 MOV A,R7 好像是。执行一会地址溢出就又回到0了。
3 是的

使用特权

评论回复
hzocce|  楼主 | 2018-4-10 08:20 | 显示全部楼层
如何读取FLASH内容?

这样的话,先下在BOOT时候,都出来,原来的内容。
然后再下载APP程序,再读取出来内容。

查看原来的Boot是否有有被APP下载时候擦除了。

下载出来如何看地址对应的内容?

我目前在做Bootloader这一块。还需要各位再次指导一下。

使用特权

评论回复
hzocce|  楼主 | 2018-4-10 14:25 | 显示全部楼层
还有就是下载HEX的时候,是哪个工具?
可以直接用Keil 里面的DownLoad按钮么?不会把别的一起给擦除了?

使用特权

评论回复
ningling_21| | 2018-4-10 16:49 | 显示全部楼层
hzocce 发表于 2018-4-10 14:25
还有就是下载HEX的时候,是哪个工具?
可以直接用Keil 里面的DownLoad按钮么?不会把别的一起给擦除了?[em ...

keil 也可以下载,也可以找个串口调试工具软件
用KEIL下载可以不擦除整个芯片

使用特权

评论回复
hzocce|  楼主 | 2018-4-10 16:58 | 显示全部楼层
ningling_21 发表于 2018-4-10 16:49
keil 也可以下载,也可以找个串口调试工具软件
用KEIL下载可以不擦除整个芯片 ...

那如何设置?

我只要一下载,就把前面的擦除成FF了!

使用特权

评论回复
ningling_21| | 2018-4-10 16:59 | 显示全部楼层
hzocce 发表于 2018-4-10 16:58
那如何设置?

我只要一下载,就把前面的擦除成FF了!

试试 改变程序的下载起始地址

使用特权

评论回复
hzocce|  楼主 | 2018-4-10 17:14 | 显示全部楼层
ningling_21 发表于 2018-4-10 16:59
试试 改变程序的下载起始地址

哪个地址设置下载的起始地址?啊?

使用特权

评论回复
hzocce|  楼主 | 2018-4-11 08:31 | 显示全部楼层
还有个问题就是,
在BOOT程序中,如何解析HEX文件,解析出来,才可以知道放哪里,放什么数据。

使用特权

评论回复
WoodData| | 2018-4-11 10:00 | 显示全部楼层
这有个C8051F的bootloader**,你可以参考理解一下。
c8051f_bootloader.zip (5.85 KB)

使用特权

评论回复
ningling_21| | 2018-4-11 10:50 | 显示全部楼层
hzocce 发表于 2018-4-10 17:14
哪个地址设置下载的起始地址?啊?

QQ图片20180411100758.png

一般是这个地方

使用特权

评论回复
hzocce|  楼主 | 2018-4-11 16:03 | 显示全部楼层
谢谢各位的回复,
现在虽然没有搞完全懂,

但是基本都了解了!一边搞一边学把!

使用特权

评论回复
hzocce|  楼主 | 2018-4-12 08:07 | 显示全部楼层
别沉下去了!

使用特权

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

本版积分规则

127

主题

561

帖子

4

粉丝