搜索
bottom↓
回复: 80

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

  [复制链接]

出0入0汤圆

发表于 2012-3-25 20:54:41 | 显示全部楼层 |阅读模式
本帖最后由 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、下载计数功能
请有兴趣的大虾帮忙完善一下,分享给大家





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入0汤圆

发表于 2012-3-25 21:09:12 | 显示全部楼层
我给你顶起

出0入0汤圆

 楼主| 发表于 2012-3-25 21:26:31 | 显示全部楼层
LSZD 发表于 2012-3-25 21:09
我给你顶起

谢了!10Byte!

出0入0汤圆

发表于 2012-3-25 21:28:48 | 显示全部楼层
没有用过,来了也顶一贴。

出90入0汤圆

发表于 2012-3-25 23:28:11 | 显示全部楼层
谢谢楼主分享,帮你顶!

出0入0汤圆

发表于 2012-3-26 01:13:16 | 显示全部楼层
这个要顶,学习用一下

出0入0汤圆

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

出0入0汤圆

发表于 2012-3-26 01:29:10 | 显示全部楼层
这个要顶,好东西呀,呵呵~

出0入0汤圆

发表于 2012-3-26 02:18:56 | 显示全部楼层
不错的东西~~~

出0入0汤圆

 楼主| 发表于 2012-3-26 09:49:07 来自手机 | 显示全部楼层
ju748 发表于 2012-3-26 01:15
相当好的资料,感谢楼主的奉献,原厂给的真的太垃圾了…

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

出0入0汤圆

发表于 2012-3-26 10:14:10 | 显示全部楼层
mark mark

出0入0汤圆

发表于 2012-4-2 20:45:05 | 显示全部楼层
牛。用vb做的下载软件

出0入0汤圆

发表于 2012-5-27 16:23:43 | 显示全部楼层
谢谢楼主分享,收藏了!

出0入0汤圆

发表于 2012-5-28 09:47:38 | 显示全部楼层
我也给你顶起

出0入0汤圆

发表于 2012-5-28 21:35:42 | 显示全部楼层
感谢无私奉献,这在某些要求比较特殊的项目中很实用

出0入0汤圆

发表于 2012-5-30 09:50:34 | 显示全部楼层
串口下载器 有没有编译好的程序?我的在电脑上打开出现错误。

出0入0汤圆

 楼主| 发表于 2012-5-30 09:55:13 | 显示全部楼层
XA144F 发表于 2012-5-30 09:50
串口下载器 有没有编译好的程序?我的在电脑上打开出现错误。

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

出0入0汤圆

发表于 2012-5-30 11:14:33 | 显示全部楼层
试验了,显示警告信息:应用程序初始化失败……

出0入0汤圆

 楼主| 发表于 2012-5-30 13:05:23 | 显示全部楼层
XA144F 发表于 2012-5-30 11:14
试验了,显示警告信息:应用程序初始化失败……

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

.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-5-31 09:14:57 | 显示全部楼层
问题解决了,安装DotNetFX3,运行没问题,今天回去试试。

出5入8汤圆

发表于 2012-10-19 14:03:47 | 显示全部楼层
hdd961140543 发表于 2012-5-30 13:05
这个就不清楚了
我把它生成了一个安装包,你试着安装一下,看看,实在不行就这有安装VB2008了

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

出0入0汤圆

 楼主| 发表于 2012-10-19 14:40:09 | 显示全部楼层
anning 发表于 2012-10-19 14:03
楼主,我的电脑win7系统,但是点击安装后,再打开程序,始终没有任何显示啊。 ...

我的也是win7

出5入8汤圆

发表于 2012-10-19 15:58:15 | 显示全部楼层
hdd961140543 发表于 2012-10-19 14:40
我的也是win7

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

出0入0汤圆

发表于 2012-11-2 11:49:53 | 显示全部楼层
楼主的东西怎么用,能否写个简单的教程传上来

出0入0汤圆

发表于 2012-11-2 12:53:32 | 显示全部楼层
楼主 你这个上位机是使用什么版本的VB写的 我的VB6.0没法识别啊

出0入0汤圆

 楼主| 发表于 2012-11-2 14:43:24 | 显示全部楼层
