Connecting an Ethernet PHY to Arduino Due

Pin interconnection between Taijiuino and Ethernet PHY DP83848C

Since last weekend, I have a compiling (OK) Ethernet MAC API for Arduino Due. It contains the following files:

  • emac sample sketch
  • emac.h
  • emac.cpp
  • ethernet_phy.h
  • ethernet_phy.c
  • mii.h
  • mini_ip.h
  • conf_eth.h

All these files come from Atmel and are the only necessary to run the sample. I did rid off the rest (about 40 files) from the original ASF library.

I have planned to start tests tonight with a Taijiuino and a DP83848 PHY module. (I still waiting for the Russian AS_DM9161. The last snowstorm have caused mail delays). I hope to show tomorrow results of the tests and some pictures.

I am conscious that some people are eager to get the library but it doesn't make much sense to publish it without previous basic tests. Thus, thank you for your patience!

I connected Taijiuino with EPHY DP83848 but no communication. I will be revising the phy files, pin configuration and wires. I hope to bring good news soon. Here a picture of my mess!.

This is one thread I am really interested in. Ethernet on the DUE without sacrificing so many i/o pins or fitting a shield.

Hi Palliser

I'm also interested in this, I'll likely go and make my own board (not a shield )to add onto a TAIJIUINO so I can pick up the additional pads, I'll design this board with 802.3af POE hence why I'll design my board around components that have been proved to work 1st :wink:
I wish you luck... I did wonder if the breadboard wiring may be causing an issue with its failure; have you tried to shorten the wiring at all ??

BR
Graham

Hello Graham,

I am happy you are interested in this project. I still working on the modified Ethernet MAC library. As you mentioned, I had to get rid off the breadboard to avoid wiring issues. Here a picture of what I have so far with less connections between the external Ethernet PHY DP83848 and a Taijiuino, although I am planning to use a DM9161 Phy when coming in from Russia next week. It could be also great to see your POE one of these days. One of my future goals is the implementation of a Webserver example, but for that, I have to wait a little longer. Regards!

Hello Palliser

My; that looks a lot neater, and hopefully stop any gremlins with wire lengths.
It will be interesting when you receive the DM9161, is this mounted on a carrier with the jack/magnetic's similar to the DP83848 board ?

The POE is very easy to achieve with suitable Jack socket, as similar to the Arduino Ethernet, and a ready built POE module can then be soldered in
these can range in voltage from 3.3V upwards so can be selected to give the voltage that's required and additional Voltage regulators used for lower voltages if needed.
some such as the silverline range can have there outputs modified, the usual 12V from the 9012-S POE module is reprogrammed with a shorting link to only supply 9V so not to overheat the fixed 5V regulator on most of the Arduino boards.

I'll keep and eye open for developments and wish you success

BR
Graham

Hello Graham,

Yes. The DM9161 board is similar to the DP83848. I chose it as my first option, given that the hardware (pull-up, pull-down PHY address resistors, filter/noise capacitors, Crystal, timing, etc.) is more than proven by Atmel for the most of their development kits. Thank you for the good wishes.

here a picture of AS-DM9161

Regards!

After a long wait, I just received yesterday my AS-DM9161 board. I really hope to have better luck with it. I have been trying to modify the EMAC library to make the DP83848 work with the Taijiuino but only communication errors. I will keep you posted once I start getting communication between Taijiuino EMAC and Ethernet PHY DM9161. regards!
Here a picture of the Russian board!

Hey Palliser, how are you getting on with interfacing your phy to the Due? I don't mean to chase you but I am keen to see the library/ethernet files as I would like to add support for a different PHY.

Hello TonyT3P3,

Following is a summary of my progress with the EMAC/PHY interface.

Firstly, I got good Ethernet communication between my new Russian PHY board (AS-DM9161) with the SAM3X-EK board. I performed this with the purpouse of verify the functionality of this PHY board because is slightly different from the one embedded in the SAM3X-EK.

Here a log excerpt of the EMAC/external EPHY communication between SAM3X-EK board and AS-DM9161 Ethernet PHY board:

-- MAC 0:4:25:1c:a0:2
-- IP  192.168.0.2
Link detected.
-- IP  255.255.255.255
-- IP  20.254.181.156
======= IP   60 bytes, HEADER ==========
 IP Version        = v.4
 Header Length     = 5
 Type of service   = 0x0
 Total IP Length   = 0x22
 ID                = 0x4B8E
 Header Checksum   = 0x2E92  Protocol          =
UDP

 IP Src Address    = 192:168:0:3
 IP Dest Address   = 255:255:255:255
----------------------------------------
-- IP  255.255.255.255
-- IP  20.254.181.156
======= IP   60 bytes, HEADER ==========
 IP Version        = v.4
 Header Length     = 5
 Type of service   = 0x0
 Total IP Length   = 0x2C
 ID                = 0x4B91
 Header Checksum   = 0xAF94  Protocol          =
