大锤子 发表于 2024-10-25 15:50:07

我想使用java自己开发个跨平台的简单的ISP

程序编译好后,通过ISP将hex文件烧录到单片机的过程就是ISP 跟单片机的BL(BootLoader)固件通信的过程是吧?
现在ISP仅能在windows环境下使用。
如果想在不改变BootLoader的前提下自己开发简单的ISP上位机,是不是需要知道上位机跟BL的通信协议;
通过研究stcgal这个开源工具,目前可以知道部分协议比如:

串口链接后,单片机重新上电会给上位机发送数据如下:

<- Packet data:
46 B9 // 数据包开始头
68    // 68表示来自MCU
00 38 // 表示长度为 56字节
50 02 16 C7 20 56 30 01
FF FF BF AF FF 26 E1 F7
FE 74 55 00 F7 84 06 89
E4 38 5D 1F 23 1F 1B 01
00 00 FE 04 A5 24 06 05
91 10 94 CB FF 53 65 86
B0 DA 16 43
16    // 数据包结束;

中间的是数据内容,这个内容应该表示的是单片机的型号,目前的相关配置项,比如是否使用外部时钟,是否开启了看门狗等;

但是具体是怎么解析的没有找到相关文档,stcgal源码中解析有点费时间,还不够准确。

不知道STC是否对外提供这些信息, 如果没有的话就算了,就盼着STC官方的ISP能支持;


DebugLab 发表于 2024-10-25 16:13:03

下载协议是开源的,可以自己编写上位机软件从串口下载

DebugLab 发表于 2024-10-25 16:17:34





















大锤子 发表于 2024-10-25 16:28:16

本帖最后由 大锤子 于 2024-10-25 16:36 编辑

DebugLab 发表于 2024-10-25 16:17

这个流程图我看过了, 但是我想知道握手后单片机返回数据包的具体含义。

比如:哪个字节或者哪几个字节用来确定单片机型号。

VCC 发表于 2024-11-5 11:34:08

楼主用的是哪款芯片呢?每款STC的烧录协议都有区别哦,所以自己做这个意义不大。还是老老实实用STC ISP呗

VCC 发表于 2024-11-5 15:08:37

本帖最后由 VCC 于 2024-11-5 15:47 编辑

好办!可以用正向分析的方法,你把这些数据重新输入回STC ISP,看看软件显示有什么变化,不就知道了
也就是在STC-ISP每次发起握手的时候,通过串口给STC-ISP回复如下内容:

46 B9 68 00 38 50 02 16 C7 20
56 30 01 FF FF BF AF FF 26 E1
F7 FE 74 55 00 F7 84 06 89 E4
38 5D 1F 23 1F 1B 01 00 00 FE
04 A5 24 06 05 91 10 94 CB FF
53 65 86 B0 DA 16 43 16



将命令帧的前5个数据改为0,再次让STC-ISP做识别。发现内部IRC振荡器频率数据没有了


以此类推,逐一测试每个字节的效果
得到如下结果


46 //无可见作用,但不能为68
rB9 //无可见作用,随机值无影响
68 //必须为68
00 //必须为00
38 //应该代表从68起需要解析的字节数,其余填0,标准值38;降为27则内部参考电压值变为1024mV;降为26则内部参考电压值变为0;降为18则无法识别单片机型号了
50 //改成任何其他数字,如51,将无法下载
02 16 //影响内部IRC振荡频率,越大,频率越大
rC7 20 56 30 01 FF //无可见作用,随机值无影响
FF // 影响下次下载用户程序时的四个选项
BF // 影响振荡器增益、上电长延时
AF // 影响低压复位、复位门槛、复位脚映射
rFF / //无可见作用,随机值无影响
26 //影响系统ISP工作频率,越大,频率越大
rE1//无可见作用,随机值无影响
F7 //影响仿真和看门狗
FE //影响用户EEPROM大小
74 //影响版本号前2位
55 //影响版本号末尾字母
00 F7 84 //影响单片机型号识别
06 //影响版本号第3位
89 //影响掉电唤醒定时器的频率,越大,频率越大
rE4 38 5D 1F 23 1F 1B 01 00 00 FE //无可见作用,随机值无影响
04 A5 //内部参考电压: 1189 mV
24 06 05 //测试时间: 2022年6月5日
r91 10 94 CB FF 53 65 86 B0 DA 16 43 16 //无可见作用,随机值无影响




例如如下内容可以构造出这样的识别结果
46 25 68 00 38 50 FF FF 81 B3 7F 8A 82 5D FF BF AF BB FF 2E F7 FE 33 33 00 F7 84 03 FF 2E E2 0B 4E 9F C8 09 01 AB 78 23 82 35 20 06 06 BD 32 A1 2F B4 5F 26 32 83 5D 81 53 D8(标r的行,均已经替换为随机值)


大锤子 发表于 2024-11-5 15:26:30

VCC 发表于 2024-11-5 15:08
好办!可以用正向分析的方法,你把这些数据重新输入回STC ISP,看看软件显示有什么变化,不就知道了
也就是 ...

牛。 我要的就是这些数据。 在stcgal的源码种也能解析出来。 我本来打算补充一下stcgal来给AI8051U 稍露8位程序的。

大锤子 发表于 2024-11-5 15:29:05

VCC 发表于 2024-11-5 15:08
好办!可以用正向分析的方法,你把这些数据重新输入回STC ISP,看看软件显示有什么变化,不就知道了
也就是 ...

一个字节可能会影响多选项,判断出来后还需要进一步修改位。
这些应该都跟单片机默认的BL相关。 不同版本的BL估计也不同。

xxkj2010 发表于 2024-11-5 15:35:44

这难度不小。{:4_250:}

soma 发表于 2024-11-5 15:44:33

VCC 发表于 2024-11-5 15:08
好办!可以用正向分析的方法,你把这些数据重新输入回STC ISP,看看软件显示有什么变化,不就知道了
也就是 ...

数据结尾应该有校验吧
页: [1] 2
查看完整版本: 我想使用java自己开发个跨平台的简单的ISP