platformio烧写STC8H1K08单片机程序失败:Serial port error: read timeout

本文主要是介绍platformio烧写STC8H1K08单片机程序失败:Serial port error: read timeout,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题

在使用platformio进行STC8H1K08单片机开发,在烧录编译好的程序时失败了,烧录过程日志如下:

 *  正在执行任务: C:\Users\23043036\.platformio\penv\Scripts\platformio.exe run --target upload Processing STC8H1K08 (platform: intel_mcs51; board: STC8H1K08)
----------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/intel_mcs51/STC8H1K08.html
PLATFORM: Intel MCS-51 (8051) (2.2.0) > Generic STC8H1K08
HARDWARE: STC8H1K08 11MHz, 1.25KB RAM, 8KB Flash
PACKAGES:- tool-stcgal @ 1.110.0 (1.10)- tool-vnproch55x @ 1.0.220407- toolchain-sdcc @ 1.40400.0 (4.4.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 0 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Checking size .pio\build\STC8H1K08\firmware.hex
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
Flash: [========  ]  76.3% (used 6251 bytes from 8192 bytes)
Configuring upload protocol...
AVAILABLE: stcgal
CURRENT: upload_protocol = stcgal
Looking for upload port...
Auto-detected: COM3
Uploading .pio\build\STC8H1K08\firmware.hex
Cycling power: done
Waiting for MCU: done
Target model:Name: STC8H1K08Magic: F734Code flash: 8.0 KBEEPROM flash: 4.0 KB
Target frequency: 11.058 MHz
Target BSL version: 7.3.12U
Target wakeup frequency: 35.825 KHz
Target ref. voltage: 1190 mV
Target mfg. date: 2021-03-18
Target options:reset_pin_enabled=Falseclock_gain=highwatchdog_por_enabled=Falsewatchdog_stop_idle=Truewatchdog_prescale=256low_voltage_reset=Truelow_voltage_threshold=0eeprom_erase_enabled=Truebsl_pindetect_enabled=Falsepor_reset_delay=longrstout_por_state=highuart1_remap=Falseuart2_passthrough=Trueuart2_pin_mode=push-pullepwm_open_drain=Trueprogram_eeprom_split=8192
Loading flash: 6251 bytes (Intel HEX)
Trimming frequency: 11.062 MHz
Switching to 19200 baud: done
Serial port error: read timeout
*** [upload] Error 1
====================================== [FAILED] Took 24.20 seconds ======================================

解决过程

使用串口进行程序烧写,platformio使用的是stcgal工具,日志显示的就是stcgal和单片机的串口交互过程,为了查看更详细的过程日志,我们将Debug模式打开(在C:\Users\23043036\.platformio\platforms\intel_mcs51\builder\main.py中的UPLOADERFLAGS下添加"-D"参数),然后查看烧录过程日志:

 *  正在执行任务: C:\Users\23043036\.platformio\penv\Scripts\platformio.exe run --target upload Processing STC8H1K08 (platform: intel_mcs51; board: STC8H1K08)
----------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/intel_mcs51/STC8H1K08.html
PLATFORM: Intel MCS-51 (8051) (2.2.0) > Generic STC8H1K08
HARDWARE: STC8H1K08 11MHz, 1.25KB RAM, 8KB Flash
PACKAGES:- tool-stcgal @ 1.110.0 (1.10)- tool-vnproch55x @ 1.0.220407- toolchain-sdcc @ 1.40400.0 (4.4.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 0 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Checking size .pio\build\STC8H1K08\firmware.hex
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
Flash: [========  ]  77.3% (used 6330 bytes from 8192 bytes)
Configuring upload protocol...
AVAILABLE: stcgal
CURRENT: upload_protocol = stcgal
Looking for upload port...
Auto-detected: COM3
Uploading .pio\build\STC8H1K08\firmware.hex
Cycling power: done
<- Packet data: 46 B9 68 00 38 50 00 A8 F3 90 B4 00 02 FF FF BF BF FF 26 9C F7 20 73 55 00 F7 34 0C 8B F1 AF DC 0F 1F 20 FF 00 30 00 20 04 A6 21 03 18 32 FF 7B 2E 5A 8B A6 C4 F4 FF 17 CA 16
Waiting for MCU: done
Target model:Name: STC8H1K08Magic: F734Code flash: 8.0 KBEEPROM flash: 4.0 KB
-> Packet data: 46 B9 6A 00 20 00 0C 00 00 17 00 2E 00 45 00 5C 00 73 00 8A 00 A1 00 B8 00 CF 00 E6 00 FF 00 06 86 16
Target frequency: 11.072 MHz
Target BSL version: 7.3.12U
Target wakeup frequency: 35.825 KHz
Target ref. voltage: 1190 mV
Target mfg. date: 2021-03-18
Target options:reset_pin_enabled=Falseclock_gain=highwatchdog_por_enabled=Falsewatchdog_stop_idle=Truewatchdog_prescale=256low_voltage_reset=Truelow_voltage_threshold=0eeprom_erase_enabled=Truebsl_pindetect_enabled=Falsepor_reset_delay=longrstout_por_state=highuart1_remap=Falseuart2_passthrough=Trueuart2_pin_mode=push-pullepwm_open_drain=Trueprogram_eeprom_split=8192
Loading flash: 6330 bytes (Intel HEX)
<- Packet data: 46 B9 68 00 20 00 0C 17 72 19 31 1A CC 1C 64 1E 08 1F A9 21 08 22 A9 24 44 25 B2 27 4A 28 F7 07 7E 16
-> Packet data: 46 B9 6A 00 20 00 0C B3 00 B4 00 B5 00 B3 01 B4 01 B5 01 B3 02 B4 02 B5 02 B3 03 B4 03 B5 03 09 18 16
<- Packet data: 46 B9 68 00 20 00 0C 23 F0 24 08 24 17 23 F0 24 0E 24 1D 23 F3 24 0B 24 20 23 F9 24 0E 24 23 06 B2 16
Trimming frequency: 11.051 MHz
-> Packet data: 46 B9 6A 00 0E 01 00 00 FF CC 03 B3 80 03 7A 16
<- Packet data: 46 B9 68 00 07 01 00 70 16
-> Packet data: 46 B9 6A 00 0B 05 00 00 5A A5 01 79 16
Switching to 115200 baud: done
<- Packet data: 46 B9 68 00 07 05 00 74 16
-> Packet data: 46 B9 6A 00 0B 03 00 00 5A A5 01 77 16
Serial port error: read timeout
*** [upload] Error 1
====================================== [FAILED] Took 24.72 seconds ======================================*  终端进程“C:\Users\23043036\.platformio\penv\Scripts\platformio.exe 'run', '--target', 'upload'”已终止,退出代码: 1。 *  终端将被任务重用,按任意键关闭。

可以看到在stcgal与单片机交互过程中,发送了报文后单片机没有响应,最终超时了,通过阅读stcgal的代码以及添加打印,可以知道是在擦除芯片时交互失败的,通过报文分析,发现stcgal发送的报文是没有问题的,那为什么单片机没有响应呢?????
在stcgal的github上,issues中有类似的打印,但是没有具体的解决办法,网上相关的资料也很少,查找了好久,最终是在platformio的github上找到了解决办法。

解决办法

对于stc8,烧录时需要将stcgal_protocol改为auto,其他系列怎么样不知道,但是STC8如此修改后确实是可以的。
修改C:\Users\23043036\.platformio\platforms\intel_mcs51\builder\main.py文件,添加了一下内容:

if stcgal_protocol == 'stc8':stcgal_protocol = 'auto'

详细内容为:

# Copyright 2014-present PlatformIO <contact@platformio.org>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.import sys
from os.path import joinfrom SCons.Script import ARGUMENTS, AlwaysBuild, Default, DefaultEnvironmentdef __getSize(size_type, env):# FIXME: i don't really know how to do this right. see:#        https://community.platformio.org/t/missing-integers-in-board-extra-flags-in-board-json/821return str(env.BoardConfig().get("build",{# defaults"size_heap": 1024,"size_iram": 256,"size_xram": 65536,"size_code": 65536,},)[size_type])def _parseSdccFlags(flags):assert flagsif isinstance(flags, list):flags = " ".join(flags)flags = str(flags)parsed_flags = []unparsed_flags = []prev_token = ""for token in flags.split(" "):if prev_token.startswith("--") and not token.startswith("-"):parsed_flags.extend([prev_token, token])prev_token = ""continueif prev_token:unparsed_flags.append(prev_token)prev_token = tokenunparsed_flags.append(prev_token)return (parsed_flags, unparsed_flags)env = DefaultEnvironment()
platform = env.PioPlatform()
board_config = env.BoardConfig()env.Replace(AR="sdar",AS="sdas8051",CC="sdcc",LD="sdld",RANLIB="sdranlib",OBJCOPY="sdobjcopy",OBJSUFFIX=".rel",LIBSUFFIX=".lib",SIZETOOL=join(platform.get_dir(), "builder", "size.py"),SIZECHECKCMD="$PYTHONEXE $SIZETOOL $SOURCES",SIZEPRINTCMD='"$PYTHONEXE" $SIZETOOL $SOURCES',SIZEPROGREGEXP=r"^ROM/EPROM/FLASH\s+[a-fx\d]+\s+[a-fx\d]+\s+(\d+).*",PROGNAME="firmware",PROGSUFFIX=".hex",
)env.Append(ASFLAGS=["-l", "-s"],CFLAGS=["--std-sdcc11"],CCFLAGS=["--opt-code-size",  # optimize for size"--peep-return",  # peephole optimization for return instructions"-m%s" % board_config.get("build.cpu"),],CPPDEFINES=["F_CPU=$BOARD_F_CPU", "HEAP_SIZE=" + __getSize("size_heap", env)],LINKFLAGS=["-m%s" % board_config.get("build.cpu"),"--iram-size",__getSize("size_iram", env),"--xram-size",__getSize("size_xram", env),"--code-size",__getSize("size_code", env),"--out-fmt-ihx",],
)if int(ARGUMENTS.get("PIOVERBOSE", 0)):env.Prepend(UPLOADERFLAGS=["-v"])# parse manually SDCC flags
if env.get("BUILD_FLAGS"):_parsed, _unparsed = _parseSdccFlags(env.get("BUILD_FLAGS"))env.Append(CCFLAGS=_parsed)env["BUILD_FLAGS"] = _unparsedproject_sdcc_flags = None
if env.get("SRC_BUILD_FLAGS"):project_sdcc_flags, _unparsed = _parseSdccFlags(env.get("SRC_BUILD_FLAGS"))env["SRC_BUILD_FLAGS"] = _unparsed#
# Target: Build executable and linkable firmware
#target_firm = env.BuildProgram()if project_sdcc_flags:env.Import("projenv")projenv.Append(CCFLAGS=project_sdcc_flags)AlwaysBuild(env.Alias("nobuild", target_firm))
target_buildprog = env.Alias("buildprog", target_firm, target_firm)#
# Target: Print binary size
#target_size = env.Alias("size", target_firm, env.VerboseAction("$SIZEPRINTCMD", "Calculating size $SOURCE")
)
AlwaysBuild(target_size)#
# Target: Upload firmware
#upload_protocol = env.subst("$UPLOAD_PROTOCOL")
upload_actions = []if upload_protocol == "stcgal":f_cpu_khz = int(board_config.get("build.f_cpu").strip("L")) / 1000stcgal_protocol = board_config.get("upload.stcgal_protocol")if stcgal_protocol == 'stc8':stcgal_protocol = 'auto'env.Replace(UPLOADER=join(platform.get_package_dir("tool-stcgal") or "", "stcgal.py"),UPLOADERFLAGS=["-P",stcgal_protocol,"-p","$UPLOAD_PORT","-t",int(f_cpu_khz),"-a","-D"],UPLOADCMD='"$PYTHONEXE" "$UPLOADER" $UPLOADERFLAGS $SOURCE',)upload_actions = [env.VerboseAction(env.AutodetectUploadPort, "Looking for upload port..."),env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE"),]# CH55x upload tool
elif upload_protocol == "ch55x":env.Replace(UPLOADER="vnproch55x",UPLOADERFLAGS=["-f"],UPLOADCMD="$UPLOADER $UPLOADERFLAGS $BUILD_DIR/${PROGNAME}.bin",)upload_actions = [env.VerboseAction(" ".join(["$OBJCOPY","-I","ihex","-O","binary","$SOURCE","$BUILD_DIR/${PROGNAME}.bin",]),"Creating binary",),env.VerboseAction("$UPLOADCMD", "Uploading ${PROGNAME}.bin"),]# custom upload tool
elif upload_protocol == "custom":upload_actions = [env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE")]else:sys.stderr.write("Warning! Unknown upload protocol %s\n" % upload_protocol)AlwaysBuild(env.Alias("upload", target_firm, upload_actions))#
# Setup default targets
#Default([target_buildprog, target_size])

这篇关于platformio烧写STC8H1K08单片机程序失败:Serial port error: read timeout的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083322

相关文章

#error用法

/* *检查编译此源文件的编译器是不是C++编译器 *如果使用的是C语言编译器则执行#error命令 *如果使用的是 C++ 编译器则跳过#error命令 */ #ifndef __cplusplus #error 亲,您当前使用的不是C++编译器噢! #endif #include <stdio.h> int main() {

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

加载资源文件失败

背景         自己以前装了一个海康的深度学习算法平台,试用期是一个月,过了一个月之后,因为没有有效注册码或者加密狗的支持了导致无法使用,于是打算卸载掉,在卸载一个软件的时候,无论是使用控制面板还是软件自带的卸载功能,总是卸载不掉,提示“加载资源文件失败”。该软体主要包括以下两部分: 用自带卸载功能卸载的时候分别提示如下:     用控制面板卸载的时候反应很慢,最后也是提示这个

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

yum install 失败报错`XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)

/export/env/py3.6/lib/liblzma.so.5: version `XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)   到/export/env/py3.6/lib cp /lib64/liblzma.so.5.2.2 . sudo ln -s -f liblzma.so.5.2.2 liblzm

brew install opencv@2 时报错 Error: Can't create update lock in /usr/local/var/homebrew/locks!

解决方案,报错里已经说明了: 我的解决方案: sudo chown -R "$USER":admin /usr/local   stackoverflow上的答案 I was able to solve the problem by using chown on the folder: sudo chown -R "$USER":admin /usr/local Also you'

美容美发店营销版微信小程序源码

打造线上生意新篇章 一、引言:微信小程序,开启美容美发行业新纪元 在数字化时代,微信小程序以其便捷、高效的特点,成为了美容美发行业营销的新宠。本文将带您深入了解美容美发营销微信小程序,探讨其独特优势及如何助力商家实现业务增长。 二、微信小程序:美容美发行业的得力助手 拓宽客源渠道:微信小程序基于微信社交平台,轻松实现线上线下融合,帮助商家快速吸引潜在客户,拓宽客源渠道。 提升用户体验: