stm8loader load boot2 success
This commit is contained in:
@@ -466,8 +466,8 @@ class STM8Bootloader:
|
||||
self.log("等待被用户中断", "ERROR")
|
||||
return False
|
||||
|
||||
# 4. 等待100ms
|
||||
time.sleep(0.1)
|
||||
# 4. 等待1s
|
||||
time.sleep(1)
|
||||
|
||||
# 5. 切换到128000bps并检查是否在boot2中
|
||||
self.log("验证boot2程序...", "INFO")
|
||||
@@ -612,8 +612,8 @@ class STM8Bootloader:
|
||||
raise STM8BootloaderError("信息数据长度不足")
|
||||
|
||||
# 解析握手数据
|
||||
boot0_addr = (data[2] << 8) | data[3] # 注意字节序
|
||||
main_addr = (data[6] << 8) | data[7] # 注意字节序
|
||||
boot0_addr = (data[1] << 8) | data[0] # 注意字节序
|
||||
main_addr = (data[7] << 8) | data[6] # 注意字节序
|
||||
|
||||
info = {
|
||||
'boot0_address': boot0_addr,
|
||||
@@ -627,10 +627,61 @@ class STM8Bootloader:
|
||||
except Exception as e:
|
||||
raise STM8BootloaderError(f"获取信息失败: {e}")
|
||||
|
||||
@staticmethod
|
||||
def list_directory(path: str = "."):
|
||||
"""列出目录内容"""
|
||||
try:
|
||||
items = os.listdir(path)
|
||||
|
||||
# 分离目录和文件
|
||||
dirs = []
|
||||
files = []
|
||||
|
||||
for item in items:
|
||||
full_path = os.path.join(path, item)
|
||||
if os.path.isdir(full_path):
|
||||
dirs.append(item + "/")
|
||||
else:
|
||||
files.append(item)
|
||||
|
||||
# 排序
|
||||
dirs.sort()
|
||||
files.sort()
|
||||
|
||||
# 显示
|
||||
print(f"目录: {os.path.abspath(path)}")
|
||||
print()
|
||||
|
||||
if dirs or files:
|
||||
# 显示目录
|
||||
for d in dirs:
|
||||
print(f" {d}")
|
||||
|
||||
# 显示文件
|
||||
for f in files:
|
||||
# 获取文件大小
|
||||
file_path = os.path.join(path, f)
|
||||
size = os.path.getsize(file_path)
|
||||
|
||||
# 格式化文件大小
|
||||
if size < 1024:
|
||||
size_str = f"{size} B"
|
||||
elif size < 1024 * 1024:
|
||||
size_str = f"{size/1024:.1f} KB"
|
||||
else:
|
||||
size_str = f"{size/(1024*1024):.1f} MB"
|
||||
|
||||
print(f" {f:30} {size_str:>10}")
|
||||
else:
|
||||
print(" 空目录")
|
||||
|
||||
except Exception as e:
|
||||
print(f"[ERROR] 无法列出目录: {e}")
|
||||
|
||||
def interactive_mode(self):
|
||||
"""交互模式"""
|
||||
self.log("\n=== STM8 Bootloader 交互模式 ===", "INFO")
|
||||
self.log("可用命令: read, write, go, info, help, exit", "INFO")
|
||||
self.log("可用命令: read, write, go, info, ls, help, exit", "INFO")
|
||||
self.log("输入 'help' 查看详细用法\n", "INFO")
|
||||
|
||||
while True:
|
||||
@@ -649,6 +700,11 @@ class STM8Bootloader:
|
||||
elif cmd == 'help':
|
||||
self.show_help()
|
||||
|
||||
elif cmd == 'ls':
|
||||
# 列出目录
|
||||
path = "." if len(args) < 2 else args[1]
|
||||
self.list_directory(path)
|
||||
|
||||
elif cmd == 'info':
|
||||
try:
|
||||
info = self.get_info()
|
||||
@@ -761,6 +817,8 @@ class STM8Bootloader:
|
||||
|
||||
info - 显示MCU信息
|
||||
|
||||
ls [path] - 列出目录内容
|
||||
|
||||
help - 显示此帮助信息
|
||||
|
||||
exit / quit - 退出交互模式
|
||||
|
||||
Reference in New Issue
Block a user