hdd961140543 发表于 2012-3-25 20:54:41

分享简单的C8051F020通过串口下载程序的方法

本帖最后由 hdd961140543 于 2012-3-25 20:54 编辑

最近在开始学习C8051F单片机,没办法因为导师用的是这款单片机。项目中需要用到远程更新固件的功能,所以在网上找到了C8051F单片机串口下载的bootloader,修改之后就成功的用在了C8051F020这款单片机上。而且这种方式也可以扩展到其它具有IAP(在应用中可编程)功能的单片机上。

这个是我写的bootloader代码,编译软件Keil4.00,为了尽量精简,我将所有代码都放在了一个main.c的文件里。
Keil中工程需要将代码存放位置设置一下,start地址就是boot程序区的起始地址,size大小就是你的boot代码编译后的大小,当然需要预留一些空间。

实际使用了772个字节,而预留了3K


为此我还编写了一个简单的VB上位机的下载程序,基本功能已经可以实现。由于本人主学硬件,VB仅仅是菜鸟级的,所以VB软件还有很多BUG,请大虾就不要拍砖了。

上位机还有几个功能我还没有做到:
1、自动装载hex文件
2、显示下载进度
3、下载计数功能
请有兴趣的大虾帮忙完善一下,分享给大家





LSZD 发表于 2012-3-25 21:09:12

我给你顶起

hdd961140543 发表于 2012-3-25 21:26:31

LSZD 发表于 2012-3-25 21:09 static/image/common/back.gif
我给你顶起

谢了!10Byte!

yanjs1016 发表于 2012-3-25 21:28:48

没有用过,来了也顶一贴。

xuyapple 发表于 2012-3-25 23:28:11

谢谢楼主分享,帮你顶!

ndt2000 发表于 2012-3-26 01:13:16

这个要顶,学习用一下

ju748 发表于 2012-3-26 01:15:53

相当好的资料,感谢楼主的奉献,原厂给的真的太垃圾了…

trent5145 发表于 2012-3-26 01:29:10

这个要顶,好东西呀,呵呵~

nongxiaoming 发表于 2012-3-26 02:18:56

不错的东西~~~

hdd961140543 发表于 2012-3-26 09:49:07

ju748 发表于 2012-3-26 01:15
相当好的资料,感谢楼主的奉献,原厂给的真的太垃圾了…

谢了,我这个其实也很简单,每次下载都会把用户flash全部擦掉

52avr 发表于 2012-3-26 10:14:10

mark mark

jetli 发表于 2012-4-2 20:45:05

牛。用vb做的下载软件

lijinen 发表于 2012-5-27 16:23:43

谢谢楼主分享,收藏了!

cyq001 发表于 2012-5-28 09:47:38

我也给你顶起

scdydy 发表于 2012-5-28 21:35:42

感谢无私奉献,这在某些要求比较特殊的项目中很实用

XA144F 发表于 2012-5-30 09:50:34

串口下载器 有没有编译好的程序?我的在电脑上打开出现错误。

hdd961140543 发表于 2012-5-30 09:55:13

XA144F 发表于 2012-5-30 09:50 static/image/common/back.gif
串口下载器 有没有编译好的程序?我的在电脑上打开出现错误。

在 串口下载器\串口下载器\obj\Debug 里面有个应用程序就是了

XA144F 发表于 2012-5-30 11:14:33

试验了,显示警告信息:应用程序初始化失败……

hdd961140543 发表于 2012-5-30 13:05:23

XA144F 发表于 2012-5-30 11:14 static/image/common/back.gif
试验了,显示警告信息:应用程序初始化失败……

这个就不清楚了
我把它生成了一个安装包,你试着安装一下,看看,实在不行就这有安装VB2008了

.

XA144F 发表于 2012-5-31 09:14:57

问题解决了,安装DotNetFX3,运行没问题,今天回去试试。

anning 发表于 2012-10-19 14:03:47

hdd961140543 发表于 2012-5-30 13:05 static/image/common/back.gif
这个就不清楚了
我把它生成了一个安装包,你试着安装一下,看看,实在不行就这有安装VB2008了



楼主,我的电脑win7系统,但是点击安装后,再打开程序,始终没有任何显示啊。

