Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SIM5215 & Xmodem
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
KAlex
Пытаюсь залить файл в модуль по протоколу Хмодем. После посылки первого блока модуль отвечает 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
Все, разобрался. Дело было действительно в 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
Новый вопрос для гуру.
После команды 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
Цитата(KAlex @ May 18 2010, 13:38) *
И еще. Как правильно закончить передачу файла по х-модем, если его размер не кратен 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
Цитата(stream @ May 18 2010, 17:04) *
Добить мусором (0x1A) до 128 байт.
Где косяк?

Так в этом и косяк. Добиваю мусором, а этот мусор сохраняется в файле.
Сергей Борщ
Цитата(KAlex @ Apr 29 2010, 10:34) *
Все, разобрался. Дело было действительно в CRC.
Путем перебора разных вариантов выяснил.
Полином CCITT
А не кажется ли странным, что полином для xmodem называется не CRC-XMODEM, а CRC-CCITT? Возможно правы все же те, кто называет CRC с полином 0x11021 CRC-XMODEM?
stream
Цитата(KAlex @ May 19 2010, 10:19) *
Так в этом и косяк. Добиваю мусором, а этот мусор сохраняется в файле.

Ну дык это же XModem. Он такой уродец с рождения. Зато простой. Забей, короче.
KAlex
И зачем тогда этого уродца засунули в 5215? Ничего более умного не придумали?

ЗЫ.
Отправляю файл по почте, а на другой стороне его невозможно открыть средствами виндов, мусор мешает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.