Jump to content

    
haker_fox

Коллеги, дайте нормальное описание YModem

Recommended Posts

Добрый день! Пишу приёмник для YModem. Готовый не хочу брать с гитхабов. И... что за бардак с стандарте? Например, написано, что первым (нулевым) блоком после установления связи передаётся имя файла + '\0' (здесь всё нормально), затем размер файла в шестандцатеричном виде (Extra Putty передаёт в десятичном виде), но самое главное - нет CRC!!! Т.е. нулевой пакет состоит из SOH + 128 байт данных (PackNum, 255 - PackNum, Data). Это Extra Putty кривая, или я что-то не понимаю? Собственно, что удручает, так это отсутствие какого-то нормально оформленного стандарта с примерами в виде документа. Сплошные обрывки. Приходится пока писать методом пристрелки: принял пакет, посмотрел в отладчике. Буду признателен, если кто поделится) Спасибо)

Share this post


Link to post
Share on other sites

первые же ссылки при гуглении по строке "Ymodem standard pdf" не годятся?

http://www.blunk-electronic.de/train-z/pdf/xymodem.pdf

https://open.library.ubc.ca/media/download/pdf/831/1.0051993/2

 

 

гугление по строке "Ymodem specification pdf":

 

https://techheap.packetizer.com/communication/modems/xmodem-ymodem_reference.html

 

Share this post


Link to post
Share on other sites

@Ruslan1, вы делали приёмник для YModem по приведённым документам? У вас получилось? У меня, вот, не получается. Одна из проблем описана в моём первом сообщении.

Share this post


Link to post
Share on other sites
1 hour ago, haker_fox said:

@Ruslan1, вы делали приёмник для YModem по приведённым документам? У вас получилось? У меня, вот, не получается. Одна из проблем описана в моём первом сообщении.

"А судьи кто?"

Почему вы решили, что Extra Putty может сойти за референс, тем более, что вы ее уже ловили на странностях типа передачи размера файла в десятитичном формате? Может, есть более уважаемые реализации (в т.ч., в виде исходников)? Я, например, более доверял бы TeraTerm'у (open source, кстати). Или в Линукс заглянул бы.

Share this post


Link to post
Share on other sites

Попробовал ZOC. Он вообще не откликается на символ C. Зато если нажать отмену передачи файла (в это время терминал ждёт чего-то), то присылает символ CAN. Я могу, конечно, попробовать TerraTerm, и ещё с десяток "проверенных и идеологически верных"  терминалов. Всё же хочу услышать совет коллег, которые делали этот протокол сами. Всё ли там так криво или нет.

Вот моя последовательность действий на текущий момент:

1. Мой приёмник посылает символ C, затем ждёт ответа от передатчика 3 секунды.

2. Если ничего не приходит, то повторяем п. 1. Если приходит символ STX или SOH, то начинаем парсить пакет.

Так вот, Extra Putty присылает пакет по пункту 2, а ZOC - молчит. Должен же он хоть что-то прислать для подтверждения? ZOC это многократно обласканный терминал здесь на форуме, даже сам @zltigo его рекомендовал в своё время. А то, что он эксперт в связи я не сомневаюсь.

Что я делаю неправильно?

Share this post


Link to post
Share on other sites
5 hours ago, haker_fox said:

Что я делаю неправильно?

Вот здесь https://techheap.packetizer.com/communication/modems/xmodem-ymodem_reference.html

в главе 4 показана диаграмма, но которой приемник начинает не с отправки "С", а с запроса файла.

Share this post


Link to post
Share on other sites

Не смотря на наличие "стандарта", похоже, что YModem релазиуют довольно вольно. Например, TeraTerm может отправить до 5 (сам засёк) пакетов 0 с именем файла и размером. Всё дело в имеющихся несчитанных символах C от приёмника. Extra Putty поступает умнее - она всегда отправляет один пакет. Глядя на различный код приёмников, смотрю, что он готов к приёму арзмера как в десятичном, так и в шестнадцатиричном формате... ZOC тоже отправляет данные, но как-то вяло... Правда у него хитро в справке написано про YModem, дескать, выбирайте XModem-CRC вместо YModem, а YModem используйте только для многофайловой (batch) отправки...

Share this post


Link to post
Share on other sites
26.08.2020 в 13:29, haker_fox сказал:

Пишу приёмник для YModem.

Кстати: а почему используете не ZModem? Который вроде как более продвинутый.

Share this post


Link to post
Share on other sites
56 minutes ago, jcxz said:

Кстати: а почему используете не ZModem?

У нас есть кучка железяк, которые обновляются по YModem. Поэтому использую его для совместимости. У меня задание: написать обновлялку (загрузчик) для железяки на базе STM32F091. Хочу написать сам, заодно разобраться. Ибо те исходники, которые коллеги уже использовали, мне не нравятся - взяты откуда-то, написаны, ИМХО, неаккуратно. Ну а мне - опыт в копилочку)

58 minutes ago, jcxz said:

Который вроде как более продвинутый.

Да ,это так. НЕмного пробежался по диагонали, пока читал про XModem и YModem/

Share this post


Link to post
Share on other sites
3 hours ago, Alex_Golubev said:

В документации написано сначало принимаешь rz + cr, а tera term отправлять r* как так? 

Пока сделал так. С TeraTerm работает. На других терминалах не проверял.

Share this post


Link to post
Share on other sites
2 hours ago, Alex_Golubev said:

У меня z modem а там y modem. Есть что-то для z modem? 

А вы на кой ляд в чужой теме-то пишите? У вас же своя по Zmodem есть...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.