9位串行协议中的BCD格式

时间:2017-01-14 16:56:15

标签: python-2.7

我有9位串行协议。 文档说这个: 对于不直接支持唤醒模式的UART / DUART,校验位 可用来代替唤醒位。

我使用USB转串口pl2303:

import time, serial

if ser.is_open == False:
try:
    ser.port = '/dev/ttyUSB0'
    ser.open()
except SerialException:
    ser.port = '/dev/ttyUSB1'
    ser.open()

def get_curent_credit():
    ser.parity = serial.PARITY_MARK
    ser._stopbits = serial.STOPBITS_ONE
    cmd = '1A'
    cmd = mashin_n + cmd
    cmd = cmd + crc_sas(cmd)
    ser.flushInput()

    # Not needed, but without this command not work
    ser.write('80'.decode('hex')) 
    time.sleep(1)

    # cmd = 011Aa603
    ser.write(cmd.decode('hex'))
    response =  ser.read(8).encode('hex')
    crc_sas(response, chk=True)
    return int(response[4:-4])*0.01

此代码有效。 但如果我尝试不同的命令。 018A001000000253ca 哪里: 01 =地址1b

8A =命令1b

00100000 = 4 BCD

02 =税1b

53ca = CRC

这不起作用

我认为问题出在BCD上 但不知道如何解决它

提前谢谢

1 个答案:

答案 0 :(得分:0)

别说回答。 问题是第9位。

如果我们发送字节格式,则位9为01或奇偶校验标记

否则第9位为00或奇偶校验空间