关于C8051F单片机的bootloader程序的疑问

时间:2021-05-15 19:17:39
诚请高手指点下:
要实现C8051F020单片机的FLASH在线更新程序,看了好多,有两种方案。
1、很多认为bootloader程序放到高地址0E000H~0FDFDH,然后前面放一上位机握手程序,但是我有疑问,如果上位机发出请求编程跳至引导程序,引导程序将前面0-0DFFFH全部擦除,那握手程序不是没有了?难道要更新的程序中每次都嵌入握手程序一起烧写?
2、很少人认为引导程序放在01000H之前,这样单片机启动就从引导程序启动,与上位机握手程序也放在这里,判断再直接跳入应用程序运行。这种貌似我觉得有点问题,不是中断向量等都是在前面地址么,应用程序放到后面能实现么?
上位机我准备用VB写,貌似很简单的,就是这块bootloader比较不懂,小弟是菜鸟,请求各位高手的援助,非常感谢!

9 个解决方案

#1


51也用bootloader?怀疑中。。。

#2


对你的情况不是十分了解

1、一定要擦除0-0DFFFH?

2、“不是中断向量等都是在前面地址么”,貌似ARM才是这种用法吧,以前用的AVR单片机,Silicon的片子也只是接触了一下,不确定。

#3


因为之前做过一个类似的bootloader,所以忍不住想告诉你,就怕我描述的不够明白。

首先,你需要一个bootloader程序,这个程序在编译连接的时候连接到高地址,比如0xf000;
其次,你要有个通过bootloader下载到单片机中的程序,这个程序编译连接的时候可以连接到0x0地址处;
通过bootloader从上位机下载的程序依次写入0x0地址处,但是要空出第2、3字节不能修改,因为这两个字节代表了bootloader程序的入口地址,如果修改了,单片机上电后就不能运行bootloader程序了
通过bootloader下载完毕后,要跳转到下载程序的入口地址处,执行。

#4


我也忍不住想告诉你,就怕我描述的不够明白。
一般的BootLoder程序都是先把修改自身的代码下载到单片机的RAM中,校验正确以后才运行烧写程序从RAM烧进Flash。

#5


我现在也在试着搞这个,下位机的有点明白,可是上位机的程序我就不知道了,还希望指点。我是吧bootloader放在高地址的,确实有一个不好的地方,如果没有烧成功就完了,现在只是试着学,希望能得到一些帮助

#6


也要开始弄51的bootloader

#7


近来在搞这个厂家的芯片,我采用的芯片是C8051F500可以进行串口升级。
分两个区:
BOOT区为0x0000-0x0fff;
APP区为0x10000-0x6fff;
发觉只要支持IAP的芯片,都可以做到BOOTLOADER升级

#8


嗯 楼上的能不能交流下啊 我在用F410弄bootloader

#9


引用 7 楼 daibolang 的回复:
近来在搞这个厂家的芯片,我采用的芯片是C8051F500可以进行串口升级。
分两个区:
BOOT区为0x0000-0x0fff;
APP区为0x10000-0x6fff;
发觉只要支持IAP的芯片,都可以做到BOOTLOADER升级

是不是在编译APP区的代码的时候要在keil中把code的其实位置放在0x1000处呢?

#1


51也用bootloader?怀疑中。。。

#2


对你的情况不是十分了解

1、一定要擦除0-0DFFFH?

2、“不是中断向量等都是在前面地址么”,貌似ARM才是这种用法吧,以前用的AVR单片机,Silicon的片子也只是接触了一下,不确定。

#3


因为之前做过一个类似的bootloader,所以忍不住想告诉你,就怕我描述的不够明白。

首先,你需要一个bootloader程序,这个程序在编译连接的时候连接到高地址,比如0xf000;
其次,你要有个通过bootloader下载到单片机中的程序,这个程序编译连接的时候可以连接到0x0地址处;
通过bootloader从上位机下载的程序依次写入0x0地址处,但是要空出第2、3字节不能修改,因为这两个字节代表了bootloader程序的入口地址,如果修改了,单片机上电后就不能运行bootloader程序了
通过bootloader下载完毕后,要跳转到下载程序的入口地址处,执行。

#4


我也忍不住想告诉你,就怕我描述的不够明白。
一般的BootLoder程序都是先把修改自身的代码下载到单片机的RAM中,校验正确以后才运行烧写程序从RAM烧进Flash。

#5


我现在也在试着搞这个,下位机的有点明白,可是上位机的程序我就不知道了,还希望指点。我是吧bootloader放在高地址的,确实有一个不好的地方,如果没有烧成功就完了,现在只是试着学,希望能得到一些帮助

#6


也要开始弄51的bootloader

#7


近来在搞这个厂家的芯片,我采用的芯片是C8051F500可以进行串口升级。
分两个区:
BOOT区为0x0000-0x0fff;
APP区为0x10000-0x6fff;
发觉只要支持IAP的芯片,都可以做到BOOTLOADER升级

#8


嗯 楼上的能不能交流下啊 我在用F410弄bootloader

#9


引用 7 楼 daibolang 的回复:
近来在搞这个厂家的芯片,我采用的芯片是C8051F500可以进行串口升级。
分两个区:
BOOT区为0x0000-0x0fff;
APP区为0x10000-0x6fff;
发觉只要支持IAP的芯片,都可以做到BOOTLOADER升级

是不是在编译APP区的代码的时候要在keil中把code的其实位置放在0x1000处呢?