This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DP83620: Won't set BMSR(2) LINK STATUS to 1 when connected through Fiber

Part Number: DP83620

Hi,

I've got this chip on a custom board using the fiber interface and, even though I have full connectivity with other devices on the network, I've noticed that BMSR(2) bit, Link Status, isn't set to '1' when the link is in fact ready, as I can send and receive packages.

If this bit isn't set, maybe is it because while under fiber mode, another one is? How could I check for link status under these circumstances?

Thanks, best regards

  • Hi Alvaro,

    Did you try reading the bit twice after link is up? The bit is latch low and needs to be read twice when transition from link down to link up.

    -Regards,
    Aniruddha
  • Aniruddha Khadye said:
    Did you try reading the bit twice after link is up? The bit is latch low and needs to be read twice when transition from link down to link up.

    Yes, repeteadly. I'm trying to use it with Linux main tree kernel, which already takes this into account, and I also checked manually myself.

  • Hello Alvaro,

    Have you connected the Signal Detect pin in your fiber application? Can you read register 0x10[2:0] when you have a link?

    -Regards,
    Aniruddha
  • Hi Aniruddha,

    Sorry, I've just realized that I was mistaken about the bit that isn't being properly set. I can confirm that BMSR LINK STATUS is set to 1 when the fiber is connected and resets to 0 when I disconnect the cable.

    The reason why this device isn't fully working for me now, I've realized has something to do with the autonegotiation. BMSR reads like this: 111100011001101

    Bit 2 is High, so it means that the link is valid in fact, sorry about that. Bit 3, Auto-Negotiation ability is also High, yet bit 5 is 0, meaning that auto negotiation did not complete.

    Notice that on my board, FX_EN_Z pin is connected to GND through a 2K2 resistor, which should force fiber connectivity. From the datasheet:

    FIBER MODE DUPLEX SELECTION: If Fiber mode is strapped using
    the FX_EN_Z pin (FX_EN_Z = 0), the AN0 strap value is used to select
    half or full duplex. AN_EN and AN1 are ignored in Fiber mode since it
    is 100 Mb only and does not support Auto-Negotiation. In Fiber mode,
    AN1 should not be connected to any system components except the
    fiber transceiver.

    So, why is autonegotiation ability set to High? Shouldn't it be low, and thus the linux driver know that this device won't be able to negotiate at all? I believe that it may be because I routed FX_EN_Z to GND through a 2K2 resistor because of what I read on AN_EN, AN1, AN0 explanation, but I now believe that it may be wrong and this resistor be of 0 value. What do you think?

    Again, sorry about the initial confusion.

    Best regards

  • Hi,

    I'm closing this issue because the initial premise was simply wrong: BMSR(2) LINK STATUS does indeed work as expected in fiber mode, but due to a confusion of mine reading the registers, I thought it didn't, and blamed this non existent defect as the cause of my issues. I'll be reopening a new post explaining the real issue that I'm facing.

    Best regards