问题描述
我正在使用 Lepton 3.5 模块和带有 RaspBerry Pi 3B 的 Breakout Board v2.0。目标是在启用遥测的情况下获得 RAW14 视频输出。现在,我正在尝试使用带有 spidev 库的 Python 3.7 进行 SPI 通信,但我遇到了一些问题。我正在使用 Flir Lepton 工程数据表 203 来指导我。
附加的是我的代码,最初 SPI 端口是打开的,我一次读取 164 个字节,因为视频格式是 RAW14 禁用遥测,但我从 SPI 获得的原始值似乎不正确,附加是输出的一些图像。通过检查报头 ID 中的数据包编号和 ttt 值,对于 2.2MHz 的 SPI 速度,我获得了大约 35% 的有效帧,但是当我检查数据包编号 20 的分段值时,我几乎没有得到有效的分段值。当我切换到 20MHz 的 SPI 速度时,我收到了大约 9% 的有效帧。
收到的一些“有效”数据包的标头只有零。您能否帮助我进行一些未来的步骤或一些有关从 SPI 端口接收正确数据所需的信息?我一次获取 164 个字节的方法正确吗?如何确保数据包不会不同步?
我的代码:
import spidev
import time
spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 2200000
spi.mode = 0b01 # mode = 3
segmentation=[]
discard = 0
valid = 0
counter = 0
counter2 = 0
for i in range(1000):
#while True:
data = spi.readbytes(164)
print("Packet:",data)
header = data[:4]
h1 = format(header[0],'08b')
h2 = format(header[1],'08b')
h3 = format(header[2],'08b')
h4 = format(header[3],'08b')
header_bits = h1 + h2 + h3 + h4
id_field = h1 + h2
crc = h3 + h4
first = id_field[0]
ttt = id_field[1:4]
packet_number = id_field[4:16]
print("first: {},TTT: {},packet number: {},CRC: {}". format(first,ttt,packet_number,crc))
if packet_number == '000000010100':
segmentation.append(ttt)
if first != '0':
print("Priemrio Bit diferente de 0. Repeticoes: {}",counter)
counter2 = counter2 + 1
elif packet_number[0:4] == '1111':
print("------------- discard Package ------------------\n")
discard = discard + 1
else:
print("------------- Valid Package --------------------\n")
valid = valid + 1
counter = counter + 1
#break
print("Valid: {},Errors: {}".format(valid,discard))
print("Valid percentage: {:.2f}%".format(valid/(discard+valid+counter2) * 100))
print(counter2)
print("Segmentation: ",segmentation)
“有效”帧的输出:(来自 SPI 端口的 164 字节红色)
Packet: [0,245,155,251,193,52,17,160,225,128,64,15,255,192,0]
first: 0,TTT: 000,packet number: 000000000000,CRC: 0000000000000000
------------- Valid Package --------------------
无效的输出:
Packet: [63,3,214,113,130,121,29,36,2,TTT: 011,packet number: 111111111111,CRC: 1111111111111111
------------- discard Package ------------------
恢复 1000 个数据包:
Valid: 321,Errors: 646
Valid percentage: 32.10%
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)