ICMP

 IP Src Address    = 192:168:0:3
 IP Dest Address   = 255:255:255:255
----------------------------------------
...

So far so good.

Then, I started tests between the Taijiuino board and the AS-DM9161,but hitherto, I have not managed to get communication between them. The EMAC sample sketch compiles OK in the Arduino IDE but I believe
I am overlooking something, specially in the Pio/pin configuration (in the variant files).

Here a log excerpt of the Taijiuino DUE EMAC/external EPHY:

-- MAC 0:4:25:1c:a0:2
-- IP  192.168.0.2
Link detected.

I can see leds activity (FD/100/LINK) in the DM9161 but I am getting the same log even with the Taijiuino disconnected from the PHY.

Thus and unlike my CAN project, I have decided to publish and keep updates of the EMAC library files here (see my very first post in this thread). This files are the ones I am using now. The purpose of this is to obtain help from you guys.

Because the sketch compiles OK, I think that the only way to help testing the code, is to do it with the Taijiuino board and a DM9161 based board. Anyway, any comment/revision of the code is very welcome.

Other exercise I am going to do this week, is to run the same test SAM3X-EK/DM9161 but with the DP83848 to confirm that it works also, thus, using this second PHY as another option.

For your information, I am also trying to get direct support from Atmel. Thank you.

Whoever ventures to help me with the Ethernet MAC library, here what I have done regarding the EMAC pin configuration:

-I added in the variant.cpp the EMAC pin definition (lines 291 to 301) and the initialization of the EMAC Pio configuration (lines 431 to 485).
-I added in the variant.h the defines of the EMAC pins (lines 187 to 202).

Here a picture of my test of the DM9161 board. My test with the DP83848 still pending. I also still trying to get help from Atmel technical support team.
But don't worry, I will solve it.

Regards!

Hi Palliser,

I'm currently designing a SAM3X8E Arduino "work-alike" system and was planning to use a W5200 but this thread has convinced me to at least break out all the EMAC signals so I can add the PHY at a later date.

Thanks for you work in this (and other) areas, I also have both CAN interfaces on my backplane so will presumably be looking to your work there as well.


Rob

Hello Graynomad,

I am delighted to know about your Due-oriented system! Please, remember to include also the pin 69 (NRST) which adds the capability of the SAM to reset external components. Keep us posted about your progress and count on me if you need any assistance.

Palliser

remember to include also the pin 69 (NRST)

Already done.

I'm trying to provide full access to all peripherals like HSMCI, SSC, SMC, EMAC etc. Unfortunately the chip MUXs many signals and provides no optional pins so there will always be trade-offs of the "If you use X you can't use Y" type.

Do you know what frequencies I can expect on the EMAC signals? The full 100MHz or only 50 because there are two data lines. I plan to run these signals across a backplane to an Ethernet card and am a bit worried about the speeds.


Rob

Unfortunately the chip MUXs many signals and provides no optional pins

Yep. Multiplexing scheme (to reduce I/O) is our eternal karma with micro-controllers.

Do you know what frequencies I can expect on the EMAC signals?

The frequency depends on the interface supported by the external PHY. Most PHYs support both.

-25 MHz for MII
-50 MHz for RMII.

I am using RMII (higher speed and saves me 4 pins).

-Palliser

Is there any progress with DP83848 with sam3x-ek?
Later I would like to contribute LAN8720A PHY once I understand how you port it.
Thanks for your work.

Hello anon10500,

I haven't started my tests with DP83848 but I am almost certain that it will work in a similar way to the DM9161. I also checked some specs and schems of the LAN8720A PHY you mentioned and it should also work. What I do not understand is why the people from MikroElectronika didn't connect the reset pin?...though I'm mostly centered now trying to communicate the Due with the PHY. As you may have noticed, I am working together with Atmel tech support to achieve this. And I also published in the forum my library asking for help. Even though what separates me to begin to see result is too little, I cannot be precise about the 'when'. Just keep in touch.

Hello Palliser,

I am working together with Graynomad (Rob) in the design of a new modular Due 'work-a-like' system, in which we intend to use the EMAC together with a PHY such as the DM9161 chip from Davicom or maybe something better still.

Firstly, I wish to say that we appreciate your willingness and openness in wanting to have a working SAM3X EMAC/PHY Ethernet library for the Due family.

I would like clarification as to the current progress of your library to allow the SAM3X EMAC interface to connect to a PHY.

In your first post you write:

See the attachment with the latest EMAC library (compiles OK but not working)

You say it compiles ok but that it does not work, can you give us some details as to what you have been able to get working and what is not working please?

In your post #10 you wrote:

I just ported the Atmel Ethernet API to Arduino IDE. At least the 'EMAC_EMAC_EXAMPLE1' now called 'Arduino_Due_EMAC_Sample_1.ino' is compiling with no errors

