Ethernet Gateway problem
-
Would like to try the softSPI solution but as a newbie I am not sure how to modify the gateway sketch and associated libraries to do this. Can anyone provide specific step by step instructions on how to modify and compile the gateway with softSPI?
-
I am a bit short on time tonight, but here is at least some pointers to get this to work:
- Get the patched RF24 lib
- Download the DigitalIO library and add it to your library tree (next to MySensors lib)
- Patch RF24_config.h to enable softspi, uncomment
//#define SOFTSPI
and select pins to use with
const uint8_t SOFT_SPI_MISO_PIN = 15;
const uint8_t SOFT_SPI_MOSI_PIN = 14;
const uint8_t SOFT_SPI_SCK_PIN = 16;
The setting above mean MOSI on A0, MISO on A1 and SCK on A2 on an Arduino Nano.
I am going to give it another shot to patch the code to use the hardware SPI but I need a couple of days to do it (have other things going on at the moment). If I fail I will check with @hek if the ethernet gw description should be updated with info on how to use softSPI or how we should proceed (perhaps choosing a different ethernet module). No matter what, I intend to bend the W5100 to my will and once I got it wrestled down, I will share the details. This thread would be a good place to track that:
-
I am a bit short on time tonight, but here is at least some pointers to get this to work:
- Get the patched RF24 lib
- Download the DigitalIO library and add it to your library tree (next to MySensors lib)
- Patch RF24_config.h to enable softspi, uncomment
//#define SOFTSPI
and select pins to use with
const uint8_t SOFT_SPI_MISO_PIN = 15;
const uint8_t SOFT_SPI_MOSI_PIN = 14;
const uint8_t SOFT_SPI_SCK_PIN = 16;
The setting above mean MOSI on A0, MISO on A1 and SCK on A2 on an Arduino Nano.
I am going to give it another shot to patch the code to use the hardware SPI but I need a couple of days to do it (have other things going on at the moment). If I fail I will check with @hek if the ethernet gw description should be updated with info on how to use softSPI or how we should proceed (perhaps choosing a different ethernet module). No matter what, I intend to bend the W5100 to my will and once I got it wrestled down, I will share the details. This thread would be a good place to track that:
@Anticimex Thanks for your input. I downloaded the digitalio library. I assume that I should overwrite the Rf24 lib entries in the Mysensors Utilities lib folder with their patched counterparts?
-
@Anticimex Thanks for your input. I downloaded the digitalio library. I assume that I should overwrite the Rf24 lib entries in the Mysensors Utilities lib folder with their patched counterparts?
-
Correct. And I forgot to mention that you also need to include digitalio.h in you gateway sketch as well in order to compile.
I have had some promising progress with my software patches. I hope to bring good news by the end of the week. -
In doing research on this I came across:
https://github.com/nicoverduin/rf24
Didn't know whether you all considered his implementation, but appears to have the same objective of allowing for softSPI on the radio. -
Am getting a compile error on this line in RF24.h:
SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
error: ISO C++ forbids declaration of 'SoftSPI' with no type
error: expected ';' before '<' token -
Am getting a compile error on this line in RF24.h:
SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
error: ISO C++ forbids declaration of 'SoftSPI' with no type
error: expected ';' before '<' token -
Double checked. Yes I have.
-
Hum...then I cannot think of anything more than that I had to change (because I made that mistake and the error message looks familiar).
But if you are patient a while longer, I will push a patch to githup with a fix for the ethernet gateway sketch so it works with HW SPI. I have confirmed it now. -
Figured it out and had a successful compile. Did not have my digital IO Lib properly set up. Now to download and test on the gateway!
-
Compiled successfully and downloaded. But doesn't show any signs of operation when plugged in. Guess I will wait for your patch.
-
My patch is now merged to the development branch.
Note that I had to increase the SPI clock divider to get it to work on my breadboard. This might not be needed for everybody, but in case you cannot get it to work, it might be worth a try on that.
For details, see here: -
I looked at your new gateway sketch and noted you use pin 4 f0r Ethernet enable. According to arduino Ethernet shield documentation, pin 4 is used for writing to the sd card on the shield. You select the W5100 with pin 10 and the sd card with pin 4. So if you have an Ethernet shield, should you be using pin 10 to select and deselect the W5100 instead of pin 4 as you do in your breadboard setup?
-
I looked at your new gateway sketch and noted you use pin 4 f0r Ethernet enable. According to arduino Ethernet shield documentation, pin 4 is used for writing to the sd card on the shield. You select the W5100 with pin 10 and the sd card with pin 4. So if you have an Ethernet shield, should you be using pin 10 to select and deselect the W5100 instead of pin 4 as you do in your breadboard setup?
-
I looked at your new gateway sketch and noted you use pin 4 f0r Ethernet enable. According to arduino Ethernet shield documentation, pin 4 is used for writing to the sd card on the shield. You select the W5100 with pin 10 and the sd card with pin 4. So if you have an Ethernet shield, should you be using pin 10 to select and deselect the W5100 instead of pin 4 as you do in your breadboard setup?
@Dan-S. I checked again, and I actually think you mixed two things here. I use pin 10, it is the slave select signal for the ethernet shield/module.
It is not to be confused with the SPI_EN signal, which is more of a free-standing GPIO. It could be that having that signal on D4 makes it incompatible with certain shields, but you cannot use pin 10, because that is reserved for SPI slave select on the ethernet shield (and therefore the library).
SPI_EN and SS is not the same thing. And on a Nano D4 is the only one left unless you want to use an analog pin, one of the UART pins or one of the interrupt-pins. I picked D4 since I use a Nano (and the MySensors site reports the Nano as the "officially supported" option). But I did try to make it possible to change this without having to hack the code, so I hope you can still make use of the patch (or create a new pull request for @hek to consider). -
Did get in my W5100 Ethernet Module yesterday and checking some documentation I think the key to get things working is:
- Check if the Slave Select signal is connected to the SPI_EN pin (pin 31) of the W5100 or the /SCS pin (pin 29).
- If connected to /SCS pin (pin 29) sharing the SPI bus will not work
- If connected to SPI_EN pin (pin 31) sharing the SPI bus should work but SPI_EN is active high where /SCS is active low
- Make sure the wires connecting the module are not too long or clock down the SPI clock
I ordered the W5100 Ethernet Module as on the website from alice1101983 and got a red board with funduino on it with pinning:

