STM Урок 96. LAN8720. LWIP. TCP Client. Часть 1

 

 

 

 

 

Мы уже изучили плотненько две микросхемы, предназначенные для передачи данных по интерфейсу LAN: это ENC28J60 и W5500. Это микросхемы от двух разных производителей. Первая включает в себя два уровня — канальный и физический, а вторая — ко всему этому ещё также сетевой и транспортный, то есть является своего рода воплощением в себе на аппаратном уровне готового стека TCP/IP. Это очень удобно для разработчика, так как не приходится писать весь стек, как мы делали в случае с ENC28J60, но накладывает ряд ограничений на свободу действий, так как кое-что нельзя изменить в работе стека, хотя есть режим RAW, который позволяет стек отключить. Но я не стал использовать данный режим, так как код скорее всего был бы похож на код всех уроков по первой микросхеме, а зачем нам повторение — это была бы огромная потеря времени, а у нас ведь ещё столько всего неизведанного.

Поэтому сегодня мы попробуем поработать с ещё одной микросхемой, которая занимается передачей данных по этой шине — это LAN8720. Данная микросхема, как и первый упомянутый представитель, является детищем компании Microchip, только она на своём борту содержит исключительно только физический уровень. Казалось, бы это накладывает огромную ответственность на разработчика, обязывая его грамотно организовать столько уровней, но это вовсе не так. Потому что на помощь нам приходит библиотека LWIP. Данная библиотека была первоначально разработана Адамом Данкелсом в шведском институте Computer and Networks Architectures (CNA). В данный момент данной библиотекой занимается группа разработчиков (lwIP developers group) распространяется она по модифицированной лицензии BSD, то есть является бесплатной для пользования. LWIP (lightweight IP) является библиотекой, в которой реализован стек протоколов с исходным кодом, поддерживающий следующие протоколы:

  • IPv4 and IPv6 (Internet Protocol v4 and v6)
  • ICMP (Internet Control Message Protocol) for network maintenance and debugging
  • IGMP (Internet Group Management Protocol) for multicast traffic management
  • UDP (User Datagram Protocol) • TCP (Transmission Control Protocol)
  • DNS (Domain Name Server)
  • SNMP (Simple Network Management Protocol)
  • DHCP (Dynamic Host Configuration Protocol)
  • PPP (Point to Point Protocol)
  • ARP (Address Resolution Protocol)

И это не все протоколы, которые поддерживаются данной библиотекой, существует ещё несколько.

Также существует три API-интерфейса, которые можно использовать для разработки ПО для передачи данных

RAW / native API — интерфейс, используемый без операционной системы. Имеет ряд недостатков, но также и ряд преимуществ, например обеспечивает свободу действий, которой зачастую не хватает более продвинутым программистам.

Netconn API — представляет собой высокоуровневый последовательный API, для которого требуется операционная система реального времени (RTOS). API Netconn позволяет выполнять многопоточные операции.

BSD Socket API — API-интерфейс, похожий на Berkeley-Socket (разработанный поверх API-интерфейса Netconn).

Мы пока будем работать с первым интерфейсом RAW. Во-первых потому, что мы ещё как следует не изучили операционную систему FreeRTOS, а во-вторых, нам не привыкать самим сервить события сети и, думаю, не составит слишком большого труда обойтись без использования ОС.

Про саму микросхему LAN8720 много рассказывать не приходится, так как там нет такого обилия регистров, как у W5500.

Стоит сказать о том, что она уже в отличие от W5500 полноправно поддерживает технологию Auto-MDIX, поддержки которой зачастую не хватает для соединения узлов без использования хабов и роутеров, то есть напрямую, обычным не кроссоверным кабелем.

Также данная микросхема поддерживает обмен на скоростях 10/100 мегабит в секунду как в полудуплексном, так и в полнодуплексном режимам, само собой поддерживается режим Auto-negotiation, позволяющий узлам договариваться между собою о скоростях обмена данными.

Остальные прелести данной микросхем, думаю, мы ощутим, когда начнём ей пользоваться. Также вы можете всегда скачать последнюю версию технической документации на данную микросхему на официальном сайте компании-производителя и ознакомиться со всеми интересующими вас тонкостями этой микросхемы.

Давайте посмотрим расположение ножек на ней

 

image00

 

Данные ножки представляют собой все необходимые контакты для шины RMII, про которую мы поговорим чуть позже и также все необходимые контакты для обеспечения физического уровня, также само собой есть ножки для тактирования с помощью кварцевого резонатора, а также ножки для питания.

Данная микросхема у меня находится на модуле от WaveShare. От данной компании мы часто используем модули.

Вот так выглядит наш модуль

 

image01

 

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

Только подключить данную микросхему, а равно и модуль мы можем ни к каждому контроллеру. Так как у данной микросхемы нет канального уровня, то он должен поддерживаться и желательно аппаратно самим микроконтроллером. В качестве такого контроллера мы возьмём STM32F407VG, который расположен на нашей любимой плате STM32F4-Discovery, с которой мы прошли ранее немало уроков и знаем о ней далеко не понаслышке.

