Jump to content
    

KSZ9563 не могу в ручную установить скорость 10 Mb/s Full Duplex на порт, получается только Half Duplex

Всем добрый день, такая проблема, что есть плата с ПЛИС и микросхемой 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 выставляется.

Share this post


Link to post
Share on other sites

В общем решил вышеописанную проблему следующим образом:

Записал в регистр 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 мбит/с и оставьте автосогласование, и будет вам счастье... 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...