KAlex 0 28 апреля, 2010 Опубликовано 28 апреля, 2010 · Жалоба Пытаюсь залить файл в модуль по протоколу Хмодем. После посылки первого блока модуль отвечает NAK(0x15). Есть подозрение что у меня неправильно считается CRC. Сведения из разных источников противоречивы. В одних говотиться, что в протоколе используется CRC-CCITT(полином 0х1021) в других CRC-XMODEM (полином 0х8408). Пробовал и тот и другой, что то ничего не получилось. Также непонятно поведение модуля при старте передачи. После "AT+CRXFILE="ххх.ххх",0" модуль выдает три раза С(0х43) затем начинает выдавать NAK(0x15). Толковых описаний Xmodem протокола не нашел, везде какие то обрывки и нестыковки. Какую именно версию модема использует 5215? И может уже у кого есть наработки? Поделитесь, плз. Вот например. Ссылка: http://electronix.ru/forum/lofiversion/index.php/t52779.html Цитата: CRC-XMODEM calculation. Polynomial: x^16 + x^12 + x^5 + 1 (0x1021) Initial value: 0x0 CRC-CCITT calculation. Polynomial: x^16 + x^12 + x^5 + 1 (0x8408) Initial value: 0xffff Ссылка: http://www.zorc.breitbandkatze.de/crc.html Цитата: CRC-CCITT: 0x1021 = x16 + x12 + x5 + 1 CRC-XMODEM: 0x8408 = x16 + x15 + x10 + x3 Какому бреду верить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KAlex 0 29 апреля, 2010 Опубликовано 29 апреля, 2010 · Жалоба Все, разобрался. Дело было действительно в CRC. Путем перебора разных вариантов выяснил. Полином CCITT: 0x1021 const unsigned short crc16_table[256] = { 0x0000, 0x1021, 0x2042, 0x3063, ... int crc16_xmodem( char* data, char len) { int crc = 0; char* ptr = data; while (len--) crc = (crc << 8) ^ crc16_table[((crc >> 8) ^ *ptr++) & 0x00ff]; return crc; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KAlex 0 18 мая, 2010 Опубликовано 18 мая, 2010 · Жалоба Новый вопрос для гуру. После команды AT+CRXFILE модуль начинает отвечать, что готов к приему через 10 секунд. Можно это время как то уменьшить? И еще. Как правильно закончить передачу файла по х-модем, если его размер не кратен 128? Цитата: "If the last packet contains less than 128-byte data with the specification of [sOH 04 0xFB Data[100] CPMEOF[28] CRC CRC], write 0x1A (^Z) to fill the rest space of CPMEOF[28]." Получаю файл кратный 128 с допиской 0х1А. Косяк 5215? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stream 0 18 мая, 2010 Опубликовано 18 мая, 2010 · Жалоба И еще. Как правильно закончить передачу файла по х-модем, если его размер не кратен 128? Добить мусором (0x1A) до 128 байт. Цитата: "If the last packet contains less than 128-byte data with the specification of [sOH 04 0xFB Data[100] CPMEOF[28] CRC CRC], write 0x1A (^Z) to fill the rest space of CPMEOF[28]." Получаю файл кратный 128 с допиской 0х1А. Косяк 5215? Где косяк? Кстати, CRC была не обязательна - если через некоторое время модуль начинает говорить NAK, в этот момент его уже можно кормить классическим вариантом с checksum. Но в твоем случае это была бы лишняя задержка перед передачей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KAlex 0 19 мая, 2010 Опубликовано 19 мая, 2010 · Жалоба Добить мусором (0x1A) до 128 байт. Где косяк? Так в этом и косяк. Добиваю мусором, а этот мусор сохраняется в файле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 19 мая, 2010 Опубликовано 19 мая, 2010 · Жалоба Все, разобрался. Дело было действительно в CRC. Путем перебора разных вариантов выяснил. Полином CCITT А не кажется ли странным, что полином для xmodem называется не CRC-XMODEM, а CRC-CCITT? Возможно правы все же те, кто называет CRC с полином 0x11021 CRC-XMODEM? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stream 0 19 мая, 2010 Опубликовано 19 мая, 2010 · Жалоба Так в этом и косяк. Добиваю мусором, а этот мусор сохраняется в файле. Ну дык это же XModem. Он такой уродец с рождения. Зато простой. Забей, короче. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KAlex 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба И зачем тогда этого уродца засунули в 5215? Ничего более умного не придумали? ЗЫ. Отправляю файл по почте, а на другой стороне его невозможно открыть средствами виндов, мусор мешает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться