数码之家

 找回密码
 立即注册
搜索
查看: 152|回复: 8

[C51] 继续研究开发STC-ISP烧录安卓端,能用了,记录笔记

[复制链接]
发表于 9 小时前 来自手机浏览器 | 显示全部楼层 |阅读模式
本帖最后由 兔包公 于 2025-5-1 10:18 编辑

书接这几回,个人记录,纯属废话。
第一回,
探讨一下,通过手机otg烧录stc单片机
第二回,
搜索学习记录,STC-ISP烧录通信协议
第三回,
学习开发stcisp安卓端,一点点进展记录

一,上回书说到,由于CH340的硬件限制,返回数据最多只有32个字节,虽然说只有首个返回mcu参数信息的包超过32个字节,但还是导致逻辑处理上出现了点混乱,其次按照stc数据手册中转化发送握手数据包和准备数据包时,apk端接收不到准备完成的数据,总总问题无法往下进行。
于是又花了不少时间学习和查找资料,反反复复查看别人的源码和issues,对比人家发送的数据包,我的数据包,和手册中的数据包,尝试使用别人库中的数据包,更改后。最终发现发现问题所在,原来仅仅是一个设置工作频率时计算出错,取的频率出错(我看成mcu当前工作频率了),导致设置待烧录芯片最高波特率时数据包出错(其实这里说最高,我觉得有点不恰当,用统一host和mcu的波特率好理解点,也就是说,如果我前面有序发0x7F那会是用的2400,这里直接设置它为2400,省的后面host还要改一次麻烦)。
要么说一步踏错,终生错,下海伴舞为了生活……
记录,具体这个数据包具体什么弄,管他呢,反正从目前来看有用24M计算,有用22.1184M的。但arg和后面跟的其他参数位不同,另有根据host频率对应选择(似乎是设置等待时间的,又或者校准时钟,工厂频率的?? )。

stcgal库源码握手前多了一个环节,一来一回,校准的。不需要,先不研究。
总之以目前我的手里的2个型号单片机stc15w4k56s4,stc15w408as测试来看,按手册来,数据后3位直接使用手册里的00,00,C3也没问题。

其次波特率计算公式中,能否是从第一个返回数据包中取下图这个位置的数据来计算??我的2个型号单片机数据,都是≈24M。还有这arg位一个是0x8A,一个0x81。没有其他型号参考,赖的去深究。


用别人源码中的计算的数据包的,正常收到返回数据。(此处用22.1184M计算2400波特率,arg位用人家的6d)。

用手册中IAP相关信息的00,00,81,也能跑起来。



是什么真不太清楚,总而言之,这一步是解决了,卡壳很久了,准备包总算是返回数据了,接下来擦拭包比较简单没咋可记录,擦拭完成会返回mcu型号代码和UID数据

二,解析hex文件。流程hex→bin→byte[]
①,花点时间,请教谷姐便可,没咋,hex包含数据长度+地址+标识+数据+校验等信息,随便打开一个库例程hex文件,记一下。

烧录到mcu的过程是把中间这些数据按地址分配搞到mcu程序存储区。随便打开手册,可以看到地址是从0000→),存储区大小与MCU型号对应。


也看到手册中编译输出时也有相应提示。那个错误的0800大概好像是stm32的对应扩展段地址,bootloader什么相关之类用的。用不上,用不着,这都是可以验证的,随便打开stc库例程hex文件,是看不到标识为04的,类似
:020000040800F2这样的行,也可能32位的单片机才会有,也用上,不研究。


②,→bin注意项:还以为八八的直接hex按行把数据提取出拼一起就OK,没那么简单,其实也是这么取数,但是这个数据要按地址进行排序,比如下图,这个行0000地址的数据是要放最前面的。
hex

bin

还要根据址址和长度,缺少数据的,还要给他补上FF,我是懂了,但属实不懂什么组织语言去说这个,mark下人家的python源码相关源码吧,把真实hex数据代入进去走一遍流程,很容易理解。(源码箭头所指着这个dat[4:-1],虽然说是等号前面已经限制的长度,但是强迫症犯了,难受,用dat[4,-2]多好)

