Есть у меня старое железо. Я на нем когда-то а-ля сервак делал. Но у него одна беда - не умеет он по сети включаться. Вернее уметь вроде как должен, но это не работает. Менять что-то в нем бессмысленно и посему давно зародилась мысль сделать включение самому. Про Ethernet кратенькая статья уже была. Я ее и взял за основу.
Что такое WOL (Wake-on-LAN)? Это функция включения компа по сети. Когда сетевая карта получает, так называемый, MagicPacket она выдает команду на старт компа. Пакет этот состоит из 6 байт со значением FFh и далее повторяется MAC адрес (6 байт) сетевой карты 6 раз. Этот пакет обычно рассылается используя протокол UDP. Кучу инфы можно нарыть в той же википедии - суть я описал.
По сути, что нам нужно от будущего устройства:
- подключиться по сети и дать понять роутеру что мы работаем;
- принимать и анализировать данные по сети;
- при идентификации MagicPacket выдавать импульс, который может управлять транзистором замыкающим контакты PWR на материнке (т.е. как бы нажимает кнопку Power на компе) давая команду компьютерному БП на запуск.
Задачу я разбил на 2 части:
- схема интерфейса физического уровня;
- управляющая схема.
Схема интерфейса физического уровня должна уметь принять/отправить данные по сети, т.е. именно на нее возлагается задача модулирования/демодулирование сигнала по Manchester. Другие же схемы с этой схемой работают в нормальном виде - с помощью обычных 8разрядных байт.
Управляющая схема должна выполнять 2 задачи:
- формировать
режим Autonegotiation
что бы роутер понимал что на порту кто-то висит;
- принимать поток данных от схемы физ.уровня и искать в ней характерный пакет MagicPacket. Может быть правильнее было бы принимать весь пакет UPD и анализировать его, но в ПЛИСину от марсохода вряд ли влезет.
После идентификации MagicPacket мы должны выдать сигнал на запуск компа. При этом целесообразно сделать защиту - комп запускать только тогда, когда он не запущен (иначе его можно выключить). Для этого на ПЛИСину можно завести сигнал от любого 5В-вого разъема через пару-тройку диодов или резистивного делителя.
[[[
Тут, кстати, вопрос возник по ходу: для Autonegotiation на 10МБит/с я через каждые 16мс формирую логическую 1 длинной 100нс. Эта единица должны быть прямо сплошным уровнем в сети или после наложения модуляции в сети появится так же переменный сигнал, только сдвинутый по фазе на полтакта относительно того, когда я данные в сеть вообще не шлю (эквивалентно подаче логического 0)?
]]]
Вот и подошли к главному. На данный момент я написал оба модуля и моделированием отлавливаю свои глюки. Для того что бы все это проверить, по идее, надо бы грамотно подключиться к сети: должен быть разделительный трансформатор, фильтр и какой-то операционник, короче некая схема подключения к сети. Взять и бросить два сигнала на прием и передачу прямо с ПЛИСа на линию - не знаю будет или нет работать, по идее не должно)
Может в этом плане кто-то подсобить - проверить работоспособность моего проекта? У меня отладочных средств для этого никаких нет.