tehmaze / xmodem

XMODEM protocol implementation for Python
https://pypi.org/project/xmodem/
MIT License
99 stars 56 forks source link

send error: expected NAK, CRC, EOT or CAN; got *** #45

Closed hitfzyangdianshi closed 3 years ago

hitfzyangdianshi commented 4 years ago

I try to use XMODEM to send a txt file to my embedded device. However, the error information is:

send error: expected NAK, CRC, EOT or CAN; got b'\x00' send error: expected NAK, CRC, EOT or CAN; got b'r' send error: expected NAK, CRC, EOT or CAN; got b't' send error: expected NAK, CRC, EOT or CAN; got b'O' send error: expected NAK, CRC, EOT or CAN; got b'e' send error: expected NAK, CRC, EOT or CAN; got b'W' send error: expected NAK, CRC, EOT or CAN; got b':' send error: expected NAK, CRC, EOT or CAN; got b'm' send error: expected NAK, CRC, EOT or CAN; got b'#' send error: expected NAK, CRC, EOT or CAN; got b'r' send error: expected NAK, CRC, EOT or CAN; got b' ' send error: expected NAK, CRC, EOT or CAN; got b' ' send error: expected NAK, CRC, EOT or CAN; got b' ' send error: expected NAK, CRC, EOT or CAN; got b'1' send error: expected NAK, CRC, EOT or CAN; got b't' send error: expected NAK, CRC, EOT or CAN; got b'1' send error: expected NAK, CRC, EOT or CAN; got b'\n'

...................

my code on my computer is:

def getc(size, timeout=10): return mSerial.port.read(size) or None

def putc(data, timeout=10): return mSerial.port.write(data) # note that this ignores the timeout

stream = open('test1.txt', 'rb') modem = XMODEM(getc, putc) modem.send(stream)


On the embedded device, I use command "rx -X -t 100 test1.txt" to wait for receiving the file

hitfzyangdianshi commented 4 years ago

and I met another error when I run receiver program on the device `send error: expected ACK; got b'\x1b' for block 1

send error: expected ACK; got b'[' for block 1

send error: expected ACK; got b'2' for block 1

send error: expected ACK; got b'3' for block 1 send error: expected ACK; got b'D' for block 1 send error: expected ACK; got b'\xfe' for block 1 send error: expected ACK; got b'0' for block 1 send error: expected ACK; got b'1' for block 1 send error: expected ACK; got b'2' for block 1 send error: expected ACK; got b'3' for block 1 send error: expected ACK; got b'4' for block 1 send error: expected ACK; got b'5' for block 1 send error: expected ACK; got b'6' for block 1 send error: expected ACK; got b'7' for block 1 send error: expected ACK; got b'8' for block 1 send error: expected ACK; got b'9' for block 1 send error: expected ACK; got b'0' for block 1 send error: NAK received 17 times, aborting.`

the code on the device is:

''' import serial

from xmodem import XMODEM

ser=serial.Serial("/dev/ttyS2",57600)

def getc(size,timeout=10):

return ser.read(size) or None

def putc(data,timeout=10):

return ser.write(data) # note that this ignores the timeout

if not ser.isOpen():

ser.open()

modem=XMODEM(getc,putc)

stream=open("receive_test01.txt","wb")

modem.recv(stream)

'''

hitfzyangdianshi commented 4 years ago

receiver debug: DEBUG:xmodem.XMODEM:recv: SOH DEBUG:xmodem.XMODEM:recv: data block 1 ERROR:xmodem.XMODEM:expected sequence 1, got (seq1=26, seq2=229), receiving next block, will NAK. WARNING:xmodem.XMODEM:recv error: purge, requesting retransmission (NAK)

sender debug: DEBUG:xmodem.XMODEM:Begin start sequence, packet_size=128 DEBUG:xmodem.XMODEM:16-bit CRC requested (CRC). DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'\x1b' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'[' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'1' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'3' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'D' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'\xfe' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'0' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'q' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'w' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'e' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'r' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b't' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'y' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'u' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'i' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'o' for block 1 DEBUG:xmodem.XMODEM:send: block 1 ERROR:xmodem.XMODEM:send error: expected ACK; got b'p' for block 1 ERROR:xmodem.XMODEM:send error: NAK received 17 times, aborting.

cheesecakegangster commented 2 years ago

did you end up figuring it out or did you give up? i'm running into the same problem

hitfzyangdianshi commented 2 years ago

did you end up figuring it out or did you give up? i'm running into the same problem

Hi, I tried this long long time ago. If my memory is not wrong, I remembered the reason why I got this error was that I used the same serial for transferring the file and for the console. If you meet the same problem, maybe it is the problem that the serial you are using has some noise. Just make sure that the serial you are using is used for transferring messages or files only.

cheesecakegangster commented 2 years ago

i actually figured out the problem by checking the data with serial port monitor. i'm talking to my board with a half-duplex protocol and the python program kept the serial bus so busy that the device could not possibly reply with an ACK even if it tried. i think this is similar if not the same as the problem you experienced