На моем STM32F7 я должен подключить модем 3G, используя последовательный порт.
Я могу общаться с модемом, используя AT-команды.
Я хотел бы использовать библиотеку PPPos (PPP over serial) из LWIP для входа в режим PPP. Поэтому я долго смотрю на официальную документацию
http://lwip.wikia.com/wiki/PPP
а также
https://github.com/tabascoeye/lwip/blob/master/doc/ppp.txt
Я понимаю руководство, но я действительно удивлен, что нет никакого примера реализации с последовательным портом. Действительно, я думаю, что есть много модемов, которые имеют последовательный интерфейс, поэтому я подумал, что могу легко найти пример использования.
Кто-нибудь уже сделал это или есть пример?
Хотя я не могу опубликовать мой пример, общая идея интеграции стека TCP / IP по вашему выбору с драйвером PPP одинакова для всех последовательных модемов и всех стеков TCP / IP, с которыми я работал.
Как вы уже упоминали, вы начинаете с настройки модема с помощью AT-команд — таких как проверка наличия SIM-карты, требует ли она PIN-кода, указание PIN-кода, если необходимо, проверка его успешной регистрации в сети. Возможно чтение дополнительных информационных данных, таких как IMEI, IMSI, а также диагностические данные: качество сигнала, BER и т. Д. Как только вы закончите, вы переключаете модем в режим «данных» (см. ATD * 99), ждите, пока модем ответит к этой команде и передать ответственность стеку TCP / IP, так как в этот момент модем начинает говорить PPP.
Когда дело доходит до интеграции вашего модема со стеком, чтобы он мог взаимодействовать с ним, все реализации, с которыми я сталкивался, требуют реализации некоторой формы низкоуровневых API-функций для стека. Для LwIP, вики-страницы, на которую вы ссылались в разделе «PPP over serial», достаточно хорошо описано, как эти функции должны себя вести. Так как стеки TCP / IP представляют собой просто программную библиотеку, не привязанную к конкретному оборудованию, и они могут работать практически на всем (при условии наличия достаточных ресурсов), конкретные реализации API, такие как обсуждаемая, не всегда предоставляются — их должно быть множество. примеры для того, чтобы предоставить любую ценность. Хотя, если вы поищете в Google, вы можете найти кого-то, кто сделал это для MCU, который вы используете лично. Предполагая, что вы уже выполнили ту часть, где вы успешно общаетесь со своим модемом с помощью AT-команд, это не должно быть чем-то большим, чем использование уже имеющихся у вас функций отправки / получения. Могут потребоваться некоторые незначительные изменения, такие как изменение их поведения (синхронный-> асинхронный или наоборот) или перенаправление полученных данных в функцию приема API TCP / IP вместо анализатора AT-команд. Тем не менее, большая часть необходимой тяжелой работы должна быть сделана уже.
Как только стек TCP / IP вступит во владение, вы продолжите работу с модемом, используя предоставленный API стека PPP. Для LwIP смотрите такие функции, как: pppSetAuth, pppOverSerialOpen. Это заставит стек внутренне обрабатывать необходимую связь с модемом по PPP: LCP, PAP / CHAP, IPCP. Когда эта часть выполнена (вы извлекаете данные конфигурации IP из сети), становится прозрачным, как это работает — она становится одним (или, возможно, несколькими) сетевыми интерфейсами, и вы используете ее так же, как и любой другой, например, используя сокет API.
Других решений пока нет …