STC8PROG - Linux下的 STC8G STC8H 烧录工具

动机

在Linux下用 VSCode + PlatformIO 做开发, 因为VSCode的界面字体代码提示, 以及自定义的类JetBrain风格快捷键, 开发体验非常好. 在这个环境下, 有两个基础工具链必不可少, 一个是SDCC, 另一个是stcgal. 前者是MCS-51的编译工具, 后者是用于STC系列MCU的烧录工具. 在前一阵开始使用STC8后, stcgal这个工具链掉链子了, 无法烧录STC8系列的芯片. 进一步了解后发现的几个问题:

PlatformIO 的 MCS-51 Platform 停更

PlatformIO 项目是活跃的, 但是这个平台模块几乎是停滞了. 项目地址 platformio/platform-intel_mcs51, 可以看到最后一次有效更新在14个月前, PR也一直未合并, pull/41. 在 MCS-51 Platform 上整合的 stcgal 还停留在 1.5 版本, 需要升级到 1.6 版本才能提供 STC8A 的支持. 好在这个问题可以通过手工升级解决, PlatformIO手工升级stcgal到1.6版本. 升级完之后, 可以对 STC8A8K64S4 写入了.

stcgal也停更了

stcgal 1.6 只支持 STC8A8K64S4A12 和 STC8F 系列(后者未验证), 不支持 STC8G,STC8H,STC8A8K64D4系列.

stcgal项目地址 grigorig/stcgal, 可以看到最后一次有效更新在12个月前, PR也一直未合并. 也许作者已经放弃这个项目了. 这是真正的问题, 因为没有其它可以在Linux下烧录这些STC8芯片的替代品. 所以后面几个月, 要写只能在Windows下用Keil MDK写, 太难用了.

成因

一周前我应该是不会去写的, 因为STC没公开协议, 如果自己通过逻辑分析仪去反向, 要花的时间没法估计, 加上对串口通信也不熟悉, 所以一直没有想法. 但是最近遇到的两个项目使得这件事可行了

  • w80xprog John-sanpe/w80xprog, 这是一个C语言写的, Linux下的W806烧录工具, 使用termios做串口通信, 代码风格不错, 可以作为串口编程的参考.
  • stc.ninja aguegu/stc.ninja, 一个JS单页应用, 做STC8G/STC8H的串口烧录, 很遗憾这并不是开源项目, 但是在项目主页stc.ninja/上提供了一个信息, "Thankfully, there is a code sample for flash programming on STC8H datasheet, Page 978", 现在看到的手册应该已经更新过了, 实际页码对应不上, 但是可以确定是STC8H手册的附录N"使用第三方 MCU 对 STC8H 系列单片机进行 ISP 下载范例程序", 里面提供了完整的C代码, 用于实现STC MCU去烧录STC MCU, 这里面提供了启动握手, 切换波特率和烧录部分的协议细节. 虽然还缺乏信息解析和硬件设置的协议部分, 但是用于实现一个烧录过程足够了.

行动

  • 12月22日, 下午做了一些验证, 通过termios走通了启动响应, 但是设置波特率这步一直没成功
  • 12月23日, 上逻辑分析仪, 解决了昨天的问题, 因为串口设置要增加偶校验位, 后面又解决了0D被转换为0A导致校验失败的问题, 也是串口的属性配置. 还遇到了一个FF被接收为两个FF的问题, 这个在重新拔插USB2TTL后就消失了, 太坑人了. 在晚上出去同学聚会前, 已经将写入搞定了, 但是程序没跑起来, 和正确的流程比对了一下, 字节全部不对, 才发现还有一个HEX到BIN的转换问题. 晚上回来, 把这部分也改好了.
  • 12月24日, 对能找到的STC15和STC8系列都做了测试, 遇到了0x13字节消失的情况, 还是串口属性配置的问题, 需要关闭流控. 之后就是无聊且费时的扫尾工作, 整理代码, 美化输出, 整理文档, 建仓库, 包括写这篇记录.

结果

在Ubuntu20.04下测试的, 理论上支持所有X86 64位的Linux环境, 经过测试可用的型号: STC8G1K08A, STC8H1K08, STC8H3K32S2, STC8H3K64S4, STC8A8K64D4, 测试失败的型号: STC8A8K64S4A12, STC15F60S2, 这两个都是stcgal能支持的

代码已经上传, 可以自行编译, 也可以直接下载二进制可执行文件

使用

烧录时需要对MCU重新加电, 过程和stcgal, 以及Windows下的stc-isp工具是一样的.

参数列表

Usage: stc8prog [options]...
-h, --help display this message
-p, --port <device> set device path
-s, --speed <baud> set download baudrate
-f, --flash <file> flash chip with data from hex file
-e, --erase erase the entire chip
-d, --debug enable debug output
-v, --version display version information Baudrate options:
4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 500000, 576000,
921600, 1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 3500000,
4000000

检查

与MCU作握手通信, 过程不作任何写入. 过程中先通过2400波特率握手, 再切换到115200波特率握手

# 2400 baud -> 115200 baud
./stc8prog -p /dev/ttyUSB0

可以使用参数-s指定其它的波特率(必须在可选的波特率列表里)

# 2400 baud -> 1152000 baud
./stc8prog -p /dev/ttyUSB0 -s 1152000

擦除

擦除整块MCU

./stc8prog -p /dev/ttyUSB0 -e

烧录

建议在烧录时带上擦除参数

./stc8prog -p /dev/ttyUSB0 -e -f foo.hex

使用更高的波特率可以加速烧录

./stc8prog -p /dev/ttyUSB0 -s 1152000 -e -f foo.hex

从源码构建

安装 DEV-tools

sudo apt install build-essential

检出项目