В данный момент на многие, да не на многие, а почти все свои платы нового поколения STM устанавливает также подобную микросхему, правда более нового поколения, но разницы в работе я пока не заметил. Но так как на нашей любимой Discovery 4 нет такой микросхемы, а многим, я уверен, хочется с данной платой организовать сетевой обмен данными, мы подключим к ней именно такой модуль, так как две рассмотренные нами ранее микросхемы с присутствующим в них канальным уровнем к данной отладочной плате подключать нет смысла ибо на МК, расположенном на ней, уже есть аппаратно реализованный канальный уровень, и, думаю, что нет никакого резона ему простаивать.

 

 

К микроконтроллеру STM32F407 подобные микросхемы, имеющие только физический уровень, подключаются по одному из межканальных интерфейсов MII или RMII. Это похожие шины, отличающиеся незначительно. Данные передаются по разным направлениям по отдельным проводам. Для передачи и приёма данных в MII используются по 4 провода для каждого из направлений. Интерфейс является синхронным, то есть есть ножка синхронизации, на которую подаются в случае использования MII импульсы частотой 25 мегагерц. Следовательно мы за один тик синхронизации передаём сразу 4 бита информации. Вот так и получается наша скорость 100 мегабит в секунду. Причём можем передавать с такой скоростью одновременно по обоим направлениям, так как у нас по 4 провода на каждое направление. В случае использования RMII у нас уже в наличии проводов вдове меньше, то есть только по 2 провода на направление, но за счёт того, что тактирование уже производится с частотой 50 мегагерц, то мы также пердаём и принимаем данные со скоростью 100 мегабит в секунду. Вот оно и различие этих интерфейсов.

Давайте я также приведу наглядные примеры передачи данных по интерфейсам из документации к контроллеру

 

image02

 

Теперь, думаю, всем стало намного очевиднее. Мы видим, что тактирование на интерфейсе RMII вдвое быстрее, а ножек вдвое меньше.

Мы с вами будем использовать именно RMII, так как у нас выбора нет, потому что наша микросхема LAN8720 работает именно по такому интерфейсу. В этом есть положительная сторона. Мы выигрываем в количестве проводов, но это накладывает на нас ответственность за качество этих самых проводов. Мы не можем их использовать слишком длинные, так как 50 мегагерц для передачи данных — скорость уже не малая, хотя и не очень большая. Думаю, экранировать провода не придется. По крайней мере, у меня всё прекрасно передаётся.

Вот так вот у меня подключена микросхема к плате (нажмите на картинку для увеличения изображения)

 

image03_0500

 

Также давайте подключим переходник USB-TTL для управления и мониторинга по интерфейсу USART. Подключим мы его к контактам шины USART6

 

image04 

 

Именно к шине USART6 я подключил переходник не только из соображений удобства его расположения скраю, но ещё из-за совместимости с платой STM32F4DIS-BB, которая имеется у меня также в наличии, в которую очень удобно вставляется отладочная плата STM32F4-DISCOVERY и которая очень удобна, так как в ней есть много готовых решений, например микросхема LAN8720 там уже установлена на борту. Кроме этого можно подключить дисплей и для которого выведены отдельные ножки, видеокамеру, также имеется картоприёмник Micro-SD, вообщем много чего интересного. Вот её вид сверху

 

image05

 

А вот так данная плата выглядит вместе с вставленной в неё отладочной платой STM32F4-DISCOVERY

 

image06

 

Как мы видим, USART выполнен на данной плате в виде разъёма COM-порта и схематически он подключен именно к USART6. Правда мне пока не удалось его задействовать. Не ужился он пока с моим виртуальным COM-портом, но тем не менее именно поэтому я без использования данной платы расширения свой переходник USB-TTL подключил именно к контактам шины USART6.

Сначала мы поработаем без платы расширения, а потом я, с вашего позволения, перейду именно на неё, мне так удобнее, а вы можете продолжать пользоваться именно модулем от WaweShare, который также удобен, причём стоит он очень недорого. Ну это конечно, если у вас нет платы расширения STM32F4DIS-BB, если есть, то рекомендую использовать именно её. Причём потом я расскажу о главном отличии настройки проекта с использованием платы расширения и без использования оной. Я не сразу это заметил, что вообще мне не позволяло обходиться без этой платы.

 

В следующей части урока мы создадим и настроим проект, напишем несколько функций и попробуем на практике соединиться с сервером TCP.

 

Предыдущий урок Программирование МК STM32 Следующая часть

 

 

Отладочную плату можно приобрести здесь: STM32F4-DISCOVERY

Модуль LAN можно приобрести здесь: LAN8720

Плату расширения можно приобрести здесь: STM32F4DIS-BB

Переходник USB to TTL можно приобрести здесь ftdi ft232rl

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM LAN8720. LWIP. TCP Client

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*