VVB (02.10.2012 08:35 - 08:54, просмотров: 4831)
Господа, имею общий вопрос по Ethernet касательно MAC и PHY. Я использую DP83848C и LPC1766.
В PHY есть возможность включить auto-negotiation и поглядеть чего он там определил. Всё понятно. Также можно в регистры PHY записать принудительный полно/полу-дуплекс. Тоже всё понятно и логично.
В MAC (в регистрах МАС) есть возможность установить Full-duplex или half-duplex соединение. Уже непонятно, почему оно имеется в МАС если это зона ответственности PHY и как инициализировать МАС если исходное состояние линка неизвестно (либо сетевой провод выдернут).
Похоже, я что-то не понимаю, описание этого бита регистра МАС тупое (включить/выключить дуплекс). Другую информацию хрен найдёшь.
Вот часть описание МАС
10.17.7 Duplex modes
The Ethernet block can operate in full duplex and half duplex mode. Half or full duplex
mode needs to be configured by the device driver software during initialization.
For a full duplex connection the FullDuplex bit of the Command register needs to be set to
1 and the FULL-DUPLEX bit of the MAC2 configuration register needs to be set to 1; for
half duplex the same bits need to be set to 0.
Как мне кажется, речь идёт об разных уровнях: касательно PHY дуплекс относится к ethernet, касательно МАС дуплекс относится к взаимоотношениям MAC и PHY и никакого отношения к дуплексу в ethernet не имеет. То есть можно установить полудуплекс в МАС и дуплекс в PHY. Это предположение верно?
Сейчас понимаю, что предположение неверно: в полудуплексе необходимо чтобы МАС постоянно генерировал преамбулу для подавления передачи любых пакетов другими станциями. То есть полудуплекс и flow control реализуется совместно МАС и PHY.
Но пока не понимаю "как инициализировать МАС при старте программы, если линка нет".
Похоже, что следует откладывать инициализацию MAC до того момента пока из PHY по MIIM не поступит информация о параметрах линка. Ну и при разрыве линка и восстановлении снова переинициализировать МАС.