jdzjk06 发表于 2010-9-14 14:59:44

请教STC单片机远程升级实现方法!

我使用STC系列的单片机(STC12LE5A60S2),数据手册上说支持远程升级,但没有具体说明怎么实现,那位高手知道给说说!(我想通过SIM300模块GPRS无线修改单片机的程序!)先谢过了!

honami520 发表于 2010-9-14 15:16:20

好想法!我支持你。这个应该算是IAP吧!

jdzjk06 发表于 2010-9-14 15:37:10

不知道ISP引导程序和他的上位机下载软件是怎么通信的! ISP固件不公开源码!还是我没找到?

hexixiaomao 发表于 2010-9-14 16:10:31

这个 比较艰难了STC不同型号的isp引导程序版本不一样 老姚又坚决不公开   前阵我搞了一阵 啃掉了50% 后来放弃了

aidsheng 发表于 2010-9-14 18:52:56

这个问题值得研究,想想美国升级火星车的程序。

master5888 发表于 2010-9-14 19:12:15

自定个协议,软件里增加串口IAP功能。
建议慎用,防错机制做不好当心把MCU系统整废了,BUG没修成反而故障更大话,弄巧成拙,还是得上门解决问题。
尤其GPRS本身并不完全可靠,也会导致成功几率大减

jdzjk06 发表于 2010-9-15 08:12:54

有一个想法不知道行不行啊!我看STC的数据手册上有演示不断电下载程序的例子,就是利用自己定义下载的方法,如果单片机接收到自己定义的头后,就让单片机从ISP区启动,然后检测合法的下载命令流,这样就可以实现不断电下载程序了!我对上位机软件的开发一点也不懂,假如要是能把老妖的STC_ISP软件和自己做的服务器连到一起,利用自定义下载,能不能实现远程不掉电下载啊!??

               大家来讨论一下!!!

lghtjpu 发表于 2010-9-15 13:35:22

现在公司有个设备安装后很难拆下来升级,而又必须要有升级功能,大家讨论下这个远程升级的实现方法吧!
设备上扩展了64K的SRAM,有485跟PC通讯,所以我想能不能先通过485把新的程序下载到SRAM中来,然后再通过IAP烧到FLASH中去,烧完重启后就能运行新的代码。

lghtjpu 发表于 2010-9-15 13:36:32

补上,我的单片机用的是STC89C58RD+

jdzjk06 发表于 2010-9-15 15:00:16

回复【8楼】lghtjpu 艳阳高照
-----------------------------------------------------------------------

我觉得可以做到!利用自定义下载的方法!不断电烧程序!

master5888 发表于 2010-9-15 15:39:00

回复【7楼】lghtjpu 艳阳高照
现在公司有个设备安装后很难拆下来升级,而又必须要有升级功能,大家讨论下这个远程升级的实现方法吧!
设备上扩展了64k的sram,有485跟pc通讯,所以我想能不能先通过485把新的程序下载到sram中来,然后再通过iap烧到flash中去,烧完重启后就能运行新的代码。
-----------------------------------------------------------------------

利用RAM做下载代码缓冲,校验无误后写入FLASH是可行的办法,否则不执行升级写入

lghtjpu 发表于 2010-9-15 16:13:30

回复【10楼】master5888
回复【7楼】lghtjpu 艳阳高照
现在公司有个设备安装后很难拆下来升级,而又必须要有升级功能,大家讨论下这个远程升级的实现方法吧!
设备上扩展了64k的sram,有485跟pc通讯,所以我想能不能先通过485把新的程序下载到sram中来,然后再通过iap烧到flash中去,烧完重启后就能运行新的代码。
-----------------------------------------------------------------------
利用ram做下载代码缓冲,校验无误后写入flash是可行的办法,否则不执行升级写入
-----------------------------------------------------------------------


关键是擦除flash和更新代码的那些程序放在哪呢?因为当擦除flash后本身也就不能运行了吧,能把烧写flash的那部分代码放到外部RAM中或者内部的EEPROM中运行么?

jack821119 发表于 2010-10-11 16:26:16

可以的,本人已经用stc12c5a60s2成功远程升级了,stc12c5a60s2+62256.
如果有需要的话,可以直接联系我 ,qq 85373873.本来想直接发上来的,只是资料没有完全整理好,迟点再发上来

rainyss 发表于 2010-10-11 16:46:05

回复【9楼】jdzjk06
回复【8楼】lghtjpu 艳阳高照
-----------------------------------------------------------------------
我觉得可以做到!利用自定义下载的方法!不断电烧程序!
-----------------------------------------------------------------------

