Получение файла через XModem на HyperTerminal

Мне нужно отправить файл через последовательный порт в мою программу, которая работает на встроенном устройстве с использованием протокола HyperTerminal и XMODEM. Последовательная связь в порядке (9600 бод, 1 стоповый бит, без контроля четности, 8 битов данных, без управления потоком), поскольку и отправка команд, и получение ответов работают правильно.

Когда я посылаю команду "загрузить", устройство отвечает, когда оно будет готово, и ждет файл. Затем в HyperTerminal я перехожу к Transfer->Send File..., выбираю файл и протокол XMODEM, затем нажимаю «Send». После нажатия кнопки «Отправить» загрузка не начинается и появляется сообщение об истечении времени ожидания.

Во время отладки я вижу, что программа не получает ни одного байта из последовательного порта, но если я отправлю байт, нажав клавишу, программа его получит. Могу ли я предположить, что проблема в том, что HyperTerminal ничего не отправляет? Это почему?


person Daniele Nardi    schedule 14.11.2014    source источник
comment
Вы можете переформулировать этот вопрос так, чтобы он явно касался разработки программного обеспечения. Если вы разрабатываете код XMODEM для встроенного устройства, это может быть законным вопросом, но, на первый взгляд, это не по теме SO и, вероятно, будет закрыто.   -  person Clifford    schedule 14.11.2014
comment
Что вы имеете в виду под повторным словом?   -  person Daniele Nardi    schedule 15.11.2014
comment
Я имею в виду переписать его так, как описано, чтобы вопрос соответствовал объему StackOverflow. См. stackoverflow.com/help/on-topic и stackoverflow.com/help/dont-ask. До сих пор вы привлекли один близкий голос, но этот пользователь бесполезно предпочел не комментировать, чтобы объяснить свое возражение.   -  person Clifford    schedule 16.11.2014
comment
Если подумать, вопрос, вероятно, в порядке, фраза «Во время отладки» ... указывает на то, что это вопрос о разработке программного обеспечения, но, возможно, он был потерян среди вашего текста без абзацев.   -  person Clifford    schedule 16.11.2014


Ответы (1)


Передача XMODEM инициируется получателем, а не отправителем. Передача начинается, когда принимающее устройство отправляет SOH (XMODEM) или «C» (XMODEM-CRC/1K). Если принимающая сторона не инициирует передачу, передача не произойдет.

Вы можете обнаружить, что вам нужно начать передачу с отправляющей стороны, а затем инициировать передачу на получателе. В качестве альтернативы, ожидая передачи, принимающая сторона может повторно отправлять начальный символ, пока не получит ответ (или не истечет время ожидания).

person Clifford    schedule 14.11.2014
comment
Спасибо. Проблема заключалась в том, что первая «С», отправленная получателем, была слишком ранней, а следующая — слишком запоздалой. - person Daniele Nardi; 17.11.2014