yklstudent 发表于 2012-11-2 12:53
楼主 你这个上位机是使用什么版本的VB写的 我的VB6.0没法识别啊

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

出0入0汤圆

发表于 2012-11-2 15:13:04 | 显示全部楼层
hdd961140543 发表于 2012-11-2 14:43
用的VS2008,VB.net,FrameWork3.5框架。

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

出0入0汤圆

发表于 2012-11-7 11:37:13 | 显示全部楼层
楼主,先用仿真器 把你的BootLoader下载到我板子里面,那我要不要改我的程序编译项的设置啊
我用仿真器烧完你的BootLoader,直接拿你的上位机软件,下载不了啊

出0入0汤圆

 楼主| 发表于 2012-11-7 13:03:40 | 显示全部楼层
xyz2008 发表于 2012-11-7 11:37
楼主,先用仿真器 把你的BootLoader下载到我板子里面,那我要不要改我的程序编译项的设置啊
我用仿真器烧完 ...

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

出0入0汤圆

发表于 2012-11-7 13:14:18 | 显示全部楼层
是不是我的程序要这样设置下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-11-7 13:15:45 | 显示全部楼层
hdd961140543 发表于 2012-11-7 13:03
用仿真器下载时需要设置下载的位置,start地址就是boot程序区的起始地址,这里我设置了0xf200就是片内fla ...

可我设置了,还是不行

出0入0汤圆

发表于 2012-11-7 13:20:04 | 显示全部楼层
hdd961140543 发表于 2012-11-7 13:03
用仿真器下载时需要设置下载的位置,start地址就是boot程序区的起始地址,这里我设置了0xf200就是片内fla ...

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

出0入0汤圆

发表于 2012-11-7 14:12:50 | 显示全部楼层
还是没有弄好,那位弄好了,说一声

出0入0汤圆

 楼主| 发表于 2012-11-7 14:40:16 | 显示全部楼层
xyz2008 发表于 2012-11-7 14:12
还是没有弄好,那位弄好了,说一声

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

出0入0汤圆

发表于 2013-1-8 23:33:03 | 显示全部楼层
mark了,最近正在用这个片子

出0入0汤圆

发表于 2013-1-9 08:57:06 | 显示全部楼层
先顶,后用

出0入0汤圆

发表于 2013-1-12 21:25:55 | 显示全部楼层
收藏!!!!!!!!!!!

出0入0汤圆

发表于 2013-1-12 21:30:00 | 显示全部楼层
谢谢共享,学习一下~~~~~~~~~~~~~~

出0入0汤圆

发表于 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 调试器,
而不是由此对话框处理。

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

出0入0汤圆

发表于 2013-3-20 13:34:30 | 显示全部楼层
如果我用串口下载程序的时候覆盖了bootloader的位置就下载不了了吧,那就得常备着仿真器了?

出0入0汤圆

 楼主| 发表于 2013-3-20 18:16:49 | 显示全部楼层
lukehua 发表于 2013-3-20 13:34
如果我用串口下载程序的时候覆盖了bootloader的位置就下载不了了吧,那就得常备着仿真器了? ...

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

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

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

出0入0汤圆

 楼主| 发表于 2013-3-20 18:17:44 | 显示全部楼层
lukehua 发表于 2013-3-20 13:34
如果我用串口下载程序的时候覆盖了bootloader的位置就下载不了了吧,那就得常备着仿真器了? ...

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

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

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

出0入0汤圆

发表于 2013-4-13 16:53:03 | 显示全部楼层
我最近在想用这个芯片,但是不知道keil3里面怎么写?请教一下,能否告诉一点点!

出0入0汤圆

发表于 2013-4-15 20:51:45 | 显示全部楼层
顶一个再下

出0入0汤圆

发表于 2013-4-16 09:45:18 | 显示全部楼层
谢谢 下载来看看

出0入0汤圆

发表于 2013-8-2 21:13:11 | 显示全部楼层
顶了!!!!!!!!!!!!!!!!!!!!!!

出0入0汤圆

发表于 2013-8-2 21:47:27 | 显示全部楼层
给力,手里有C8051的单片机~

出0入0汤圆

发表于 2013-8-6 03:14:28 | 显示全部楼层
很厉害!顶一下!

出0入0汤圆

