Если вы вдруг делаете устройство какое-нибудь с поддержкой сети Ethernet, то следует обратить внимание на ряд моментов:

1. 100 Mbps хорошо, но успеет ли девайс их обработать, если пакеты пойдут пачкой? Для встраиваемых устройств лучше использовать старый добрый 10BASE-T Full Duplex. Если вдруг кто пулемётом выстрелит в сеть пакеты, а комп какой-нибудь может и гигабитом быть подключён к сети, и время между пакетами может быть очень маленьким, то коммутатор пакеты задержит у себя ровно настолько, чтоб по очереди их передать по 10Mbps линии. Весьма удобно.
2. Если есть возможность, используйте режим Full-Duplex, чтоб не было мороки с коллизиями и убитыми ей пакетами...
3. Используйте автоопределение скорости! Протокол позволяет выбрать предпочитаемые режимы, например те же 10BASE-T Full Duplex и 10BASE-T Half Duplex, оставив более быстрые режимы не у дел. Если скорость задаётся хардкодом, то можно использовать только полудуплексный режим со всеми его недостатками. Да и то коммутатор будет не уверен, что действует правильно, и вообще, ему будет грустно.
4. Контроллеры Ethernet в МК позволяют автоматически генерировать и проверять CRC у Ethernet Frame. Результат проверки выводится в какой-то флаг. Нужно его обязательно проверять. Если CRC не совпало — пакет должен быть уничтожен на месте. кроме того есть и иные очень полезные флаги ошибок, которые говорят, что в пакет во избежание досадных случайностей смотреть всё же не стоит.
5. Не забываем проверять адрес назначения широковещательного пакета с учётом маски. К тому же, контроллеры могут иметь возможность настраивать фильтры, откуда и что принимать, а какие пакеты выбрасывать, не глядя.
6. PHY, подключённый через интерфейс RMII обязан в случае наличия ошибки при приёме (например, коллизия) испортить все дальнейшие данные пакета. В частности, dp83849c выдаёт вместо всех недостоверных байт число 0x55. В LPC2368 я с этим столкнулся и не знал, что это за глюк такой. "To eliminate the requirement for this signal and still meet the requirements for undetected error rate, RXD[1:0] shall replace the decoded data in the receive stream with “01” until the end of carrier activity."

Проверьте, так ли это в вашем проекте?

Спецификация интерфейса RMII.