打印
[STC单片机]

stcflash跨平台的STC单片机烧写软件

[复制链接]
10350|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laborer|  楼主 | 2013-11-13 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 laborer 于 2013-11-13 10:20 编辑

STC的官方烧写程序stc-isp虽然很容易使用,但只能在Windows下运行,对于习惯在Linux或者Mac OS上开发的人来说不怎么方便。跨平台的STC单片机烧写软件stcflash就是为有这样需求的开发人员设计。stcflash使用命令行方式操作,用法很简单,可以容易的集成到开发工具链里。

stcflash采用Python编写,需要2.6或以上版本。另外它还需要Python的pySerial模块用于串口通讯。Python一般不会自带pySerial,不过安装很容易。如果你是在Ubuntu下,只需要安装python-serial包就可以了。其他系统请参考一下pySerial的安装说明。

stcflash使用方法很简单,如果只是需要读取单片机的信息,直接运行,不需要加任何参数
$ python stcflash.py
Connect to /dev/ttyUSB0 at baudrate 2400
Detecting target... done
FOSC: 11.955MHz
Model: STC89C52RC (ver4.3C)
ROM: 8KB
当出现Detecting target...提示的时候,你需要关闭再打开单片机电源,以使单片机进入编程状态。这个和官方的stc-isp是一样的。如果单片机没有连接在第一个USB转串口适配器上,则需要通过--port参数来修改串口地址。另外,初始的波特率也可以通过--lowbaud修改,尽管大部分情况下应该用不着。下面是个例子
$ python stcflash.py --port /dev/ttyUSB1 --lowbaud 1200
Connect to /dev/ttyUSB1 at baudrate 1200
Detecting target...
stcflash只支持烧写bin格式的程序文件,hex格式的文件需要先转换为bin才能使用。在Linux下可以用下面的命令来完成这个转换操作
$ objcopy -Iihex -Obinary program.hex program.bin
有了bin文件之后,只要将这个文件作为stcflash的运行参数就可以进入烧写模式了。
$ python stcflash.py program.bin
Connect to /dev/ttyUSB0 at baudrate 2400
Detecting target... done
FOSC: 11.955MHz
Model: STC89C52RC (ver4.3C)
ROM: 8KB
Baudrate: 38400
Erasing target... done
Programming: #################### done
目前stcflash可以支持STC89C5xx,STC12C5Axx,STC12C52xx三个系列以及他们的低电压版。对于其他系列,你可以试试用--protocol参数来指定烧写协议。可能大部分较新一点的STC单片机都是用的和STC125Axx和STC12C52xx一样的协议。所以如果stcflash不支持你的STC单片机,可以先试试下面的命令
$ python stcflash.py --protocol 12 program.bin
比较早期的STC单片机使用的协议应该和STC89C5xx兼容,可以用下面的命令烧写
$ python stcflash.py --protocol 89 program.bin

如果遇到问题可以用--verbose或者--debug参数输出更多的信息,方便调试。

最新版本的stcflash可以从github上下载 github.com/laborer/stcflash,附件中的版本可能无法保证即时更新。

stcflash.zip (17.46 KB)

相关帖子

沙发
autopccopy| | 2013-11-13 12:26 | 只看该作者
顶!

STC-ISP 官方目前只支持WINDOWS平台,而一般其他平台开发51比较少一些。

STC-ISP软件是官方出品,参数设置等最权威,是编程质量、可靠性最好的保证。而且不同单片机不同版本的内部ISP固件的协议可能是不同的,也只有官方的ISP软件给予最权威的完美支持。另外新的STC15系列的ISP协议更严谨,目前好像没有第三方的软件可支持。STC-ISP 内置了例程和KEIL的仿真驱动及脱机下载固件,自定义加密下载等独门应用,还集合了延时计算器、例程等等众多辅助功能。

所以强烈建议还是电工使用WINDOWS, 官方的软件,哪怕使用虚拟机。

第三方的win平台ISP软件有:ToStc6.2, MCUISP等,仅建议试用,生产还是用STC-ISP吧,目前最新为:STC-ISP V6.61,可到官方下载:WWW.**.COM


(BTW: STC官方也没有小霸王学习机环境下的ISP 驱动)

(17)

使用特权

评论回复
板凳
laborer|  楼主 | 2013-11-13 22:15 | 只看该作者
本帖最后由 laborer 于 2013-11-13 22:20 编辑

stcflash主要是设计给熟悉Linux或者Mac OS环境下gcc/ld/make/gdb工具链的开发者使用的,虽然它也可以在Windows下运行。当然,在纯Windows环境下STC官方的烧写软件是更好的选择。

目前我所知道的可以在Linux运行的STC单片机ISP软件有
gSTP-ISP(gstcisp.sourceforge.net,基于GTK,C语言编写,支持STC89C52RC)
stc-isp(github.com/van9ogh/stc-isp,命令行操作,C语言编写,支持STC89C52RC,从gSTP-ISP移植而来)
stcdude(ncrmnt.org/wp/tag/stcdude,命令行操作,C/lua语言混合编写,支持STC12C5Axx系列)