发表于 2013-8-14 18:59:09 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2014-1-4 10:08:05 | 显示全部楼层
这个很赞……。

出0入0汤圆

发表于 2014-3-15 13:02:26 | 显示全部楼层
学习下!下来看看。

出0入0汤圆

发表于 2014-3-23 12:25:51 | 显示全部楼层
以后可能有用,收藏了、谢谢!

出0入0汤圆

发表于 2014-3-26 16:52:55 | 显示全部楼层
if(flash_checksum != 0)校验和=0,难道上位机发送的时候就已经取反了校验和吗?谢谢

出0入0汤圆

发表于 2014-3-26 18:53:39 | 显示全部楼层
顶起。。。我导师也喜欢用C8051F系列的,一般是120,130,126

出0入0汤圆

发表于 2014-3-26 22:03:27 | 显示全部楼层
mark。。。。。。

出0入0汤圆

发表于 2014-3-27 14:35:54 | 显示全部楼层
校验出错,请重新下载...

出0入0汤圆

 楼主| 发表于 2014-3-27 17:08:13 | 显示全部楼层
孤独飞行 发表于 2014-3-27 14:35
校验出错,请重新下载...

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

出0入14汤圆

发表于 2014-3-27 22:08:47 | 显示全部楼层
相当好的资料,感谢楼主的奉献

出0入14汤圆

发表于 2014-3-27 22:09:05 | 显示全部楼层
相当好的资料,感谢楼主的奉献

出0入0汤圆

发表于 2014-4-17 17:43:58 | 显示全部楼层
顶下

出0入0汤圆

发表于 2014-4-22 11:37:22 | 显示全部楼层
我看看,看看

出0入0汤圆

发表于 2014-5-5 13:23:32 | 显示全部楼层
看起来不错,最近也在玩这个

出0入0汤圆

发表于 2014-5-10 18:36:34 | 显示全部楼层
载下来了,,,不错,感谢,

出0入0汤圆

发表于 2014-6-20 14:49:42 | 显示全部楼层
mark mark   

出0入0汤圆

发表于 2014-9-13 14:46:08 | 显示全部楼层
good

出0入0汤圆

发表于 2015-7-29 07:37:45 | 显示全部楼层
很给力.谢楼主

出0入0汤圆

发表于 2015-7-29 14:28:45 | 显示全部楼层
先标记一下,有空的时候仔细学习!

出0入0汤圆

发表于 2015-8-1 17:07:46 | 显示全部楼层
下载器有校验功能吗?

出0入0汤圆

发表于 2015-8-1 23:41:45 | 显示全部楼层
很好的东西,收藏了,谢谢

出0入0汤圆

发表于 2015-10-12 14:25:28 | 显示全部楼层
远程升级程序对程序大小有一定限制是吗?我的程序大小是25kB,这样的话就得预留至少25KB的空间了是吗?原来的app也是占用25KB的空间吗?

出0入0汤圆

发表于 2015-10-12 14:56:22 | 显示全部楼层
好久不用c8051的了,貌似记得一个山寨的usb口jtag也就30¥多点

出0入0汤圆

发表于 2015-10-12 15:54:56 | 显示全部楼层
好东东就要顶一顶

出0入0汤圆

发表于 2016-1-28 09:54:52 | 显示全部楼层
很好 很强大

出0入0汤圆

发表于 2016-10-27 10:48:13 | 显示全部楼层
mark  mark

出0入0汤圆

发表于 2016-11-2 08:33:27 | 显示全部楼层
厉害,谢谢分享

出0入0汤圆

发表于 2017-6-5 14:30:06 | 显示全部楼层

出0入0汤圆

发表于 2019-7-25 14:17:14 | 显示全部楼层
以后可能有用,收藏了、谢谢!

出0入0汤圆

发表于 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)  。不知道我的理解对不对。

出0入0汤圆

发表于 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)  。不知道我的理解对不对

出0入0汤圆

发表于 2023-11-28 17:11:43 | 显示全部楼层
这个代码写的真是简洁又高水准,感谢无私奉献

出0入0汤圆

发表于 2023-11-28 18:50:56 | 显示全部楼层
我特么怀疑是不是论坛也搞什么算法了,我10年都不会用C8051F的片子,今天刚搜索,今天就看见了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-16 21:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表