总结
1.需求:由于需要将烧录程序嵌入到上位机程序中,即用Visual Basic编写的一个程序,在这个程序中调用STVP_CmdLine对STM8S105C6进行烧录,
2.参考STVP_CmdLine的帮助,依葫芦画瓢,摸索得出如下总结
3.关于STVP_CmdLine的保住,可以在DOS界面下,进入到STVP安装目录,输入如下命令:
STVP_CmdLine /?
如果嫌DOS界面下,不方便看,可以将命令稍微更改成如下:
STVP_CmdLine /? >1.txt
在上一次命令的基础上,增加"> 1.txt",这样一来相关帮助信息就保存在文件1.txt中,在资源管理器中打开这个文件即可方便观看
4.如何在DOS下,进入到STVP_CmdLine安装目录,这个简单,本人是从DOS3.3开始用电脑的,命令如下:
cd C:\Program Files (x86)\STMicroelectronics\st_toolset\stvp
如果你的安装路径不同,请做相关更改即可
5.文件生成,本人使用的IAR FOR STM8,编译得到一个.HEX文件,姑且把这个文件叫做s.hex吧
用记事本打开这个文件,将其拆分为两个文件:p.hex, d.hex
p.hex: 在s.hex的基础上,将eeprom的数据删除,就是删除地址为0x4000开始的数据,保留0x8000开始的数据,一般删除第一行或若干行,
不妨在网络上查找以下.HEX格式就明白,
同理,d.hex就是在s.hex的基础上,保留0x4000~0x7fff的数据,将其它地址的数据删除,注意要保留最后一行
:00000001FF 此乃文件结尾的标志
6.生成 o.hex,如果你写入的程序,不需要进行代码保护,可跳过,一般来说还是需要代码保护,
打开STVP Visual Programme,按照平常烧录进行操作,点击OPTION BYTE页,将ROP 设置为ON,即加密保护
点击菜单File 另存为 o.hex即可
如上, 将ROP设置为OFF(取消代码保护),另存为un.hex,备用
7.VB程序处理,
7.1 先对单片机进行"取消保护"操作,调用DOS,设置命令如下:
cd C:\Program Files (x86)\STMicroelectronics\st_toolset\stvp
STVP_CmdLine -port=USB -BoardName=ST-LINK -Device=STM8S105x6 -ProgMode=SWIM -no_warn_protect -no_loop -FileOption=uo.hex >1.txt
根据1.txt的信息,判断本次"解保护"是否成功
7.2烧录程序,命令如下:
cd C:\Program Files (x86)\STMicroelectronics\st_toolset\stvp
STVP_CmdLine -port=USB -BoardName=ST-LINK -Device=STM8S105x6 -ProgMode=SWIM -no_warn_protect -no_loop -FileProg=p.hex -FileData=d.hex -FileOption=o.hex >1.txt
同样,根据1.txt内容,判断操作是否成功
8.其它
8.1 在7.1/ 7.2操作之前,删除1.txt,操作后会重新生产该文件,再进行判断,
8.2 源文件p.hex, d.hex o.hex,放置的路径要注意,最好放到STVP安装目录下面,否则需要增加文件路径,本人拟将这三个文件,编译到VB程序中,在烧录时,临时有VB生成这三个文件,烧录完成后,立即删除,这样操作人员,基本上无法接触到源文件
8.3 既然烧录操作是通过VB来调用的,那么就可以利用VB做一些文章,例如:
8.3.1, VB程序进入后,读取电脑的网卡号等信息,与预先设置的文本进行比较,如果不符合,则退出VB,这样可以保证VB程序在指定的电脑上操作,即便拷贝到其它电脑,也无法运行
8.3.2, 自己可以制作加密狗,用一个USB转串口的芯片,例如FT4232(好像是这个型号,或者相近的型号)等,加上一个单片机,VB调用烧录之前,先对狗进行通信,狗负责计数,到达一定数量后,返回给VB一个信息,VB罢工不干了,这样可以限制烧录数量,需要继续烧录,对狗内置的单片机刷新程序(允许数量)
罗罗嗦嗦就此打住,有需要的自己继续摸索.................
|