hdd961140543 发表于 2012-10-19 14:40:09

anning 发表于 2012-10-19 14:03 static/image/common/back.gif
楼主,我的电脑win7系统,但是点击安装后,再打开程序,始终没有任何显示啊。 ...

我的也是win7

anning 发表于 2012-10-19 15:58:15

hdd961140543 发表于 2012-10-19 14:40 static/image/common/back.gif
我的也是win7

那看来只能装个VS2008试试了。我电脑本身装的是VS2005。真希望有高手可以把这个上位机再做一做,可惜我本身不懂上位机。

xyz2008 发表于 2012-11-2 11:49:53

楼主的东西怎么用,能否写个简单的教程传上来

yklstudent 发表于 2012-11-2 12:53:32

楼主 你这个上位机是使用什么版本的VB写的 我的VB6.0没法识别啊

hdd961140543 发表于 2012-11-2 14:43:24

yklstudent 发表于 2012-11-2 12:53 static/image/common/back.gif
楼主 你这个上位机是使用什么版本的VB写的 我的VB6.0没法识别啊

用的VS2008,VB.net,FrameWork3.5框架。

yklstudent 发表于 2012-11-2 15:13:04

hdd961140543 发表于 2012-11-2 14:43 static/image/common/back.gif
用的VS2008,VB.net,FrameWork3.5框架。

恩 谢谢了 回去晚上装VS2008试试

xyz2008 发表于 2012-11-7 11:37:13

楼主,先用仿真器 把你的BootLoader下载到我板子里面,那我要不要改我的程序编译项的设置啊
我用仿真器烧完你的BootLoader,直接拿你的上位机软件,下载不了啊

hdd961140543 发表于 2012-11-7 13:03:40

xyz2008 发表于 2012-11-7 11:37 static/image/common/back.gif
楼主,先用仿真器 把你的BootLoader下载到我板子里面,那我要不要改我的程序编译项的设置啊
我用仿真器烧完 ...

用仿真器下载时需要设置下载的位置,start地址就是boot程序区的起始地址,这里我设置了0xf200就是片内flash总大小-预留空间:64K-4K=60K=0xf000
用我的下载软件下就不需要设置了

xyz2008 发表于 2012-11-7 13:14:18

是不是我的程序要这样设置下

xyz2008 发表于 2012-11-7 13:15:45

hdd961140543 发表于 2012-11-7 13:03 static/image/common/back.gif
用仿真器下载时需要设置下载的位置,start地址就是boot程序区的起始地址,这里我设置了0xf200就是片内fla ...

可我设置了,还是不行

xyz2008 发表于 2012-11-7 13:20:04

hdd961140543 发表于 2012-11-7 13:03 static/image/common/back.gif
用仿真器下载时需要设置下载的位置,start地址就是boot程序区的起始地址,这里我设置了0xf200就是片内fla ...

楼主,能否加一下我的QQ,交流下,谢谢2578915805

xyz2008 发表于 2012-11-7 14:12:50

还是没有弄好,那位弄好了,说一声

hdd961140543 发表于 2012-11-7 14:40:16

xyz2008 发表于 2012-11-7 14:12 static/image/common/back.gif
还是没有弄好,那位弄好了,说一声

这个没有难度的,了解一下bootloader的原理,自己就可以写一个简单的了

newidea 发表于 2013-1-8 23:33:03

mark了,最近正在用这个片子

cyq001 发表于 2013-1-9 08:57:06

先顶,后用

bfk2003 发表于 2013-1-12 21:25:55

收藏!!!!!!!!!!!

jacktau 发表于 2013-1-12 21:30:00

谢谢共享,学习一下~~~~~~~~~~~~~~

lukehua 发表于 2013-3-20 13:33:06

有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.ArgumentOutOfRangeException: InvalidArgument=“0”的值对于“SelectedIndex”无效。
参数名: SelectedIndex
   在 System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
   在 串口下载器.Form1.Form1_Load(Object sender, EventArgs e)
   在 System.EventHandler.Invoke(Object sender, EventArgs e)
   在 System.Windows.Forms.Form.OnLoad(EventArgs e)
   在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   在 System.Windows.Forms.Control.CreateControl()
   在 System.Windows.Forms.Control.WmShowWindow(Message& m)
   在 System.Windows.Forms.Control.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** 已加载的程序集 **************
