Попробовал пересылать большие пакеты данных с клиента (SIM900) по запросу сервера (софт на РС).
В данном случае передаются 10000 байтов.
В качестве данных могут быть лювые бинарные числа (0х00...0хFF), в том числе и 0х1А.
Поэтому используется отправка фиксированного количества данных:
AT+CIPSEND=<LENGTH>, где <LENGTH> может быть в пределах от 1 до Packet Maximal Value.
На команду AT+CIPSEND? была получена цифра 1380, что и есть Packet Maximal Value.
Это число считал с SIM900 только 1 раз, чтобы не усложнять программу. Но в описании написано,
что это число в общем случае нефиксированное.
Нужно ли это число проверять каждый раз перед отсылкой команды AT+CIPSEND=<LENGTH>?
Пока проблем не было с тем, что в программе Packet Maximal Value всегда принят за 1380.
Может это зависит от оператора и загруженности сети?
Ниже приведена временная диаграмма сигналов на RXD и TXD модуля SIM900.
В начале идет инициализация SIM900. После того, как клиент подключается к серверу,
программа сервера посылает запрос / команду на считывание 10000 байтов.
На временной диаграмме видно, что передаются 7 пакетов по 1380 байтов и 1 - по 340 байтов.
7 * 1380 + 1 * 340 = 10000, которые передаются примерно за 35 секунд.
Средняя скорость передачи данных примерно равна 10000 байт / 35 секунд = 286 байт/с = 2300 бит/с.
Скорость по UART равна 9600 baud/s.
Перед тем, как слать следующий пакет данных, контроллер ждет ответ "SEND OK".
Вопрос заключается в том, как можно по возможности увеличить скорость передачи данных?
Первое, что я вижу, это увеличение скорости по UART до 115200 baud/s. Это может увеличить
среднюю скорость передачи данных по GPRS на 30-40%.
Очень много времени занимает ожидание "SEND OK". Иногда эта задержка может достигать
10 секунд и даже больше. Тут, как я понимаю, ничего не поделаешь,
т.к. подтверждение нужно и количество байтов в пакете тоже нельзя превышать 1380.
Сообщение отредактировал Electronics Engineer - Oct 17 2012, 10:44
Эскизы прикрепленных изображений