Всем добрый день.
Впервые возникла необходимость принимать/передавать данные через модем блоками больше чем 4 кБ.
Сразу возникло несколько вопросов.
1. Если модем работает в CMUX-режиме, то будет ли работать управление потоком физического канала не зависимо от виртуальных?
2. Каким образом можно проконтролировать заполненность буффера одного канала не зависимо от других? Т.е. как можно организовать (или должно быть организовано) управление потоком виртуальных каналов? Где об этом почитать?
3. По докам на модем не вполне ясно какой объём буффера для каждого из виртуальных каналов есть внутри модема (в файле Easy Script In Python.pdf написано что для каждого из каналов MDM/MDM2/SER/SER2 выделен свой буффер по 4кБ).
Для общения с модемом используются линии RXD/TXD а также заведены RTS/CTS/DTR. UART процессора может использовать аппаратное управление потоком.
Ранее вопрос управления потоком не стоял т.к. посылки не превышали 2 кБ, чего было достаточно даже для модемов GE864. Сейчас требования другие. Устройство не имеет достаточно оперативной памяти, чтобы держать всю посылку в памяти. Реализовывать вариант с выдерживанием временных интервалов, необходимых для отправки данных, я не могу - если GPRS подвиснет и текущий пакет не уйдёт из модема на сервер, то я испорчу данные, закидывая в модем новую порцию данных для отправки. Поэтому я вижу единственное решение - использовать аппаратное управление.
Пару вопросов по самому управлению потоком.
Из того, то написано здесь
http://deviceinform.ru/index.php?option=co...pparatnie-interя понял, что со стороны модема сигналом приостановить передачу является сигнал CTS. Если в процессе передачи данных в модем этот сигнал становится активным, то я должен буду остановить передачу и дождаться пока этот сигнал перейдёт в неактивное состояние.
Каким образом процессор может приостановить выдачу данных из модема, если буффер UART близок к переполнению? Деактивация сигнала RTS?
Если для управления потоком достаточно только RTS/CTS, то для чего может быть необходим сигнал DTR (ну кроме управления энергосберегающими режимами с помощью +CFUN)?
Заранее спасибо за ответы.