Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SIM800l и режим энергосбережения
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
Bil
Добрый день.
Имеется китайская платка с обвесом sim800l.
В целом, все, что хотел получить от модуля через stm32f1x, получил.
Осталось заставить модуль уходить в сон когда ему нечего делать.
Судя по амперметру, модуль вполне уменьшает потреблние вдвойку через 5 сек неактивности в режиме "AT+CSCLK=2".
Но! Модуль непрерывно мечет байты 0x11, 0x13 на вход контроллера по USART.
Без сна все работает идеально, никакой левоты, после вывода из сна все также работает корректно.
Что за мусор идет в порт во сне? Наводки от отключенного передатчика? Пробовал подсунуть резистор 10к с RX контроллера на землю. Никого не впечатлил sm.gif
Есть ли ответ/идеи по подавлению мусора?
Спасибо.
PS. Мусор не дает перевести контроллер в сон. Работе, в принципе, не мешает.
Bil
11h - 13h это XON - XOFF.
Откуда они берутся по-прежнему не понятно. Флагов ошибок нет.
Отключить управление потоком на stm32, насколько я понимаю, нельзя.

Mysteo
Пробуждайте МК через линию uart_RI, а от uart отвяжите пробуждение. Или на stm это нельзя сделать?
Bil
Можно.
Но. Чтение все равно придется сделать по прерыванию. А это будет будить контроллер.
По опросу, как оказалось, не успеваю вычитывать. Да и безобразно это по логике.
Через dma буду постоянно забивать буфер этими xon'ами.
Попробую уводить в сон sim800 по первому варианту - через dtr. Там прозрачнее пробуждение и, судя по описанию, другой вариант мониторинга порта для сна. Может он совсем заснет...
Bil
Подключил DTR. SIM800 стала адекватнее просыпаться. Все необходимое работает.
Ксоны-ксофы так и сыпятся.
Забил. При извлечении множу на ноль. Получилось не увеличить заметно потребление.
Цырен.
Цитата(Bil @ Aug 23 2017, 21:11) *
Подключил DTR. SIM800 стала адекватнее просыпаться. Все необходимое работает.
Ксоны-ксофы так и сыпятся.
Забил. При извлечении множу на ноль. Получилось не увеличить заметно потребление.


Странно, все это. А у вас включен CMUX? И какая у вас прошивка? Можете привести весь АТ лог, чтобы я воспроизвел у себя на отладке (на SIM800H)? Я себя я этого не вижу, и это ненормально.
Bil
Настройка модуля. Условно. Контроль удален. Все выполняется без ошибок
Put_Modem ( "AT+IFC=1,1", 0, TRUE );
Put_Modem ( "AT+IPR=4800", 0, TRUE );
Put_Modem ( "ATE0", 0, TRUE );
Put_Modem ( "ATV1", 0, TRUE );
Put_Modem ( "AT+CMEE=1", 0, TRUE );
Put_Modem ( "AT+CLIP=1", 0, TRUE );
Put_Modem ( "AT+CMGF=0", 0, TRUE );
Put_Modem ( "AT+CSCS=\"UCS2\"", 0, TRUE );
Put_Modem ( "AT+CSCB=1", 0, TRUE );
Put_Modem ( "AT+CPMS=\"ME_P\",\"ME_P\",\"ME_P\"", 0, TRUE );
Put_Modem ( "AT+CMGDA=6", 0, TRUE );
Put_Modem ( "AT+CNMI=3,2", 0, TRUE );
Put_Modem ( "AT+DDET=1,100,0,0", 0, TRUE );
Put_Modem ( "AT+CSGS=0", 0, TRUE );
Put_Modem ( "AT+CNETLIGHT=0", 0, TRUE );
Put_Modem ( "AT+CSCLK=1", 0, TRUE );

Перевод модуля в спать
void Set_Modem_Low_Power ( void ) {
GPIO_WriteBit ( GPIOA, GPIO_Pin_5, Bit_SET );
}

