我有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上 但不知道如何解决它
提前谢谢
答案 0 :(得分:0)
别说回答。 问题是第9位。
如果我们发送字节格式,则位9为01或奇偶校验标记
否则第9位为00或奇偶校验空间