不行的.远程升级基本没串口用,就算给你串口,还也还得用老姚的PC端,将这东东包到产品里,小心告你侵权.
IAP跟ISP一样,需要有个独立于应用代码的引导代码,把这部分做好并放在程序的高端就万事大吉了.

jack821119 发表于 2010-10-11 20:38:05

回复13楼,

其实将引导代码放在程序的高端与低端都可以,不过放在低端的话要注意中断的重映射.
本人做的时候也是放在高端的

XMLK 发表于 2010-10-11 21:02:18

MARK

bxzyf 发表于 2010-10-11 23:06:57

回复【12楼】jack821119
可以的,本人已经用stc12c5a60s2成功远程升级了,stc12c5a60s2+62256.
如果有需要的话,可以直接联系我 ,qq 85373873.本来想直接发上来的,只是资料没有完全整理好,迟点再发上来
-----------------------------------------------------------------------

期待你的大作啊!

lghtjpu 发表于 2010-10-11 23:13:58

回复【12楼】jack821119
可以的,本人已经用stc12c5a60s2成功远程升级了,stc12c5a60s2+62256.
如果有需要的话,可以直接联系我 ,qq 85373873.本来想直接发上来的,只是资料没有完全整理好,迟点再发上来
-----------------------------------------------------------------------

顶,快点把资料整理好吧,说清楚原理哦...

19001579 发表于 2010-10-11 23:53:43

回复【5楼】master5888
-----------------------------------------------------------------------

可以使用双系统备份的办法,就跟主板技术一样,用双BIOS一个道理。不过就是多了一倍的ROM空间占用

5irmb 发表于 2010-10-12 17:13:49

回复【18楼】19001579
回复【5楼】master5888
-----------------------------------------------------------------------
可以使用双系统备份的办法,就跟主板技术一样,用双bios一个道理。不过就是多了一倍的rom空间占用
-----------------------------------------------------------------------

赞同。我的想法和楼上差不多。只要在前端加个判断继续那个系统就可以切换啦。
其实用不着一倍。因为可以搞个不平衡的。一个正常时候用。一个升级用。估计升级用的程序200字节就够啦。

jack821119 发表于 2010-10-15 11:21:06

应各位的需要,本人把整理好的iap功能实现代码以及资料发上来。本人有疏忽之处,请大家见谅。
共享才有进步。

点击此处下载 ourdev_590054DX9P4B.rar(文件大小:48K) (原文件名:IAP源码和资料.rar)

avrpicarm 发表于 2010-10-15 11:25:59

20楼资料给力

jordonwu 发表于 2010-10-15 11:29:58

mark

ccmj4708 发表于 2010-10-15 11:48:21

jdzjk06 发表于 2010-10-15 13:19:09

嗯不错!

maxchen 发表于 2010-10-16 12:00:01

我觉得jack821119的方法有个安全隐患,我使用STC12c5a56s2测试了一下
当擦除命令执行成功后,在写第一个64字节数据时就出错,那这个芯片就完全挂了

jack821119 发表于 2010-10-16 14:38:17

附近文档里面已经有说明了,程序是有限制的,因为我这个程序是在不带62256的情况调试的,所以代码容量不可以很大。
现在只程序是64字节限制的,如果你想代码量大一点的话,那就里面的buf数组修改以下以及将buf放在xram,但是在加上62256的前提下。
反正iap的功能大致是那样的,代码的多少只是你根据自己需要调整以及增加硬件而已。

附近的说明文档希望大家先阅读下。

maxchen 发表于 2010-10-16 16:50:13

我有两个疑问,望jack821119不吝指教
1.STC12c5a60s2的所谓的EEPROM的地址是从0x0000开始的,我在正常程序里使用IAP命令的0x0000地址进行擦除编程,并不会影响CODE中的程序。但根据你给出的程序,你的意思应该是,IAP编程0x0000是对CODE中用户应用程序进行编程。你代码中在校验数据时是把buf中的数据与CODE中的数据进行对比。
if (buf != CBYTE) //源数据与目标数据进行比较
    break;

但那个IAP命令根本就不影响CODE,这样就解释了我在测试的时候为什么总是得到擦除芯片完成 !下载数据失败 !结果

2.假设IAP命令能够编程CODE中的用户程序,那上位机每次发送64字节的数据到buf,然后IAP把buf中的数据写到CODE中的用户程序,到下一次发送下一个64字节到buf,并修改相应的写地址,这样就可以把整个程序编程到CODE中的用户程序。只要这个程序没有超出可用的CODE空间。但为什么你的说明里说跟RAM有关呢?