mscorlib
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.5466 (Win7SP1GDR.050727-5400)
    基本代码: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
串口下载器
    程序集版本: 1.0.0.0
    Win32 版本: 1.0.0.0
    基本代码: file:///C:/Users/lukehua/AppData/Local/Apps/2.0/L3ZMN5BV.L9P/MHCAMVMJ.3QT/.app..tion_d240d544c810025f_0001.0000_d7a82bc78811cceb/串口下载器.exe
----------------------------------------
Microsoft.VisualBasic
    程序集版本: 8.0.0.0
    Win32 版本: 8.0.50727.5420 (Win7SP1.050727-5400)
    基本代码: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.5467 (Win7SP1GDR.050727-5400)
    基本代码: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Windows.Forms
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.5468 (Win7SP1GDR.050727-5400)
    基本代码: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.5467 (Win7SP1GDR.050727-5400)
    基本代码: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.5420 (Win7SP1.050727-5400)
    基本代码: file:///C:/Windows/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.5420 (Win7SP1.050727-5400)
    基本代码: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Runtime.Remoting
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.5420 (Win7SP1.050727-5400)
    基本代码: file:///C:/Windows/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
System.Windows.Forms.resources
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.5420 (Win7SP1.050727-5400)
    基本代码: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_zh-CHS_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
mscorlib.resources
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.5466 (Win7SP1GDR.050727-5400)
    基本代码: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------

************** JIT 调试 **************
要启用实时(JIT)调试,
该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置
jitDebugging 值。
编译应用程序时还必须启用
调试。

例如:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

启用 JIT 调试后,任何无法处理的异常
都将被发送到在此计算机上注册的 JIT 调试器,
而不是由此对话框处理。

请教下楼主,这个错误是神马情况?

lukehua 发表于 2013-3-20 13:34:30

如果我用串口下载程序的时候覆盖了bootloader的位置就下载不了了吧,那就得常备着仿真器了?

hdd961140543 发表于 2013-3-20 18:16:49

lukehua 发表于 2013-3-20 13:34 static/image/common/back.gif
如果我用串口下载程序的时候覆盖了bootloader的位置就下载不了了吧,那就得常备着仿真器了? ...

是的,不过bootloader设置是不能擦除其所占用的flash区的。

仿真器肯定需要了,这个bootloader很简单的,只能作为学习用

你上面的错误我也不知道为什么,上位机.net仅是初学者

hdd961140543 发表于 2013-3-20 18:17:44

lukehua 发表于 2013-3-20 13:34 static/image/common/back.gif
如果我用串口下载程序的时候覆盖了bootloader的位置就下载不了了吧,那就得常备着仿真器了? ...

是的,不过bootloader设置是不能擦除其所占用的flash区的。

仿真器肯定需要了,这个bootloader很简单的,只能作为学习用

你上面的错误我也不知道为什么,上位机.net仅是初学者

吴杰 发表于 2013-4-13 16:53:03

我最近在想用这个芯片,但是不知道keil3里面怎么写?请教一下,能否告诉一点点!

lbjhdu 发表于 2013-4-15 20:51:45

顶一个再下

那些年华 发表于 2013-4-16 09:45:18

谢谢 下载来看看

陈远鹏 发表于 2013-8-2 21:13:11

顶了!!!!!!!!!!!!!!!!!!!!!!

PCBBOY1991 发表于 2013-8-2 21:47:27

给力,手里有C8051的单片机~

颖风 发表于 2013-8-6 03:14:28

很厉害!顶一下!

xiefy21 发表于 2013-8-14 18:59:09

mark……
顶一个…

c65193145 发表于 2014-1-4 10:08:05

这个很赞……。

changshs 发表于 2014-3-15 13:02:26

学习下!下来看看。

kmzjs 发表于 2014-3-23 12:25:51

以后可能有用,收藏了、谢谢!

孤独飞行 发表于 2014-3-26 16:52:55

if(flash_checksum != 0)校验和=0,难道上位机发送的时候就已经取反了校验和吗?谢谢

Schvian_ 发表于 2014-3-26 18:53:39

