вторник, 14 июня 2011 г.

Описание интерфейса MDIO

MDIO является простым двух проводным последовательным интерфейсом, используемым для доступа к набору контроля и статуса регистров внутри чипа PHY. Он состоит из двух контактов Management Data Clock (MDC), который имеет максимальную тактовую частоту 2,5 МГц (в соответствии со стандартом, хотя некоторые устройства поддерживают более высокий уровень), и не имеет минимальной  частоты, и Management Data Input/Output (MDIO), который является двунаправленным и может использоваться до 32 устройств.


Формат MDIO кадра:


При операции чтения station management entity (EMAC), посылает последовательность из 32 непрерывных логических единиц на MDIO чтобы обеспечить чип PHY требуемой синхронизацией. После этого, EMAC посылает стартовый бит, биты кода операции, биты адреса устройства (адрес назначения чип PHY), и биты регистра адреса (адрес внутреннего регистра PHY's). С помощью этой информации, управляемый объект (PHY чип) должен предоставить запрашиваемые данные, но перед этим, бит idle bit time посылается для того, чтобы избежать конкуренции на линии MDIO.

Для операции записи, так как все данные передаются по EMAC, нет необходимости для обеспечения монополизации линии MDIO, поэтому idle bit time заменяется на старший бит для того, чтобы заполнить время обработки данных.

Типична MDIO операция чтения:





Типичная MDIO операция записи:





  Программная реализация MDIO

Протокол  Management Data Input/Output осуществляется программным методом и код включен в mdio.c и mdio.h файлы.

Функция output_MDIO () используется для задания MDIO в соответствии с требуемым значением (бит 0 или бит 1) и генерировать частоту MDC для данного бита.


Реализация output_MDIO() функции:
       
Для чтения данных с чипа PHY используется функция input_MDIO(). Она генерирует 16 тактов для MDC и считывает данные с MDC линии согласно PHY.


Реализация output_MDIO() функции:

turnaround_MDIO () функция используется для генерации idle bit, где MDI линия имеет три состояния. tri-stated tri-stated


Реализация output_MDIO() функции:


Функции, mdio_read () и mdio_write (), могут быть использованы для доступа к регистрам PHY из кода.

 Реализация  mdio_read() функции:






Реализация mdio_write() функции:

 Визуализация полученных данных

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

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

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

Пример возможной реализации файла с данными:


< html >
< head >
< meta http-equiv="refresh" content="5" >
< title >easyWEB - dynamic Webside< /title >
< /head >

< body bgcolor="#3030A0" text="#FFFF00" >
< p >< b >< font color="#FFFFFF" size="6" >< i >Hello World!< /i >< /font >< /b >< /p > 

< p >< b >This is a dynamic website hosted by the embedded Webserver< /b > < b >easyWEB.< /b >< /p >
< p >< b >Hardware:< /b >< /p >
< ul >
< li >< b >Keil MCB1700 board. ARM M3 Cortex running EasyWeb< /b >< /li >
< li >< b >Embedded EMAC Ethernet Controller< /b >< /li >
< /ul >

< p >< b >A/D Converter Input 2 - POT1: AD8% < /b >< /p >

< table bgcolor="#ff0000" border="5" cellpadding="0" cellspacing="0" width="500" >
< tr >
< td >
< table width="AD7%" border="0" cellpadding="0" cellspacing="0" >
< tr >< td bgcolor="#00ff00" > < /td >< /tr >
< /table >
< /td >
< /tr >
< /table >

< table border="0" width="540" >
< tr >
< td width="15%" >0V< /td >
< td width="15%" >0.5V< /td >
< td width="15%" >1V< /td >
< td width="15%" >1.5V< /td >
< td width="15%" >2V< /td >
< td width="15%" >2.5V< /td >
< td width="15%" >3V< /td >
< /tr >
< /table >

< br >< br >< br >< br >
< table border="0" width="500" >
< tr >
< td width="10%" >< /td >
< td width="45%" >
< table bgcolor="silver" border="5" cellpadding="0" cellspacing="0" width="250" >
< tr >
< td >
< p >< b >< font color="#FFFFFF" size="6" >< i >Page Count: AD1%< /i >< /font >< /b >< /p >
< /td >
< /tr >
< /table >
< /td >
< /tr >
< /table >

< /body >
< /html >

В окне браузера данный файл будет выглядеть так:




Где в место  AD1%,AD8% и AD7%  можно подставлять полученные данные, например количество обновлений страницы, значение АЦП в 16-м виде и значение АЦП в вольтах соответственно.

Комментариев нет:

Отправить комментарий