Перейти к содержанию
    

SIM800l и режим энергосбережения

Добрый день.

Имеется китайская платка с обвесом sim800l.

В целом, все, что хотел получить от модуля через stm32f1x, получил.

Осталось заставить модуль уходить в сон когда ему нечего делать.

Судя по амперметру, модуль вполне уменьшает потреблние вдвойку через 5 сек неактивности в режиме "AT+CSCLK=2".

Но! Модуль непрерывно мечет байты 0x11, 0x13 на вход контроллера по USART.

Без сна все работает идеально, никакой левоты, после вывода из сна все также работает корректно.

Что за мусор идет в порт во сне? Наводки от отключенного передатчика? Пробовал подсунуть резистор 10к с RX контроллера на землю. Никого не впечатлил :)

Есть ли ответ/идеи по подавлению мусора?

Спасибо.

PS. Мусор не дает перевести контроллер в сон. Работе, в принципе, не мешает.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11h - 13h это XON - XOFF.

Откуда они берутся по-прежнему не понятно. Флагов ошибок нет.

Отключить управление потоком на stm32, насколько я понимаю, нельзя.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробуждайте МК через линию uart_RI, а от uart отвяжите пробуждение. Или на stm это нельзя сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно.

Но. Чтение все равно придется сделать по прерыванию. А это будет будить контроллер.

По опросу, как оказалось, не успеваю вычитывать. Да и безобразно это по логике.

Через dma буду постоянно забивать буфер этими xon'ами.

Попробую уводить в сон sim800 по первому варианту - через dtr. Там прозрачнее пробуждение и, судя по описанию, другой вариант мониторинга порта для сна. Может он совсем заснет...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подключил DTR. SIM800 стала адекватнее просыпаться. Все необходимое работает.

Ксоны-ксофы так и сыпятся.

Забил. При извлечении множу на ноль. Получилось не увеличить заметно потребление.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подключил DTR. SIM800 стала адекватнее просыпаться. Все необходимое работает.

Ксоны-ксофы так и сыпятся.

Забил. При извлечении множу на ноль. Получилось не увеличить заметно потребление.

 

Странно, все это. А у вас включен CMUX? И какая у вас прошивка? Можете привести весь АТ лог, чтобы я воспроизвел у себя на отладке (на SIM800H)? Я себя я этого не вижу, и это ненормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Настройка модуля. Условно. Контроль удален. Все выполняется без ошибок

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 контроллера. С удивлением вижу, что ничего не теряю. Для этого, на всякий, максимально понизил скорость порта.

Задачу решил. От ксонов не избавился. Что-то я с портом контроллера или модулем не доделал.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

XON/XOFF - это ведь программное управление потоком?

Модуль настроен так, что регулярно сообщает - "я готов к приему".

Ну так надо в настройках его порта сказать - "без контроля потока".

Или таких настроек нет?

Изменено пользователем serglg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем он сообщает при "отключенном" по даташиту порте?

Модуль кастрат. Аппаратного управления сделать не могу.

Без контроля модуль может, контроллер - нет. Да и не знаю что из этого вышло бы.

С другой стороны, почему контроллер не режет управляющие символы?..

 

Revision:1418B04SIM800L24

Изменено пользователем Bil

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отключить управление потоком на stm32, насколько я понимаю, нельзя.

Не понимаю этой фразы. Как можно включить или выключить в самом контроллере программное управление потоком (software flow)? Оно же ведь в программе (пользователя)?

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мыши плакали, кололись, но продолжали жрать кактус.

Не надоело еще возиться с SIM800L который был предназначен неизвестно кому на китайском рынке и неизвестно с чем внутри.

 

Почему у меня на SIM800H и SIM800С все нормально со сном?

Ничего в порт не плюет и потребление меньше миллиампера.

Специально поставил модули на отладку и перепроверил.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не понимаю этой фразы. Как можно включить или выключить в самом контроллере программное управление потоком (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 и два делителя на пол мА в сумме.

Всем спасибо, все , что хотел, получил.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

>>>А вот sim никак на заявленный 1мА близко не выходит.

 

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

 

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

 

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

 

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

 

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

 

 

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

 

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

но это для тех кто не только доки на модуль прочел, а и апнотесы и даташит на чипсет

проверено на штатных релизных прошивках - таки работает.

 

проверялось на EVB KIT и потом на PIC24 и NUC472 и NUC240

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...