STC8H 串口通讯协议 - PC端通讯实现

使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值