АлександрЗавод 0 June 5 Posted June 5 · Report post Всем добрый день, такая проблема, что есть плата с ПЛИС и микросхемой KSZ9563, которая выполняет роль PHY и коммутатора. Необходимо поставить на внешних портах скорость 10 Мбит/с Full-duplex естественно. Почитав даташит, начинаю писать регистры 0b00000001 по адресу 0x1100 и 0b00000000 по адресу 0x1101. В целом, регистры записываются, выставляется скорость 10 Мбит/с, можно включать/отключать порты, как будто бы все чики-пики. Но, почему-то бит №8 по даташиту, он же бит №0 в регистре 0x1100, который отвечает за Full Duplex ни на что не влияет. Записываю его хоть 0, хоть 1, все-равно режим порта ставится 10 Half. Пробовал с 100 Мбит/с, та же петрушка, при запуске микросхемы она по-умолчанию ставит скорость 100 Мбит/с Full на порты, если в порт вручную поставить скорость 100 Мбит/с, то ставится только режим 100 Half. Кто-нибудь сталкивался с такой проблемой, что делать? В hardware checklist сказано, что после записи скорости надо еще записать бит autonegotiation: 1. Set Port Register 0xN100, Bit [6] = ‘0’ to remove 1000 Mbps speed. 2. Set Port Register 0xN112, Bits [9:8] = ‘00’ to remove Auto-Negotiation advertisements for 1000 Mbps full-/half-duplex. 3. Write a ‘1’ to Register 0xN100, Bit [9], a self-clearing bit, to force a restart of Auto-Negotiation. Пробовал, не помогает, все-равно Half-Duplex выставляется. Quote Share this post Link to post Share on other sites More sharing options...
АлександрЗавод 0 June 8 Posted June 8 · Report post В общем решил вышеописанную проблему следующим образом: Записал в регистр 0x1108 значение 0b00000100, (default Pause capabilities, restrict 100 Mbps full duplex off). Записал в регистр 0x1109 значение 0b01000001, (10 Mbps full duplex capability on, half duplex off). Записал в регистр 0x1112 значение 0b00000100, (1000 Mbps capability off). После чего Записал в регистр 0x1100 0b0110011, (auto-negotiation on, speed 10 Mbps, restart auto-negotiation). В таком режиме первый порт работает так, как мне нужно, всегда на скорости 10 Мбит/с Full-Duplex. Почему при отключении автосогласования и ручной установке скорости 10 Mbps Full-duplex он сваливается всегда в Half-duplex я так и не понял. В даташите написано, и на это мне указал колега на форуме Microchip, что When auto-negotiation is disabled on one side but enabled on the other, the auto-negotiating side cannot detect the link partner's capabilities through normal negotiation and will use "parallel detection" — which can only detect the speed, not the duplex. Parallel detection always assumes half-duplex, leading to a duplex mismatch. Да вот только у меня партнеры на другом конце как раз тоже в 10 Мбит/с Full-duplex. И они наоборот сами сваливались в полу-дюплекс после того как подключал свою плату. МАКС-ЕМ тоже при взаимодействии с KSZ9563 в этом режиме видит только 10 Мбит/с полу-дюплекс. Есть ощущение, что у ребят из Microchip есть какой-то баг в прошивке чипа KSZ9563 и регистр 0x1100 работает неполноценно. При этом весь остальной функционал регистра вроде как работает... Короче, если столкнетесь с такой ситуацией, то вместо ручной записи фиксированной скорости, как это написано в даташите, отключите объявление скоростей 1000 и 100 мбит/с и оставьте автосогласование, и будет вам счастье... Quote Share this post Link to post Share on other sites More sharing options...