Перейти к содержанию
    

SIM800C зависает при попытке передачи по TCP больше 512 байт

Добрый вечер.

Всех с прошедшим Новым годом и с наступающим Рождеством.

Столкнулся с проблемой, SIM800C не хочет передавать по TCP больше 512 байт в одном пакете.

Например, передаю команду AT+CIPSEND=0,518

приходит приглашение >

Передаю данные и зависло. От модема нет никаких данных, и он тоже не воспринимает команды.

Тоже самое с AT+CIPSEND=0,512 (или меньше)

работает без проблем. "SEND OK" приходит.

Не подскажите, в чём может быть проблема?

 

Установка соединения и инициализация по мануалу. Передача пакетов <= 512 байт работает сутками напролёт.

Версия прошивки 1418B09SIM800C32_BT_EAT.

Используется мультиконект, но соединение установлено одно.

Команда AT+CIPSEND? возвращает значение 1460.

...

Дополню. Как выяснилось модуль не  зависает. Через время ~22 минуты приходит "ERROR". 

Получается что модуль не может передать больше чем 512 байт данных, хотя команда AT+CIPSEND? возвращает значение 1460.

Других вариантов, как определить максимальную длину данных для передачи не нашёл. Если есть другие варианты, подскажите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну раз все еще гудят, то буду что то сказать :) Вряд ли в этой версии прошивки еще остались такие очевидные ошибки. Есть предположение, что теряеются символы и модуль продолжает ждать ввод.

Как вариант модуль через управление потоком семафорит что нужно абаждать, а контроллер ситуацию не отрабатывает.

Проверка простейшая - после подвисания попробовать докинуть еще символов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

05.01.2022 в 23:10, Rash сказал:

Не подскажите, в чём может быть проблема?

TCP Window Size?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, butthead2 said:

Ну раз все еще гудят, то буду что то сказать :) Вряд ли в этой версии прошивки еще остались такие очевидные ошибки. Есть предположение, что теряеются символы и модуль продолжает ждать ввод.

Как вариант модуль через управление потоком семафорит что нужно абаждать, а контроллер ситуацию не отрабатывает.

Проверка простейшая - после подвисания попробовать докинуть еще символов.

Байты не теряются, да и потом через время они дописываются уже в качестве АТ команды, т.к. таймаут (~10 мин.) ожидания истекает. Передача идёт через DMA контроллера, поэтому управление потоком нет.

6 hours ago, HardEgor said:

TCP Window Size?

Как его посмотреть в модуле?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, HardEgor сказал:

TCP Window Size?

Очень сомнительно. Только если соединение не устанавливается с каким-то странным TCP-сервером.

Если соединение устанавливается с TCP-портом открытым под виндой, то TCP-стек винды обычно в "window size" указывает размер = 0xFFFF (сразу после коннекта). И надо ещё постараться, передавая в течение некоторого времени поток данных в сокет с большой скоростью, так чтобы внутренний буфер сокета в винде заполнился и значение стало меньше 0xFFFF. Через мобильный инет такое сделать тем более будет трудно.

В любом случае - так как сразу после коннекта window_size=65535, то по-крайней мере первые 64КБ данных должны уходить без проблем с максимальным размером пакета (равным == MTU size).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...