# GitHub
git clone https://github.com/IOsetting/stc8prog.git
# Gitee
git clone https://gitee.com/iosetting/stc8prog.git

编译

cd stc8prog
make

声明

代码使用Apache-2.0授权, 虽然软件并不修改硬件参数, 烧录使MCU变砖的概率极小, 但不专业的操作以及各种意外情况依然存在变砖或者冒烟的可能性, 所以请谨慎操作, 本人不对阅读及使用此软件造成的任何直接的或间接的权益损害负责.

STC8PROG - Linux下的 STC8G STC8H 烧录工具的更多相关文章

  1. 在Linux下使用RAID--使用mdadm工具创建软件Raid 0(1)

    在Linux下使用RAID--使用mdadm工具创建软件Raid 0(1) RAID即廉价磁盘冗余阵列,其高可用性和可靠性适用于大规模环境中,相比正常使用,数据更需要被保护.RAID是一些磁盘的集合, ...

  2. 推荐一个linux下的web压力测试工具神器webbench

    推荐一个linux下的web压力测试工具神器webbench2014-04-30 09:35:29   来源:   评论:0 点击:880 用多了apache的ab工具之后你就会发现ab存在很多问题, ...

  3. Linux下查询CPU 缓存的工具

    在Linux下能够使用例如以下工具查询CPU缓存: 方式1: $ lscpu L1d cache: 32K <span style="white-space:pre"> ...

  4. Linux下获取arm的交叉编译工具链

    转载请注明文章:Linux下获取arm的交叉编译工具链 出处:多客博图 这里介绍,Linux下获取arm的交叉编译工具链,比如arm-linux-gnueabihf-gcc.arm-linux-gne ...

  5. Linux下压缩工具gzip和归档工具tar及其实战shell应用

    Linux下压缩工具gzip和归档工具tar及其实战shell应用       第一章:gzip的使用技巧 gzip [option]... file... -d: 解压缩,相当于gunzip; -# ...

  6. Perf -- Linux下的系统性能调优工具,第 1 部分 应用程序调优的使用和示例 Tracepoint 是散落在内核源代码中的一些 hook,一旦使能,它们便可以在特定的代码被运行到时被触发,这一特性可以被各种 trace/debug 工具所使用。Perf 就是该特性的用户之一。

    Perf -- Linux下的系统性能调优工具,第 1 部分 应用程序调优的使用和示例 https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/i ...

  7. Linux下四款常见远程工具比较

    摘要:Linux远程可不像Windows下那么方便,主要是连接的速度.显示的画质不能令人满意(延迟.撕裂).本文只是说一下我用过的四款远程工具.Anydesk官网:https://anydesk.co ...

  8. Perf Event :Linux下的系统性能调优工具

    Perf Event :Linux下的系统性能调优工具 2011-05-27 10:35 刘 明 IBMDW 字号:T | T Perf Event 是一款随 Linux 内核代码一同发布和维护的性能 ...

  9. Linux下三个密码生成工具

    http://code.csdn.net/news/2820879 想出一个难破解且容易记的密码对不是一件简单的事情.在我为电脑设定一个新密码,或者在线注册了一个新的账号,需要输入密码的时候,脑袋就一 ...

随机推荐

  1. “微信小程序从分享卡片进入,第一次获取不到用户uid、第二次能获取到用户uid”解决方法

    用uniapp开发微信小程序时,有一个需求是分享罐表详情页面给其它用户,其它用户(在已经登录的状态下)点击分享卡片可以直接跳转到该罐表详情页,且能显示自己是否已经收藏该罐表(收藏状态由用户uid和罐表 ...

  2. 洛谷 P4707 - 重返现世(扩展 Min-Max 容斥+背包)

    题面传送门 首先看到这种求形如 \(E(\max(T))\) 的期望题,可以套路地想到 Min-Max 容斥 \(\max(S)=\sum\limits_{T\subseteq S}(-1)^{|T| ...

  3. dotnet 将自动代码格式化机器人带入团队 GitLab 平台

    给团队带入一个 代码格式化机器人 能提升团队的幸福度,让团队的成员安心写代码,不用关注代码格式化问题,将格式代码这个粗活交给机器人去做.同时也能减少在代码审查里撕格式化问题的时间,让更多的时间投入到更 ...

  4. Anaconda 安装与卸载

    Anaconda是一个免费开源的Python和R语言的发行版本,用于计算科学(数据科学.机器学习.大数据处理和预测分析),Anaconda致力于简化软件包管理系统和部署.Anaconda的包使用软件包 ...

  5. LeetCode替换空格

    LeetCode 替换空格 题目描述 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 实例 1: 输入:s = "We are happy." 输 ...

  6. [PE结构]导出表结构浅析

    导出函数的总数-->以导出函数序号最大的减最小的+1,但导出函数序号是可自定义的,所以NumbersOfFunctions是不准确的 1.根据函数名称找,函数名称表->对应索引函数序号表中 ...

  7. LeetCode33题——搜索旋转排序数组

    1.题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存 ...

  8. Spring Cloud使用

    一.创建提供者工程01-provider-8081 (1) 创建工程 创建一个Spring Initializr工程,并命名为01-provider-8081.导入Lombok.Web.JPA及MyS ...

  9. redis入门到精通系列(六):redis的事务详解

    (一)事务的概念 谈到数据库的高级应用,不可避免会谈到事务.熟悉mysql的朋友们对事务肯定不陌生,简单来讲事务就是控制一个数据库操作序列要么全部执行要么全部不执行.今天我们就来了解redis中的事务 ...

  10. 【编程思想】【设计模式】【结构模式Structural】MVC

    Python版 https://github.com/faif/python-patterns/blob/master/structural/mvc.py #!/usr/bin/env python ...