Checked the board but I see no invertor IC on it so I think NSS is connected to /SCS pin (pin 29). Too bad.
I think the shopping list should be updated to a board that has SPI_EN pin (pin 31) connected.
-
Hm. But I ordered my W5100 modile from the "store" and it has the SPI_EN signal. But I do not think it has POE on the other hand. I think it since then has been replaced with a different module on the store though.
This is the one I got. -
Did get in my W5100 Ethernet Module yesterday and checking some documentation I think the key to get things working is:
- Check if the Slave Select signal is connected to the SPI_EN pin (pin 31) of the W5100 or the /SCS pin (pin 29).
- If connected to /SCS pin (pin 29) sharing the SPI bus will not work
- If connected to SPI_EN pin (pin 31) sharing the SPI bus should work but SPI_EN is active high where /SCS is active low
- Make sure the wires connecting the module are not too long or clock down the SPI clock
I ordered the W5100 Ethernet Module as on the website from alice1101983 and got a red board with funduino on it with pinning:

Checked the board but I see no invertor IC on it so I think NSS is connected to /SCS pin (pin 29). Too bad.
I think the shopping list should be updated to a board that has SPI_EN pin (pin 31) connected.
@daulagari I have seen HW patches that solves the SPI_EN problem by putting an inverter on the SCS signal, thus automatically enables the SPI bus on the W5100 if SCS is asserted. That should have been put on the module in the first place, but for those who are unfortunate to have a W5100 module without the SPI_EN and no "management" of SPI_EN, that might be a option to consider. A description for how to modify the "standard" shield is here.
-
@Anticimex : Yes, the module I got is definitely different.
A hardware patch will be very difficult I think because the pins of the devices are spaced very close to each other and I do fear the SPI_EN pin (pin 31) is not going to a net. Will have a look Monday in the office where we have a magnifying binocular.
But, suppose I have access to the SPI_EN pin, then I would hope an additional invertor would not be needed, Arduino should be able to invert the select signal I hope.