Jump to content
    

Поднимаю PPP на SIM800. Что есть из литературы "для чайников"?

Сергей Борщ, модем и контроллер соединены только по RX, TX?

Share this post


Link to post
Share on other sites

SIM800 подключал по RX,TX, с SIM7600 использовал еще и DTR, RTS, но что-то мне кажется, что не наблюдал на них шевеления. Т.е. модем на 115200 всегда успевал принять.

Share this post


Link to post
Share on other sites

Спасибо!

Спрашивал, потому что смутила строчка AT+IFC=2,2. Я так понял, что могут понадобиться еще линии управления потоком.

В AT+CGDCONT указывается APN. А если понадобится логин и пароль, какие команды использовать?

Ранее использовал такие команды:

{"AT+SAPBR=3,1,\"APN\",\"internet.beeline.ru\""};
{"AT+SAPBR=3,1,\"USER\",\"beeline\""};
{"AT+SAPBR=3,1,\"PWD\",\"beeline\""};


Но для AT+CGDCONT эти команды неуместны?

Share this post


Link to post
Share on other sites

9 часов назад, Vix сказал:

Но для AT+CGDCONT эти команды неуместны?

Да, там все это происходит уже внутри ppp. У меня сделано так:

void ppp_modem::set_auth(char const * user, char const * password)
{
    if(strlen(user) == 0 || strlen(password) == 0)
        ppp_set_auth(PPP_pcb, PPPAUTHTYPE_NONE, nullptr, nullptr);
    else
        ppp_set_auth(PPP_pcb, PPPAUTHTYPE_ANY, user, password);
}

Проверить, к сожалению, возможности не было - у нас все операторы имя пользователя и пароль не проверяют, можно указать хоть "вася пупкин" и "слава мне, победителю драконов".

Share this post


Link to post
Share on other sites

Была проблема с выводом логов, я вывожу через USB-CDC, часть сообщений терялась, добавил задержку:

 

void logger(const char *format, ...)
{
        char buffer[MAX_STRING_SIZE];

        va_list args;
        va_start (args, format);
        vsprintf(buffer, format, args);
        va_end(args);

        buffer[MAX_STRING_SIZE-1]=0;

        logger_Send(buffer, strlen(buffer));
}

 

HAL_StatusTypeDef logger_Send(char* bArray, uint32_t size_bArray)
{
    HAL_StatusTypeDef status = HAL_OK;

    if(CDC_Transmit_FS((uint8_t*)bArray, size_bArray) == USBD_BUSY){
        osDelay(20);
        CDC_Transmit_FS((uint8_t*)bArray, size_bArray);
    }
    return status;
}

 

Сейчас прогресс такой

 

Лог

ppp phase changed[1]: phase=0
ppp_connect[1]: holdoff=0
ppp phase changed[1]: phase=3
pppos_connect: unit 1: connecting
ppp_start[1]
ppp phase changed[1]: phase=6
pppos_send_config[1]: out_accm=FF FF FF FF
ppp_send_config[1]
pppos_recv_config[1]: in_accm=FF FF FF FF
ppp_recv_config[1]
ppp: auth protocols: PAP=1
pppos_write[1]: len=24
ppp_start[1]: finished
pppos_input[1]: got 64 bytes
pppos_write[1]: len=22
pppos_input[1]: got 8 bytes
pppos_write[1]: len=24
pppos_input[1]: got 48 bytes
netif_set_mtu[1]: mtu=1500
pppos_send_config[1]: out_accm=0 0 A 0
ppp_send_config[1]
pppos_recv_config[1]: in_accm=0 0 A 0
ppp_recv_config[1]
ppp phase changed[1]: phase=7
pppos_write[1]: len=10
pppos_input[1]: got 27 bytes
PAP authentication succeeded
ppp phase changed[1]: phase=9
pppos_write[1]: len=20
pppos_write[1]: len=14
pppos_input[1]: got 16 bytes
pppos_write[1]: len=14

