реклама на сайте
подробности

 
 
> SIM800C небольшой баг с сокетами, Теряются URC +CIPRXGET
lolful
сообщение Aug 27 2015, 07:59
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 27-11-07
Из: Пермь
Пользователь №: 32 732



Нашел такую особенность модема.

Дано.
Суть инициализации:
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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 22:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01242 секунд с 7
ELECTRONIX ©2004-2016