使用STC8H通过串口传输SPI Flash的内容,通过串口实现到PC端的备份
要进行串口通信,不产生读写冲突,所有的请求都从PC端发起
1. 确定波特率校验传输方式
2. 确定好协议,分隔符,这里使用的是\r\n\r\n
3. 串口通信传输4MB的内容,居然也要45s,分了8KB 500个包,即使波特率到了2000000,是传统的115200的差不多18倍,依然很慢
4. 确定命令格式,保证好每个命令都不冲突,挪位
#!/usr/bin/python3
import serial
import datetime
binary_file = open("spi.bin", "wb")
try:
ser = serial.Serial(
port='COM6',
baudrate=2000000,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=None)
ser.set_buffer_size(rx_size=12800, tx_size=12800)
# read version
cmd = bytearray([0xFF])
ser.write(cmd)
version = ser.read_until(bytearray([0x0D,0x0A,0x0D,0x0A]))
print(version.decode("utf-8").rstrip())
# read sfp
cmd = bytearray([0xFE])
ser.write(cmd)
sdfp = ser.read_until(bytearray([0x0D,0x0A,0x0D,0x0A]))
print(sdfp.decode("utf-8").rstrip())
i = int(0)
index = 1
maximum = 0x400000
now = datetime.datetime.now()
print(now.time())
while i < maximum :
cmd = bytearray([0xAE, (i>>16)%256, (i>>8)%256, i%256])
ser.write(cmd)
byts = ser.read(8192)
if (index % 100) == 1 :
now = datetime.datetime.now()
print(index, now.time())
binary_file.write(byts)
i += 8192
index += 1
now = datetime.datetime.now()
print(now.time())
finally:
binary_file.close()
pass
看来走USB协议才是正确的方式,QIO的方式单片机不支持,作罢
实现到这里,串口该踩的坑都遇到了,包括误码,丢包
以此为基础,扩展出,刷写SPI非常容易了
Version 1.1.0 By XL009273
JEDEC:0x40 0x16 0x00
Device ID:0xEF 0x15
SFDP:0xFF 0xFF 0xFF 0x01