如何从python文件发送apacket到我的uart?

时间:2016-11-23 15:57:54

标签: python uart

我想通过发送一些数据包通过Python文件在笔记本电脑和UART之间进行通信: 我的数据包包含=

   2 bytes for Star of frames+
   2 bytes for command types+ 
   1 byte for the size of my data+ 
   16 bytes for my data+
   1 byte for my CRC.

我有一个file.txt文件,其中包含我要发送的数据示例:

0xccddeeff0x8899aabb0x445566770x00112233

通过使用我的python文件,我想从file.txt(我已经做过)中读取数据,然后我想添加所有其余的字段,以便为uart发送所有数据包。

import string
import serial
import time
from array import array

#Plaintxt.txt File
with open('C:\\Users\\user\\Win_My_Scripts\\test.txt') as f:
    content = f.readlines()
#serial port   
ser = serial.Serial(
                    port='COM4',\
                    baudrate=230400,\
                    parity=serial.PARITY_NONE,\
                    stopbits=serial.STOPBITS_ONE,\
                    bytesize=serial.EIGHTBITS,\
                    timeout=0)  
#enter inputs plaintext & key 
print ('Plaintext=')
SOF= '0x124'
ENCRYPT_PLAINTEXT= '0x7772'
SEND_CYPHERTEXT  ='0x7773'
SIZE_OF_FRAME= '0x10'
CRC8= '0x00'
for a in range (0,4):
    line_array=content[a]
    plaintxt_16b=line_array[0:16]
    input_plaintext= SOF+ENCRYPT_PLAINTEXT+SIZE_OF_FRAME+plaintxt_16b+CRC8

    print(plaintxt_16b)

    ser.write (input_plaintext.encode())


    time.sleep(0.4)
#closing the serial port
ser.close()

所以我的问题是:  1 /如何连接这些变量以获得这样的数据包?

     0x1240x77720x100xccddeeff0x8899aabb0x445566770x001122330x00

2 /我的UART然后会从cmd.exe中读取该数据包,你认为这是将数据从python发送到UART的最佳解决方案吗?如果你有任何其他主张,我将非常感激?

提前致谢。

1 个答案:

答案 0 :(得分:0)

struct.pack就是你想要的。它打包类似于C结构的数据。您的示例有两个16位值,一个字节长度,四个32位值和一个8位CRC。鉴于以下内容:

SOF = 0x124
CMD = 0x7772
data = [0xccddeeff,0x8899aabb,0x44556677,0x00112233]
CRC8 = 0

这将打包little-endian(首先发送多字节整数的最低字节)或big-endian。 hexlify仅用于显示,因此您可以按生成的顺序查看字节的十六进制值。

import struct
from binascii import hexlify
packet = struct.pack('<HHBLLLLB',SOF,CMD,4*len(data),data[0],data[1],data[2],data[3],CRC8)
print(hexlify(packet))
packet = struct.pack('>HHBLLLLB',SOF,CMD,4*len(data),data[0],data[1],data[2],data[3],CRC8)
print(hexlify(packet))

输出:

b'2401727710ffeeddccbbaa9988776655443322110000'
b'0124777210ccddeeff8899aabb445566770011223300'