B40: behavior after auto-negotiation failure

I have inherited a project using the Anybus B40 module and have been asked about the default speed, duplex, and MDI/MDIX settings for the ports on the module. After reviewing the relevant documentation, I am still unsure about what the behavior is.

By default, the speed/duplex settings are set to “auto-negotiate” which is what we would like it to be set to, but what are the values used if auto-negotiation fails? In the Network Guide - EtherNet/IP, there is a section describing link auto-negotiation status which contains the following flag description “Auto-negotiation and speed detection failed (using default values) (Recommended default values are 10 Mbps, half duplex).” However, I cannot find where the default values can be set, and I cannot find any such values in the driver or application code.

As an extension of the previous question, it seems that the MDI/MDIX settings are also set to “auto” by default. What is the fallback value if auto-MDIX fails?

If I happened to miss the answer to these questions in the documentation, please point me in the right direction. Thanks!

Hi @christian.powell ,

Sorry for the late reply I missed this question when it came in. This is an interesting question. I see the fallback speed is duplex is set in the abp.eth.h file but I don’t see anything on the speed. I would assume it would be 10Mbps. We also have the Ethernet PHY configuration set in the object 0xF9, but I’m not finding an explanation for the values. If you still need an explanation for this let me know and i can look into this further.

I will note the default setup is designed for ODVA conformance.

Hi Deryck,

I work with Christian, and I just want to clarify what’s being asked here. We’re looking to see if it’s possible for the end-user, or our shipment configuration / EOL software, to configure all the link parameters, specifically the use of autonegotiation vs. fixed speed and duplex, and auto-crossover vs. fixed MDI/MDI-X.

For autonegotiation vs. fixed speed and duplex, it appears that the B40 implementation supports the standard Ethernet/IP object 0xF6 (“Ethernet Link Object”), including instance attribute 6 “Interface Control,” which allows the client to control whether autonegotiation is enabled, and if autonegotiation is disabled, it allows the user to specify the forced speed and duplex settings to use. So far so good.

What we don’t see is if there is a way to allow the user to specify the Auto-MDIX vs fixed MDI or MDI-X settings over Ethernet/IP. I see that there is an Anybus Module Object 0x04 (“Network Configuration Object”), which has instances 16 and 17 to control the MDI 1 and MDI 2 settings, but are those objects available to the end user over Ethernet/IP, or are they only accessible to the application firmware by sending commands to the B40 module?

I hope this is clear enough, feel free to ask for more details.

Thank you!

Hi Sam,

The Anybus object is only available on the Host application side. I am not aware of a Ethernet/IP object that can explicitly set the MDI settings.

Thanks Deryck!

We’re in an application where we know what the MDI/MDI-X setting should be on each port if auto-negotiation is turned off, so do you think the following algorithm will work?

  • Customer can control speed and duplex auto-negotiation and manual settings from the module’s web page. This setting can be read by our host application using the
  • At system boot, our application checks to see what the configuration of each port is using Anybus module object 04h “Network Configuration Object”, instances 6 (port 1) and 7 (port 2). Attribute 5 tells you if auto-negotiation is enabled, and if auto-negotiation is disabled, tells you what speed and duplex are manually set.
  • If auto-negotiation is disabled on port 1, we can use Object 04h, Instance #16 to set port 1 to use MDI. Or if auto-negotiation is enabled on port 1, we can use that object to enable Auto-MDI on that port.
  • If auto-negotiation is disabled on port 2, we can use object 04h, Instance #17 to set port 2 to use MDI-X. Or if auto-negotiation is enabled on port 2, we can use that object to enable Auto-MDI on that port.

I think the above algorithm would require two power cycles to fully configure the ports, once after the user changes the port settings, and once again after the application configures the MDI settings at boot. Perhaps we could automatically reset if we detect that we need to change the MDI setting, or detect that the user has requested a change before the first power cycle, and configure those changes to take effect at the next boot? Just looking for validation that I’m on the right path.

Thanks again!

Hi Sam,

  • At system boot, our application checks to see what the configuration of each port is using Anybus module object 04h “Network Configuration Object”, instances 6 (port 1) and 7 (port 2). Attribute 5 tells you if auto-negotiation is enabled, and if auto-negotiation is disabled, tells you what speed and duplex are manually set.
    It looks like this should be instance 7 & 8.

I’m not sure if 2 power cycles would be required. I believe the speed and duplex is set immediately from the web interface.