相比这几种ISP软件,stcflash支持的操作系统和芯片种类更多。

等我有机会拿到STC15系列的芯片,我会考虑让stcflash支持。实际上STC单片机的烧写协议并不复杂,也不应该弄很复杂。如果STC能像大部分的芯片生产厂商一样能公开烧写协议就好了。

使用特权

评论回复
地板
autopccopy| | 2013-11-13 22:57 | 只看该作者
laborer 发表于 2013-11-13 22:15
stcflash主要是设计给熟悉Linux或者Mac OS环境下gcc/ld/make/gdb工具链的开发者使用的,虽然它也可以在Wind ...

对,在其他方面和领域,特别是外国,使用Linux的比例是不低的,用MAC OS的也不少。我自己有I5的MACBOOK AIR (使用BOOTCAMP 与WIN7双启动)。:)

但用它们开发51单片机的我了解的确不多。51单片机开发的主流KEIL是WIN平台的,而且WIN平台是PC的主流平台。

我分析因为STC主打是加密为卖点之一,其ISP协议不公开是为了增加其加密性,所以应该不会公开。
而且为了保障加密应用,还有“自定义加密下载”功能,通过使用者首次生成并植入MCU的ISP密钥,来加强ISP下载的保密性,特别是在使用脱机下载的时候。

既然选择了大众化的51类单片机,不差也选WIN平台了(btw:我个人推荐INTEL的CPU! :) )

(49)

使用特权

评论回复
5
laborer|  楼主 | 2013-11-14 00:39 | 只看该作者
又找到一个Linux下可用的STC烧写软件
kSTC-ISP(rgwan.byethost10.com/archives/1196,图形界面,Gambas语言编写,支持STC89C5xx和STC12C5Axx系列)

在Linux下编译C51程序可以用sdcc。sdcc编译代码的质量和Keil C51相比各有千秋,基本上可以说都很傻,但傻的地方不一样。

STC89和STC12系列的ISP协议都是不加密的,也比较简单,很容易分析。stcdude和kSTC-ISP的作者都对ISP协议的解析做了很多的工作。

STC15我没有接触过,不过貌似和以前的ISP协议有较大的区别。kSTC-ISP的作者在他的博客上说他卡在协议最开始计算晶振频率那一步上了,不知他后来有没有进展。

我想stcflash和其他几个第三方ISP软件都是为了方便开发而设计的。至于“自定义加密下载”这样量产时才需要的功能,在开发阶段是不需要考虑的。当然,量产的时候还是用官方的烧写工具更为稳妥。

使用特权

评论回复
6
McuPlayer| | 2013-11-25 00:18 | 只看该作者
sdcc与Keil C还差一截,不过作为一个open source的编译器,已经很强大了

使用特权

评论回复
7
laborer|  楼主 | 2013-11-27 01:21 | 只看该作者
sdcc和Keil C51的编译质量相比各有优势,很多情况下是看程序设计者对编译器的了解,写出更符合优化器口味的程序。

我遇到过的一些Keil C51的毛病:
* 有些时候能使用register的地方非要用data;
* 常数识别不足,比如 { a=2; b=3; c=a*b; },会老老实实的编译成3个MOV和一个MUL,而不是直接c=6;
* 会编译出sjmp 0这样的无用指令

sdcc的毛病
* a=(b<<8)|c,会先把b<<8和c都转成16bit int,然后再orl;
* for (i=8; i>0; i--) {...} 不用djnz,不过for (i=8; i!=0; i--) {...}是编译成djnz的;

使用特权

评论回复
8
xxiao6130| | 2013-11-27 19:13 | 只看该作者
谁有stc 15w104sw单片机的资料?麻烦发一份给我咯?谢谢!

使用特权

评论回复
9
rgwan| | 2014-4-9 16:09 | 只看该作者
laborer 发表于 2013-11-14 00:39
又找到一个Linux下可用的STC烧写软件
kSTC-ISP(rgwan.byethost10.com/archives/1196,图形界面,Gambas语 ...

这玩意是我中二时期无聊的一个产物。后面我的STC片子都出了。byethost也倒掉了,就没继续折腾STC啦。
我个人其实支持楼主用C++再写一个~我原来写过STC的协议分析。你可以试试在你的软件里加上熔丝配置什么的。

使用特权

评论回复
10
rgwan| | 2014-4-9 16:16 | 只看该作者
autopccopy 发表于 2013-11-13 22:57
对,在其他方面和领域,特别是外国,使用Linux的比例是不低的,用MAC OS的也不少。我自己有I5的MACBOOK A ...

STC15F104E的ISP协议本来我早就分析完毕了。但是有一次电机驱动给我留了点阴影。FLASH莫名其妙的被全片擦除。ISP根本没用了,最后我就没有做kSTC15ISP

使用特权

评论回复
11
autopccopy| | 2014-4-9 18:32 | 只看该作者
https://bbs.21ic.com/icview-698742-1-1.html  [STC单片机] 官方:用其它MCU对STC15系列单片机进行串口ISP下载C例程(ZT)

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