Вывод модуля из спать
void Set_Modem_Std_еPower ( void ) {
uint32_t Time = RTC_GetCounter ();
GPIO_WriteBit ( GPIOA, GPIO_Pin_5, Bit_RESET );
while ( ( RTC_GetCounter () - Time ) < 2 );
}

Извлечение байта
void USART1_IRQHandler ( void ) {
if ( USART_GetFlagStatus ( USART1, USART_FLAG_RXNE ) != RESET ) {
uint8_t Byte = USART_ReceiveData ( USART1 );
if ( ( Byte != 0x11 ) && ( Byte != 0x13 ) ) {
*USART_Write_Pointer++ = Byte;
if ( USART_Write_Pointer == ( USART_Buffer + USART_BUFFER_SIZE ) )
USART_Write_Pointer = USART_Buffer;
}
}
}

Настройка околомодульного железа
GPIO_StructInit ( &GPIO_InitStruct );
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init ( GPIOA, &GPIO_InitStruct );
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
GPIO_Init ( GPIOA, &GPIO_InitStruct );
USART_StructInit ( &USART_InitStruct );
USART_InitStruct.USART_BaudRate = 4800;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init ( USART1, &USART_InitStruct );
USART_Cmd ( USART1, ENABLE );
USART_ITConfig ( USART1, USART_IT_RXNE, ENABLE );

Сейчас не могу сказать версию, забыл посмотреть. Но. Заменил позапрошлогодний модуль 800l на модуль, купленный в этом году. Никакой разницы.
Сейчас подключил RI от модуля.
Перед переводом в сон контроллера перевожу ноги rx и tx в вывод и верхнее состояние. Чтобы не прерываться от этих ксонов.
По прерыванию от RI перенастраиваю ноги в правильный режим и включаю тактирование usart контроллера. С удивлением вижу, что ничего не теряю. Для этого, на всякий, максимально понизил скорость порта.
Задачу решил. От ксонов не избавился. Что-то я с портом контроллера или модулем не доделал.
serglg
XON/XOFF - это ведь программное управление потоком?
Модуль настроен так, что регулярно сообщает - "я готов к приему".
Ну так надо в настройках его порта сказать - "без контроля потока".
Или таких настроек нет?
Bil
Зачем он сообщает при "отключенном" по даташиту порте?
Модуль кастрат. Аппаратного управления сделать не могу.
Без контроля модуль может, контроллер - нет. Да и не знаю что из этого вышло бы.
С другой стороны, почему контроллер не режет управляющие символы?..

Revision:1418B04SIM800L24
vit496
Цитата(Bil @ Aug 20 2017, 12:39) *
Отключить управление потоком на stm32, насколько я понимаю, нельзя.

Не понимаю этой фразы. Как можно включить или выключить в самом контроллере программное управление потоком (software flow)? Оно же ведь в программе (пользователя)?
Попробуйте AT+IFC=0,0 или 2,2 (при 2,2 нужно на RTS подать 0).
CADiLO
Мыши плакали, кололись, но продолжали жрать кактус.
Не надоело еще возиться с SIM800L который был предназначен неизвестно кому на китайском рынке и неизвестно с чем внутри.

Почему у меня на SIM800H и SIM800С все нормально со сном?
Ничего в порт не плюет и потребление меньше миллиампера.
Специально поставил модули на отладку и перепроверил.
Mysteo
Я тоже на трех модемах 900 серии D и R проверил, проблем таких не было )
Bil
Цитата(vit496 @ Aug 28 2017, 11:07) *
Не понимаю этой фразы. Как можно включить или выключить в самом контроллере программное управление потоком (software flow)? Оно же ведь в программе (пользователя)?


В программе оно когда от порта используется только приемо/передатчик.

Цитата
Попробуйте AT+IFC=0,0 или 2,2 (при 2,2 нужно на RTS подать 0).