当然最简单方法就是从stc-isp的pc端直接把解析好的程序文件复制出来用,又或者用其他工具转换,但这就脱离本意了。
又一段时间过去了,讲真,char ,string ,byte[],byte几个数据类型间的转换,用起来感觉弯弯绕,头有点晕,算了,拿来主义好,复制粘贴还不会嘛,反正有java写的hex2bin,把其中Mian函数改下,参数和文件地址改下,用就时候先调用转为bin存到手机存储,再读取出来转换我想要的16进制真实数据,虽然多了一个环节,但大不了烧录完了最后搞个删掉的逻辑就好了,也算是隔山打牛了。
三,前面一堆准备工作都搞定了,这回终于来到最后一环节了,烧录。
①,理解bin文件意思后,这时数据包看起来就简单多了。bin文件烧录时要指定地址,也就一个地址对应一个字节数据。同时对应增加。
STC一个数据祯,去头去尾去其他7788标识后,最大支持128个字节数据,也就是手册里用128的原因,实际情况如果怕数据丢失,搞短一点分多几次发都可以,只要地址对上就得。

为了方便发送一个数据侦,用不到的程序存储区,用0xFF或0x00去补足都可以,(或者说要烧录的bin数据已经没了),一些资料说,默认值是0xFF,不太清楚,补0x00最后好像也是触发恢复默认值的。官方手册demo数组数据是补0x00。不补好像也可以,只要按地址把程序bin数据写完了就行。
②,手册中烧录数据到最后一个包时,数据ID标识改为0x02,一些人说是确认标识,但似乎不用也正常烧录,我122字节的测试bin文件,用ff补完128个字节,用标识0x22只写一个128的数据侦,程序也跑起来了。
总之,东拼西凑,要咋咋不会,抄作业第一名,整个流程是串起来了。

四,很多很多To do 。
①,activity的生命周期处理。
②,errors错误处理。
③,整个流程还在registerDataCallback里面,串口接收的数据什么提出来?那么久了还没学会,试过使用全局变量接收,不理想,数据更新显示混乱,流程跑不起来。
(学习线程,回调函数,安卓开发等相关知识)
④,github这个库,usb-serial-for-android:https://github.com/mik3y/usb-serial-for-android支持更多的USB转TTL芯片,非常适合研究。
⑤,设置mcu选项,功能逻辑实现。
⑥,是否需要加遍历usb端口?比如有几个usb端口的OTG,
⑦,串口助手已有替代的,是否还需要??
⑧,更多型号系列mcu,功能逻辑实现。
⑨,文件地址,实现点击调用原生安卓文件管理器选择烧录文件。
⑩,研究SDCC在termux上的如何使用,如果用proot坏境安装的linux能否正常运行?资料很少,看到贴吧和stc的论坛有一点介绍,如果直接在termux上使用,似乎是各依赖都要自己编译。……………

五,八哥比效果还多,加入“又不是不能用”系列,一个好消息一个坏消息,好消息是能用了,坏消息是目前从逻辑上来讲只支持STC15W,(STC15H应该也可以),其他系列型号无芯片无条件测试就没有写相关代码。需要otg和存储权限,已测试通过。
什么老缺图?这把好了
源码,apk都在里面了,喜欢的拿去测试吧,基于GitHub开源软件AndroidIDE在安卓端开发的,什么拉到其他客户端其他IDE,你应该比我懂。
https://wwwo.lanzouq.com/iTS1p2uzqsvi
密码:gako
咋这入门级的就不废了,就这样,谢谢观看。

本帖子中包含更多资源

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

x

打赏

参与人数 1家元 +30 收起 理由
kkdkj + 30 謝謝分享

查看全部打赏

发表于 9 小时前 | 显示全部楼层
不容易呀   支持下哥们
回复 支持 反对

使用道具 举报

发表于 8 小时前 | 显示全部楼层
表示完全看不懂,也不知道哪来的勇气点进来的...


二○二五年五月一日
回复 支持 反对

使用道具 举报

发表于 8 小时前 | 显示全部楼层
虽然不太懂,还是得向你学习,学习你这种学习精神。
回复 支持 反对

使用道具 举报

发表于 7 小时前 来自手机浏览器 | 显示全部楼层
高手,坛友51好
回复 支持 反对

使用道具 举报

发表于 7 小时前 | 显示全部楼层
专研精神,单片机要学精,就得这么干!
回复 支持 反对

使用道具 举报

发表于 7 小时前 来自手机浏览器 | 显示全部楼层
用手机下载单片机程序感觉只有应急的时候用正常没人用吧,可以离线下载的
回复 支持 反对

使用道具 举报

发表于 5 小时前 | 显示全部楼层
这是大佬!学习一下
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层
这个确实钻得比较深了,要我都是直接找原厂的工具了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-1 19:14 , Processed in 0.187200 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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