Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SIM800C небольшой баг с сокетами
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
lolful
Нашел такую особенность модема.

Дано.
Суть инициализации:
AT+CIPMUX=0
AT+CIPMODE=0
AT+CIPRXGET=1
AT+CIPQSEND=1

Если на сокет приходят данные, то модем выводит +CIPRXGET: 1
Если эти данные из сокета не забрать, и придут еще данные, то этот URC не выведется.

Нормальная работа с сокетом:
Код
<в сокет приходят данные (4 байта)>
+CIPRXGET: 1

AT+CIPRXGET: 2, 128                        // забираем данные из буфера
+CIPRXGET: 2,4,0                // возвращено 4 байта, остаток в буфере - 0 байт
<данные>
OK


Проблема.
В очень редких случаях может случиться следующее.

Код
<в сокет приходят данные (4 байта)>
+CIPRXGET: 1

AT+CIPRXGET: 2, 128
<в сокет приходят еще данные (4 байта) !!!>
+CIPRXGET: 2,4,0                // возвращено 4 байта, остаток в буфере - 0 байт !!!
<данные>
OK


То есть URC потеряется, если новые данные придут в момент вытаскивания старых из буфера. А при вытаскивании, модем скажет, что в буфере осталось 0 байт.

Решение.
Вариант 1. Помимо того, чтобы забирать данные из буфера по URC +CIPRXGET: 1, периодически проверять буфер на наличие данных.
Варинат 2. Сразу после вытаскивания данных из буфра, проверить буфер на пустоту еще раз.
Код
+CIPRXGET: 1

AT+CIPRXGET: 2, 128
+CIPRXGET: 2,4,0
<данные>
OK

AT+CIPRXGET: 2, 128
+CIPRXGET: 2,4,0
<данные>
OK
Цырен.
Цитата(lolful @ Aug 27 2015, 11:59) *
Нашел такую особенность модема.

Дано.
Суть инициализации:
AT+CIPMUX=0
AT+CIPMODE=0
AT+CIPRXGET=1
AT+CIPQSEND=1

Если на сокет приходят данные, то модем выводит +CIPRXGET: 1
Если эти данные из сокета не забрать, и придут еще данные, то этот URC не выведется.

Нормальная работа с сокетом:
Код
<в сокет приходят данные (4 байта)>
+CIPRXGET: 1

AT+CIPRXGET: 2, 128                        // забираем данные из буфера
+CIPRXGET: 2,4,0                // возвращено 4 байта, остаток в буфере - 0 байт
<данные>
OK


Проблема.
В очень редких случаях может случиться следующее.

Код
<в сокет приходят данные (4 байта)>
+CIPRXGET: 1

AT+CIPRXGET: 2, 128
<в сокет приходят еще данные (4 байта) !!!>
+CIPRXGET: 2,4,0                // возвращено 4 байта, остаток в буфере - 0 байт !!!
<данные>
OK


То есть URC потеряется, если новые данные придут в момент вытаскивания старых из буфера. А при вытаскивании, модем скажет, что в буфере осталось 0 байт.

Решение.
Вариант 1. Помимо того, чтобы забирать данные из буфера по URC +CIPRXGET: 1, периодически проверять буфер на наличие данных.
Варинат 2. Сразу после вытаскивания данных из буфра, проверить буфер на пустоту еще раз.
Код
+CIPRXGET: 1

AT+CIPRXGET: 2, 128
+CIPRXGET: 2,4,0
<данные>
OK

AT+CIPRXGET: 2, 128
+CIPRXGET: 2,4,0
<данные>
OK


Добрый день, напишите мне на почту bator.batuev собака sim.com. Будет интересно изучить эту тему. Какая у вас прошивка?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.