顶起。。。我导师也喜欢用C8051F系列的,一般是120,130,126

机器人天空 发表于 2014-3-26 22:03:27

mark。。。。。。

孤独飞行 发表于 2014-3-27 14:35:54

校验出错,请重新下载...

hdd961140543 发表于 2014-3-27 17:08:13

孤独飞行 发表于 2014-3-27 14:35
校验出错,请重新下载...

我很久都没接触这个了,源代码都有的,请自己花点时间分析一下。
当时写的代码现在看来有很多不足之处,请仅作为学习参考之用,实际使用请慎重

isakura 发表于 2014-3-27 22:08:47

相当好的资料,感谢楼主的奉献

isakura 发表于 2014-3-27 22:09:05

相当好的资料,感谢楼主的奉献

LILUOBAO 发表于 2014-4-17 17:43:58

{:smile:}顶下

xuanfong1 发表于 2014-4-22 11:37:22

我看看,看看

随影 发表于 2014-5-5 13:23:32

看起来不错,最近也在玩这个

craigtao 发表于 2014-5-10 18:36:34

载下来了,,,不错,感谢,

MCU开发2014 发表于 2014-6-20 14:49:42

mark mark   

iqxt88 发表于 2014-9-13 14:46:08

good{:smile:} {:smile:}

tohom3a3 发表于 2015-7-29 07:37:45

很给力.谢楼主

vjman1993 发表于 2015-7-29 14:28:45

先标记一下,有空的时候仔细学习!

daiya 发表于 2015-8-1 17:07:46

下载器有校验功能吗?

imbs 发表于 2015-8-1 23:41:45

很好的东西,收藏了,谢谢

deyu35 发表于 2015-10-12 14:25:28

远程升级程序对程序大小有一定限制是吗?我的程序大小是25kB,这样的话就得预留至少25KB的空间了是吗?原来的app也是占用25KB的空间吗?

wkman 发表于 2015-10-12 14:56:22

好久不用c8051的了,貌似记得一个山寨的usb口jtag也就30¥多点{:tongue:}{:titter:}{:victory:}

happy_andy 发表于 2015-10-12 15:54:56

好东东就要顶一顶

sinxcosytana 发表于 2016-1-28 09:54:52

很好 很强大

snowdpq 发表于 2016-10-27 10:48:13

markmark

lujianfeng2001 发表于 2016-11-2 08:33:27

厉害,谢谢分享

dreamboy 发表于 2017-6-5 14:30:06

{:handshake:}

hiya3621 发表于 2019-7-25 14:17:14

以后可能有用,收藏了、谢谢!

anshaoyuan 发表于 2022-1-27 11:53:57

对于将Bootloader放入高地址上,是怎么跳转的呢? 我看首先保存了0,1,2三个地址的内容,在程序擦除App使用的空间后,再下载程序时候首先 恢复保存的0,1,2三个地址的内容。是不是将D_RUN_ADDRESS 的地址存储在了第3个地址处。网上看了很多例子,主要在于设置Keil ,将target-> BL51 loacation ->code range 设置为boot存储的地址0xF200-0xFDFF,然后 将CODE->设置为?C_C51STARTUP(F200)。不知道我的理解对不对。

anshaoyuan 发表于 2022-1-27 12:00:34

对于将Bootloader放入高地址上,是怎么跳转的呢? 我看首先保存了0,1,2三个地址的内容,在程序擦除App使用的空间后,再下载程序时候首先 恢复保存的0,1,2三个地址的内容。是不是将D_RUN_ADDRESS 的地址存储在了第3个地址处。网上看了很多例子,主要在于设置Keil ,将target-> BL51 loacation ->code range 设置为boot存储的地址0xF200-0xFDFF,然后 将CODE->设置为?C_C51STARTUP(F200)。不知道我的理解对不对

jilikang 发表于 2023-11-28 17:11:43

这个代码写的真是简洁又高水准,感谢无私奉献

pll19840511 发表于 2023-11-28 18:50:56

我特么怀疑是不是论坛也搞什么算法了,我10年都不会用C8051F的片子,今天刚搜索,今天就看见了。
页: [1]
查看完整版本: 分享简单的C8051F020通过串口下载程序的方法