关于python中socket如何与硬件设备通信发送16进制指令并做crc16校验

本文介绍在ARM硬件上通过socket客户端发送16进制指令并进行CRC校验的过程,包括Python实现的CRC16校验算法及指令发送流程。
部署运行你感兴趣的模型镜像

1.需求说明

现有硬件设备arm,上有网板,通过socket客户端发送指令与接收数据并做crc校验,指令类型"01 24 3F 4D EC"等组合的16进制数据,且指令也需要做crc校验,并附加到指令后面。

2.python如何做crc校验

def crc16(data, length):
    my_data = bytearray(2)
    xda = 0xFFFF
    x_poly = 0xA001
    for z in range(length):
        xda ^= data[z]
        for j in range(8):
            x_bit = int(xda & 0x01)
            xda >>= 1
            if x_bit == 1:
                xda ^= x_poly
    my_data[0] = xda & 0xFF
    my_data[1] = xda >> 8
    return my_data

此代码是从C转换过来的,所以可以很好的与底层硬件切合。

3.如何发送指令并使用crc16函数

SendStr = '01 24'
hexValuesSplit = SendStr.split(' ')
bs = bytearray(4)  #一般是1024,不过为了数据整洁,确定大小后可以直接设置大小
i = 0
for my_hex in hexValuesSplit:
    if my_hex != "":
        value = int(my_hex, 16)
        bs[i] = value
        i += 1
tempB = crc16(bs, i)  # 获取校验结果
bs[i] = tempB[0]
bs[i + 1] = tempB[1]
i = i + 2  # 这个是记录数据长度,有时候需要发送
for item in bs:
    print(hex(item))  # 最后两位是校验结果 0x0 0x3b
socket.send(bs)  # 发送

 

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值