我有一个连接到覆盆子Pi的NRF52芯片。我想通过UART将HEX文件从Raspberry Pi发送到NRF,以便我可以制作一个甜蜜的引导加载程序。我正在制作一个Python脚本,该脚本逐行读取十六进制文件并将其发送。我现在的问题是:020000040000fa之类的行被发送为0x3a,0x30,0x32等。我不想发送ASCII,我想发送原始数据。.所以0x02,0x00等。我想去本质上是0x2,而不是0x30,0x32,但不知道如何...有人可以帮助或提出一些想法?我的python技能远低于标准杆...我试图添加行[1] 线[2]并将其编码为十六进制,但它仅给出了3032 ...这是我目前拥有的代码。任何想法或帮助都很棒。
欢呼,
eric
1 #! /usr/bin/python
2 import binascii
3 import time
4 import serial
5 import codecs
6
7 PORT = '/dev/ttyUSB0'
8 BAUD_RATE = 9600
9
10 print 'opening serial port'
11 time.sleep(1)
12 myshit = []
13 ser = serial.Serial(PORT, BAUD_RATE)
14 i = 1
15 with open("blinkybootloader.hex", "rb") as file:
16 for line in file:
18 for l in line:
19 print line[i],
20
21 i+=1
22 time.sleep(.5)
23 print line
24 time.sleep(.1)
25 ser.write(myshit)
〜
我不确定我是否正确理解您的问题。但是,似乎您想将每一行text :xxxxxxxxxx ... ... 并将所有字符的所有字符解释为一对十六进制字符,然后将这些字符转换为这些字符的字符串您可以通过串行端口将其发送到Raspberry Pi的字节。
在这种情况下,我会使用正则表达式包来"编译"以下regexp:
import re
chunk = re.compile('..')
# ... chunk.findall(x) returns a sequence of x broken into 2-character chunks
然后在您的示例中第16行之后,我会做这样的事情:
for line in file:
data = b''.join(chr(int(x, 16)) for x in chunk.findall(line[1:])])
print data
ser.write(data)
time.sleep(0.1)
请注意将线路切成薄片成对数字的技巧,然后使用额外的(可选(base = grognm将其从文本转换为整数,然后使用 int((函数,并使用所得整数是对内置 chr(((转换为字符(函数的参数。
b''此JON的文字是指定这是 byte 字符串。在Python 2.7中,这并不是特别重要(甚至在Python 2.7之前都没有支持(。您只需在Python的旧版本中使用一个普通的旧字符串即可。但是在python 3.x中,您必须使用字节字符串或 bytearray 对象,因为python 3" strings"是Unicode,并且必须明确编码和解码。