stm8loader load boot2 success
This commit is contained in:
@@ -466,8 +466,8 @@ class STM8Bootloader:
|
|||||||
self.log("等待被用户中断", "ERROR")
|
self.log("等待被用户中断", "ERROR")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# 4. 等待100ms
|
# 4. 等待1s
|
||||||
time.sleep(0.1)
|
time.sleep(1)
|
||||||
|
|
||||||
# 5. 切换到128000bps并检查是否在boot2中
|
# 5. 切换到128000bps并检查是否在boot2中
|
||||||
self.log("验证boot2程序...", "INFO")
|
self.log("验证boot2程序...", "INFO")
|
||||||
@@ -612,8 +612,8 @@ class STM8Bootloader:
|
|||||||
raise STM8BootloaderError("信息数据长度不足")
|
raise STM8BootloaderError("信息数据长度不足")
|
||||||
|
|
||||||
# 解析握手数据
|
# 解析握手数据
|
||||||
boot0_addr = (data[2] << 8) | data[3] # 注意字节序
|
boot0_addr = (data[1] << 8) | data[0] # 注意字节序
|
||||||
main_addr = (data[6] << 8) | data[7] # 注意字节序
|
main_addr = (data[7] << 8) | data[6] # 注意字节序
|
||||||
|
|
||||||
info = {
|
info = {
|
||||||
'boot0_address': boot0_addr,
|
'boot0_address': boot0_addr,
|
||||||
@@ -627,10 +627,61 @@ class STM8Bootloader:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise STM8BootloaderError(f"获取信息失败: {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):
|
def interactive_mode(self):
|
||||||
"""交互模式"""
|
"""交互模式"""
|
||||||
self.log("\n=== STM8 Bootloader 交互模式 ===", "INFO")
|
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")
|
self.log("输入 'help' 查看详细用法\n", "INFO")
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
@@ -649,6 +700,11 @@ class STM8Bootloader:
|
|||||||
elif cmd == 'help':
|
elif cmd == 'help':
|
||||||
self.show_help()
|
self.show_help()
|
||||||
|
|
||||||
|
elif cmd == 'ls':
|
||||||
|
# 列出目录
|
||||||
|
path = "." if len(args) < 2 else args[1]
|
||||||
|
self.list_directory(path)
|
||||||
|
|
||||||
elif cmd == 'info':
|
elif cmd == 'info':
|
||||||
try:
|
try:
|
||||||
info = self.get_info()
|
info = self.get_info()
|
||||||
@@ -761,6 +817,8 @@ class STM8Bootloader:
|
|||||||
|
|
||||||
info - 显示MCU信息
|
info - 显示MCU信息
|
||||||
|
|
||||||
|
ls [path] - 列出目录内容
|
||||||
|
|
||||||
help - 显示此帮助信息
|
help - 显示此帮助信息
|
||||||
|
|
||||||
exit / quit - 退出交互模式
|
exit / quit - 退出交互模式
|
||||||
|
|||||||
Reference in New Issue
Block a user