|
SIM800l и режим энергосбережения |
|
|
|
Aug 19 2017, 17:21
|
Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880

|
Добрый день. Имеется китайская платка с обвесом sim800l. В целом, все, что хотел получить от модуля через stm32f1x, получил. Осталось заставить модуль уходить в сон когда ему нечего делать. Судя по амперметру, модуль вполне уменьшает потреблние вдвойку через 5 сек неактивности в режиме "AT+CSCLK=2". Но! Модуль непрерывно мечет байты 0x11, 0x13 на вход контроллера по USART. Без сна все работает идеально, никакой левоты, после вывода из сна все также работает корректно. Что за мусор идет в порт во сне? Наводки от отключенного передатчика? Пробовал подсунуть резистор 10к с RX контроллера на землю. Никого не впечатлил  Есть ли ответ/идеи по подавлению мусора? Спасибо. PS. Мусор не дает перевести контроллер в сон. Работе, в принципе, не мешает.
|
|
|
|
|
Aug 20 2017, 08:39
|
Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880

|
11h - 13h это XON - XOFF. Откуда они берутся по-прежнему не понятно. Флагов ошибок нет. Отключить управление потоком на stm32, насколько я понимаю, нельзя.
|
|
|
|
|
Aug 22 2017, 16:27
|
Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880

|
Можно. Но. Чтение все равно придется сделать по прерыванию. А это будет будить контроллер. По опросу, как оказалось, не успеваю вычитывать. Да и безобразно это по логике. Через dma буду постоянно забивать буфер этими xon'ами. Попробую уводить в сон sim800 по первому варианту - через dtr. Там прозрачнее пробуждение и, судя по описанию, другой вариант мониторинга порта для сна. Может он совсем заснет...
|
|
|
|
|
Aug 23 2017, 18:11
|
Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880

|
Подключил DTR. SIM800 стала адекватнее просыпаться. Все необходимое работает. Ксоны-ксофы так и сыпятся. Забил. При извлечении множу на ноль. Получилось не увеличить заметно потребление.
|
|
|
|
|
Aug 25 2017, 18:25
|
Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880

|
Настройка модуля. Условно. Контроль удален. Все выполняется без ошибок 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 контроллера. С удивлением вижу, что ничего не теряю. Для этого, на всякий, максимально понизил скорость порта. Задачу решил. От ксонов не избавился. Что-то я с портом контроллера или модулем не доделал.
|
|
|
|
|
Aug 26 2017, 07:46
|
Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880

|
Зачем он сообщает при "отключенном" по даташиту порте? Модуль кастрат. Аппаратного управления сделать не могу. Без контроля модуль может, контроллер - нет. Да и не знаю что из этого вышло бы. С другой стороны, почему контроллер не режет управляющие символы?..
Revision:1418B04SIM800L24
Сообщение отредактировал Bil - Aug 26 2017, 07:57
|
|
|
|
|
Aug 28 2017, 08:07
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 27-09-07
Пользователь №: 30 876

|
Цитата(Bil @ Aug 20 2017, 12:39)  Отключить управление потоком на stm32, насколько я понимаю, нельзя. Не понимаю этой фразы. Как можно включить или выключить в самом контроллере программное управление потоком (software flow)? Оно же ведь в программе (пользователя)? Попробуйте AT+IFC=0,0 или 2,2 (при 2,2 нужно на RTS подать 0).
|
|
|
|
|
Aug 28 2017, 18:57
|
Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880

|
Цитата(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 и два делителя на пол мА в сумме. Всем спасибо, все , что хотел, получил.
|
|
|
|
|
Aug 29 2017, 05:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Цитата(CADiLO @ Aug 28 2017, 22:46)  UART контроллера в третье состояние чтобы стоповый бит не висел на приеме - порт модуля должен быть в это время вообще отключен и не иметь вытекающего тока. Можно так не извращаться. Даже если использована подтяжка на стороне МК выход модуля по любому в единице. Т.е. токов там или нет или малозаметны на уровне единиц-десятков мкА. Больше вопросов возникает если используется 5В МК и какой нибудь веселый преобразователь уровня который может жрать на уровне модуля... Цитата(CADiLO @ Aug 28 2017, 22:46)  и контролируем RI
по прерыванию выжидаем положеные 500 миллисекунд, просыпаемся и начинаем общение 0,5с по прерыванию? Точно со временем не ошиблись? Это откуда такая величина?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|