13:07:09 pppos_input[1]: got 17 bytes
pppos_write[1]: len=14
pppos_input[1]: got 17 bytes
sifvjcomp[1]: VJ compress enable=0 slot=0 max slot=0
sifup[1]: err_code=0
ppp_link_status_cb: PPPERR_NONE

   our_ip4addr = 10.51.151.19

   his_ipaddr  = 192.168.254.254

   netmask     = 255.255.255.255

local  IP address 10.51.151.19
remote IP address 192.168.254.254
ppp phase changed[1]: phase=10

 

В какой момент можно запускать своего TCP и т.п. клиентов? Когда err_code в ppp_link_status_cb стал равен PPPERR_NONE ?

Edited by Vix

Share this post


Link to post
Share on other sites

Запустил самопальный MQTT клиент. После 20 приемов обновления топика связь замирает, прием прекращается. Где что включить/посмотреть?

Share this post


Link to post
Share on other sites

>>> Запустил самопальный MQTT клиент. После 20 приемов обновления топика связь замирает, прием прекращается. Где что включить/посмотреть?

 

На каком модуле, кто оператор, чье облако.....

И самое главное - зачем самопальный?

Share this post


Link to post
Share on other sites

В моем LWIP (предположительно версия 2.0.x) нет встроенного MQTT, не знаю почему, брал из примера. Подключал библиотеку вручную, т.к. мой МК STM32F413 не имеет ethernet, так бы через CubeMX все подключилось.

Код MQTT взял на просторах интернета из проекта ATmega16_GPRS_MQTTClient.

С этим кодом написал клиента в виде Windows приложения, работает нормально. С него же и обновляю топик.

Сервер MQTT - mqtt.by.

Подозрение на утечку памяти в недрах TCP. Как отловить?

СИМ мультиоператорная, подключается как правило к МТС или Мегафон.

 

Share this post


Link to post
Share on other sites

Такс, параллельно принимал данные MQTT клиентом с LWIP и приложением на Windows. Оба перестают принимать после 20-го publish. Причем клиент, публикующий топик, получает подтверждение, а подписчики ничего. Похоже, сервер с какими-то ограничениями.

Share this post


Link to post
Share on other sites

02.08.2021 в 12:20, Vix сказал:

В какой момент можно запускать своего TCP и т.п. клиентов? Когда err_code в ppp_link_status_cb стал равен PPPERR_NONE ?

Пропустил вопрос. Вроде сразу запускаю. Пока сессия не поднялась - connect() будет возвращать ошибку.

Share this post


Link to post
Share on other sites

5 hours ago, Vix said:

Такс, параллельно принимал данные MQTT клиентом с LWIP и приложением на Windows. Оба перестают принимать после 20-го publish. Причем клиент, публикующий топик, получает подтверждение, а подписчики ничего. Похоже, сервер с какими-то ограничениями.

С сервером io.adafruit.com ограничение на количество publish не наблюдается. Но есть ограничение по частоте. В итоге LwIP - PPPoS - MQTT работает, продолжаю тестировать.

Share this post


Link to post
Share on other sites

12.09.2019 в 16:46, Girnch сказал:

Сегодня бился с такой же проблемой. Но похоже решение по ссылке уже не доступно. Совсем не понятно где идет этот аппаратный рассчет СRC

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

Share this post


Link to post
Share on other sites

04.08.2021 в 22:13, Сергей Борщ сказал:

Пропустил вопрос. Вроде сразу запускаю. Пока сессия не поднялась - connect() будет возвращать ошибку.

вот - ознакомьтесь

00724c.pdf

баловался как - скармливал модему Siemens MC35i пакеты, которые задампил при подключении с компа, в ответ на пакеты получал валидные ответы, так в конце концов поднял сокет через 628 пик...

CRC16 в последних пакетах пришлось пересчитывать т.е. назначался разный IP адрес.
Считаю PPP самой практичной реализацией, поскольку он обеспечивает прозрачный канал в отличие от зашитых в модем TCP стеков.

Edited by Dima83

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...