I need to run two SPI devices, the W5100 chip and an RFM12B, on an Arduino Ethernet (the board, not the shield), sharing the SPI bus though not the chip select lines. Arduino 1.0.6 has improved SPI handling, but there are various notes about the place describing problems with the W5100 MISO line and multiple SPI users.
The reports are vague and confusing, and suggest the need for hardware mods to SPI_EN to keep the W5100 off the MISO line when the chip isn't enabled. Does anyone know more about this?
Thanks - Will
but there are various notes about the place describing problems with the W5100 MISO line and multiple SPI users.
There are no such notes about my place. Which place are you talking about?
The SPI bus can be shared by multiple devices. The W5100 chip doesn't own the bus.
The reports are vague and confusing
Arduino 1.0.6 has improved SPI handling,...
That is not true according to the IDE v1.0.6 SPI library. IDE v1.5.8 has improved SPI functionality by adding functions to avoid SPI bus collisions by devices that access the SPI bus during an interrupt call.
The SPI.begin() function sets the default hardware SS (D10, the w5100 SS) to OUTPUT and HIGH. This disables the w5100 SPI interface, and should eliminate any bus contention.
Are you currently having a problem with SPI bus collisions?
There is an issue with some of the older W5100 shields where the chip enable pin wasn’t being toggled appropriately, but newer boards have circuitry to manage this automatically. The Arduino Ethernet Rev3 schematic http://arduino.cc/en/uploads/Main/arduino-ethernet-R3-schematic.pdf indicates there is circuitry included to prevent this issue as well, so it should not be a problem, but I can’t find schematics for older revisions.
Yes, once I actually checked 1.0.6 the SPI code is identical to 1.0.5; I'll take a look at Paul Stoffregen's github stuff.
The Arduino Ethernet circuit PDF has some strange pin numbering for the 328p, but shows the necessary inverter gate pretty clearly, so that will work. I've got an Ethernet shield somewhere I'll need to check out, though.
Thanks for the advice.