小弟初学51,请见谅

jack821119 发表于 2010-10-16 17:15:46

程序里面已经把iap的代码放到0xee00地址上了,所以从0x0000进行刷除不会影响iap代码。keil c里面已经进行了函数定位设置了。

显示数据下载失败是因为你的代码量超过了64字节。

我明白的第二个疑问的意思,如果你的代码量超过32K吧,那你buf数据就不知道放在哪里了,因为程序的空间不够。代码量小的话直接放在flash里面或者小于1280字节是没问题。我说的那种就是超过32K,也就是说代码量比较大的时候,将buf数据直接放在62256。回复的比较匆忙。

有什么问题,你直接联系我qq 85373873

flyhouse 发表于 2010-10-16 17:16:33

如果要研究s t c的ispcode,可以参考megawin的ispcode相关文档和hex,旧版本s t c就是mpc生产的。
另外,有个人把s t c12le4052ad的ispcode搞出来了,可以去看一下。

用关键字:ispcode搜索论坛,就有的。

songshanxiaozi 发表于 2010-11-23 15:08:58

STC单片机的DATASHEET上应该讲了,自己看吧,还好,都是中文的

asdfzl 发表于 2010-12-10 14:13:23

m

phone 发表于 2010-12-22 11:21:39

能弄个脱机下载就好办了。

XMLK 发表于 2010-12-28 00:11:08

老姚的网站有一些资料,还没细看!

flywater 发表于 2010-12-28 20:55:36

STC12C5A60S2不能对应用程序区IAP吧,在用户程序区好象只能操作到它所谓的EEP区,IAP12X5A62才能操作用户FLASH区,我理解有问题?还是STC隐藏的有秘密?

rainsun 发表于 2010-12-28 22:55:17

linux下有个开源的stc89c52rc的下载程序,不知道对大家有用没。地址http://forum.ubuntu.org.cn/viewtopic.php?f=97&t=273790

deiwgah 发表于 2010-12-29 00:31:43

好东西啊,有空研究一下

MPV2011 发表于 2010-12-29 09:19:03

ispcode mark

liumaojun_cn 发表于 2010-12-29 09:23:33

mark

zzjjhh250 发表于 2010-12-29 09:29:32

回复【37楼】gamethink
事实上,所谓eeprom在内部都是flash来的吧
-----------------------------------------------------------------------

对于我们使用影响不大,就是读写的时候有点麻烦,不过做成模块了,一个函数就好了!

flywater 发表于 2010-12-29 10:51:51

回复【37楼】gamethink
事实上,所谓eeprom在内部都是flash来的吧
-----------------------------------------------------------------------

但STC未公开12C6A60系列的isp启动代码,我们不能把EEP当FLASH用呀,也不能把无IAP功能片子的FLASH当EEP吧,我现在不明白的是楼主用非IAP的5A60系列片子,怎么实现在线修改用户FLASH区呢?破译STC上位机的下载程序的协议?请楼主赐教.

jdzjk06 发表于 2010-12-30 09:21:05

回复【41楼】flywater 落叶
-----------------------------------------------------------------------

手册上说的这款单片机可以实现远程升级,具体我不懂怎么回事,就拿来论坛讨论了!

flywater 发表于 2010-12-30 10:07:13

回复【12楼】jack821119
可以的,本人已经用stc12c5a60s2成功远程升级了stc12c5a60s2+62256.
如果有需要的话,可以直接联系我 ,qq 85373873.本来想直接发上来的,只是资料没有完全整理好,迟点再发上来
-----------------------------------------------------------------------

jack821119大侠在12楼说已解决了12C5A60S2的远程升级问题,也感谢你在20楼提供的附件内容,看后我的理解是:你大致还是使用了宏晶网站上提供的IAP5A60系列的远程升级办法(代码及上位机IAP程序),IAP系列单片机可以远程升级,这个是毫无疑问的,因为这一系列片子可以在线改写用户区FLASH,但你提及的是12C5A60S2,是无法在线改写用户区FLASH的,你是怎样解决用户区FLASH无法在线改写问题的?如果是用冷启动从STC引导CODE处IAP,那你至少要有STC未曾公开的ISP代码或协议呀,是你笔误将IAP5A60写成STC12C5A60了呢?还是真正有方法将12C5A60的flash当EEP一样随意改写呢?还请大侠赐教。
觉得没必要非要大家加你QQ才能交流,在这里交流更能体现阿莫技术共享的宗旨,能多一个人了解了你的思路及方法,就能多一个人记住你,感谢你!