2.2 нельзя, китайский модуль sim800l не имеет соответствующих дырок, иначе вопрос и не появился бы.
А вот 0, 0 ЕЩЕ раз попробовал. И офигел, и контроллер все понимал, и ксоны кончились...
С этого, от безысходности, начинал. Похоже, я настраивал поток в начальный затуп, так как из последних изменений только начальная пауза. Ибо положенных мне после старта RDY и других URC я в отладчике так и не увидел. Слишком медлеено он стартует, походу. Натолкнула на паузу странная работа с оповещением о смс. Под отладчиком приходят ожидаемые +CMT. А без отладчика (в реале) присовывал мне +CMTI. В листинге видно сколько всего надо сделать до управления форматом оповещения. Только с большой паузой на старте модем адекватно съел команды когда они ему приходили без паузы отладчика.
Кстати, про сон. Общее потребление приблуды в работе 27мА. При засыпании sim потребление падает до 18мА. При засыпании контроллера - до 13мА. Питая контроллер отлельно, определил, что он жрет в работе около 8мА. То есть, засыпает до 3мА. А вот sim никак на заявленный 1мА близко не выходит. Кроме них есть два dc-dc и два делителя на пол мА в сумме.
Всем спасибо, все , что хотел, получил.
CADiLO
>>>А вот sim никак на заявленный 1мА близко не выходит.

прекрасно выходит, приезжайте в гости - покажу.

дергаем DTR - спать!

UART контроллера в третье состояние чтобы стоповый бит не висел на приеме - порт модуля должен быть в это время вообще отключен и не иметь вытекающего тока.

и контролируем RI

по прерыванию выжидаем положеные 50 миллисекунд, просыпаемся и начинаем общение


читайте доки и используйте нормальные модули и прошивки

кстати есть хитрости которые позволяют на SIM800C получить 0.8 мА без потери сети, а на SIM868 - 0.45 мА
но это для тех кто не только доки на модуль прочел, а и апнотесы и даташит на чипсет
проверено на штатных релизных прошивках - таки работает.

проверялось на EVB KIT и потом на PIC24 и NUC472 и NUC240
ArtemKAD
Цитата(CADiLO @ Aug 28 2017, 22:46) *
UART контроллера в третье состояние чтобы стоповый бит не висел на приеме - порт модуля должен быть в это время вообще отключен и не иметь вытекающего тока.

Можно так не извращаться. Даже если использована подтяжка на стороне МК выход модуля по любому в единице. Т.е. токов там или нет или малозаметны на уровне единиц-десятков мкА. Больше вопросов возникает если используется 5В МК и какой нибудь веселый преобразователь уровня который может жрать на уровне модуля...

Цитата(CADiLO @ Aug 28 2017, 22:46) *
и контролируем RI

по прерыванию выжидаем положеные 500 миллисекунд, просыпаемся и начинаем общение

0,5с по прерыванию? Точно со временем не ошиблись? Это откуда такая величина?
CADiLO
>>>0,5с по прерыванию? Точно со временем не ошиблись? Это откуда такая величина?

Опечатался. Исправил - должно быть 50 миллисекунд.

4.3.3. Wake Up SIM800C from Sleep Mode 1

When SIM800C is in sleep mode 1(AT+CSCLK=1), the following methods can wake up the module:

 Pull down DTR pin.

The serial port will be active after DTR pin is pulled to low level for about 50ms.

 Receive a voice or data call from network.
 Receive a SMS from network.
 Receive external interrupt.

Note: After module has received incoming call or new SMS, serial port can report URC, but the serial port can not input AT command.
Only after the DTR pin is pulled to low level for 50ms, the serial port can input AT command.



>>>Можно так не извращаться. Даже если использована подтяжка на стороне МК выход модуля по любому в единице.

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




ArtemKAD
Цитата(CADiLO @ Aug 29 2017, 09:24) *
Only after the DTR pin is pulled to low level for 50ms, the serial port can input AT command.

А, это та зараза которая всю малину портит. Из-за неё пришлось лишний буфер городить в не резиновой оперативке.


Цитата(CADiLO @ Aug 29 2017, 09:24) *
Если нужно выжать минимальное потребление, то лучше поизвращаться. Иногда и десяток микроампер имеет значение.

Тут человеку хотя-бы приблизительно удалось попасть. А то он похоже в трех соснах и двух dc/dc заплутал... Если он еще и с включением/выключением портов и uart-а будет извращаться, глупых вопросов только прибавится.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.