系统相关
首页 > 系统相关> > STC8PROG - Linux下的 STC8G STC8H 烧录工具

STC8PROG - Linux下的 STC8G STC8H 烧录工具

作者:互联网

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没公开协议, 如果自己通过逻辑分析仪去反向, 要花的时间没法估计, 加上对串口通信也不熟悉, 所以一直没有想法. 但是最近遇到的两个项目使得这件事可行了

行动

结果

在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,stcgal,STC8H,stc8prog,串口,波特率,MCU
来源: https://www.cnblogs.com/milton/p/15729563.html