xiaojian 发表于 2010-12-30 11:24:14

jack821119大侠,我也请教一个问题,你的代码我看了部分,就是说如果编程中途失败了,还能再次进入isp代码吗,那不是挂了啊

xiaojian 发表于 2010-12-30 11:29:46

void (*Isp_Check)(BYTE *) = 0xEE00;      //定义指针函数问题是如果全部擦除掉了,后面还没有写入,中途断电了,怎么会进入这个函数呢?

jdzjk06 发表于 2010-12-31 08:29:34

我自己顶一下!

flywater 发表于 2010-12-31 18:01:25

看来jack821119也只是忽悠一下大家,如果只是对IAP5A60S2进行远程升级,没必要参考jack821119提供的东西,因为他就是把STC网站上的方法抄一遍而已,IAP5A60S2本身就是可以在线编程的系列,

cuikai12345 发表于 2010-12-31 18:28:56

mark

jdzjk06 发表于 2011-1-8 11:55:15

谁有成功的案例,上来一个学习学习!./emotion/em013.gif

hanfeng000 发表于 2011-3-25 22:29:32

stc的IAP升级

ncigray 发表于 2011-3-25 23:30:27

mark这个东西还真一点不懂

jadeyang 发表于 2011-3-26 15:26:18

mark

miscell 发表于 2014-3-3 11:24:55

看到有这个方法:http://www.zlmcu.com/products_ZLSN2002.htm
不知有没人用过

willX 发表于 2015-2-9 10:22:05

ls的,w5100吧。

小李非刀 发表于 2015-2-9 19:40:29

STC官网用库函数写的例程里有一个写自己的ISP的DEMO,使用超级终端发送,用户可以修改成任何传输方式

cd4000 发表于 2015-7-15 22:15:43

学习一下!

chunyu 发表于 2015-7-15 22:23:41

STC在线升级 好东西

cd4000 发表于 2015-7-15 22:27:28

学习一下!

小李非刀 发表于 2015-7-15 23:17:42

STC官网的库函数例程里就有,使用超级终端的YMODEM协议做发送端。

redchina 发表于 2015-7-17 01:33:16

受用了,谢谢

qq7183316 发表于 2015-7-20 13:50:18

我也想了解下,有没有朋友告知一下。

小李非刀 发表于 2015-7-20 14:12:01

STC官网的库函数例程里就有,使用超级终端的YMODEM协议做发送端。

下载后单独压缩贴出来吧。。。

koenlee93 发表于 2017-10-26 00:40:26

小李非刀 发表于 2015-7-20 14:12
STC官网的库函数例程里就有,使用超级终端的YMODEM协议做发送端。

下载后单独压缩贴出来吧。。。


MARK                        

Llinuxu 发表于 2017-10-26 16:29:44

通过gprs接受数据,保存到自己指定的地方,启动单片机的时候从你保存程序的地方启动。注意:

Llinuxu 发表于 2017-10-26 16:31:01

注意:1、存储数据的地方要够大。2、做好善后工作,防止变砖!

koenlee93 发表于 2017-10-27 11:00:23

小李非刀 发表于 2015-7-20 14:12
STC官网的库函数例程里就有,使用超级终端的YMODEM协议做发送端。

下载后单独压缩贴出来吧。。。


在吗,我问下这个只能下载bin文件吗不可以下载hex文件吗麽

koenlee93 发表于 2017-10-27 12:06:14

小李非刀 发表于 2015-7-20 14:12
STC官网的库函数例程里就有,使用超级终端的YMODEM协议做发送端。

下载后单独压缩贴出来吧。。。


我这个提示编程成功以后,后面的那些信息没发过来

小李非刀 发表于 2017-11-2 16:40:05

koenlee93 发表于 2017-10-27 11:00
在吗,我问下这个只能下载bin文件吗不可以下载hex文件吗麽

不能下载HEX,几乎所有厂家的MCU下载时,虽然可以打开HEX文件,但是打开后马上转成BIN了,因为,单片机并不认识HEX文件。

koenlee93 发表于 2017-11-4 11:10:35

小李非刀 发表于 2017-11-2 16:40
不能下载HEX,几乎所有厂家的MCU下载时,虽然可以打开HEX文件,但是打开后马上转成BIN了,因为,单片机并 ...

那需要将hex转换成bin吗

小李非刀 发表于 2017-11-8 17:42:12

koenlee93 发表于 2017-11-4 11:10
那需要将hex转换成bin吗

要先转成BIN,才能下载
页: [1]
查看完整版本: 请教STC单片机远程升级实现方法!