When you say you ported the Amtel Ethernet API to Arduino IDE, can you elaborate a little for us, in terms of what functionality does this port provide in the Arduino IDE, for example, does it allow full configuration of and use of the EMAC interface?

In your post #13 your wrote:

Don't ask but even though DM9161 is obsolete, expensive and difficult to purchase it, it has been Atmel's workhorse for the SAM family all these years. No "TX underrun" messages under heavy loads with 100M link. I still believe is the best option for now.

I understand Davicom have a newer DM-9162 now, in your opinion, is this any better?
If not, what other PHY would you suggest for best design for a better system?

In your reply #22 you mention:

better but more expensive option is to use a Micrel PHY, pretty much because, according to Atmel, it has better hardware integration and documentation.
Indeed, it is in my list To-Do to purchase one of the series KSZ80.

Looking at the Micrel list for PHY chips, I found this one, a KSZ8081RNA, http://www.micrel.com/index.php/en/products/lan-solutions/phys/article/3-ksz8081rna.html. It looks to be a modern PHY that offers a few more niceties such as termination resistors on chip as well as being able to use a 25Mhz crystal which generates the 50Mhz clock for RMII.
When you say 'more expensive', I checked the cost of these chips and I found them to be one of the cheapest, at around US$1.00 each as compared to the TI DP83848 which sells at around US$3.00 to US$5.00. Why did you find this option 'more expensive' ?

In post #27 on February TonyT3P3 wrote:

I am working with a KSZ8051RNL which I had working on LPC1789 and want to port to the SAM3X8E.

I believe the KSZ8051 to which he refers is a model before KSZ8081, and with my limited research, both appear to be a very suitable PHY to use, especially since the DM-9161, as you say is 'obsolete', or at least quite a number of years old now.

In your reply #46 you wrote:

I have been trying to modify the EMAC library to make the DP83848 work with the Taijiuino but only communication errors.

Can you tell us if you have since been able to understand and rectify those errors or have you made further progress with this?

In reply #48 you wrote:

I got good Ethernet communication between my new Russian PHY board (AS-DM9161) with the SAM3X-EK board. I performed this with the purpose of verify the functionality of this PHY board because is slightly different from the one embedded in the SAM3X-EK.

Can you tell us in more detail what you mean exactly by 'good Ethernet communication'?
My understanding from looking at the schematic of the SAM3X-EK where the DM-9161 is located looks to be the same as the AM-DM-9161 module, is this not correct?

In reply #48 you wrote:

The EMAC sample sketch compiles OK in the Arduino IDE but I believe
I am overlooking something, specially in the Pio/pin configuration (in the variant files).

I wonder if you can elaborate on this?
Do you believe the problems are in the initial PHY configuration or are you getting past that point and the problem lies in the actual implementation of Ethernet communication?

Lastly, I noticed that in your first post, the last edit states 'Last Edit: 15 March 2013, 02:18:35 by Palliser'.
But I notice in your reply #49, dated March 19 it appears you have made further improvements to your library as follows;

I added in the variant.cpp the EMAC pin definition (lines 291 to 301) and the initialization of the EMAC Pio configuration (lines 431 to 485).
added in the variant.h the defines of the EMAC pins (lines 187 to 202).

Can I confirm with you that you are keeping the first post the location of the latest code?

Palliser, I realise this is a long list of questions, but we are very keen to use the SAM3X EMAC in our design.
I like what you say when I read 'But don't worry, I will solve it'. Please keep at it Palliser, it will be a major step forward to have it functional.

I would also like to say we would invite any others who might have 'tinkered' with this interface who may have something to add to please step up to the podium.


Paul

We are experimenting with 5 Due's (Arduino y TAIJIUINO varieties) at the moment. While I am enjoying the freedom of multiple UARTs and Allot of I/O... well, I'm growing frustrated getting LCD touch screens, SDfat and I2C working acceptably. (I bet we have 9 different LCD panels ranging from 2.4" to 7"). I haven't even begun with Ethernet...nor do I have the technical expertise and capabilities you all have. It's frustrating because I want to stop messing around with getting the prototyping platform (DUE) operational and just move on to designing and building my proof of concepts. Admittedly the stuff I am trying with DUE is magnitudes more difficult than what I've done with Uno and Mini. I need local user interface (lcd/sdfat), remote user interface (web/Ethernet), local I/O (done! finding hardware debounce was awesome) and remote I/O (I2C) operational.

That said..if you all (GreyNomad, Wallaby and Pallisar) identify a number of PHYs you want to try.... just direct me to where they can be purchased in quantity and at good prices...and I will donate them to the cause... I'll gather a mess of them together and then get them shipped to Oz and Venezuela. (I live in Mexico but I get up to Arizona, USA allot). I'll send you multiples so that you can burn a few of them up at will. Sorry, guys, that is the best I can do stepping up to the plate to help you guys with the effort.