I am just a beginner but it sounds strange: even if the NFC shield does not handle SS properly, I am setting it LOW just before calling NFC functions so that should not be an issue (and when I use different MOSI/MISO/SCK pins everything works fine).
I am sure that there must be a technical reason beyond my understanding and an easy way to solve it. For all those that want a quick fix, I attach the comments explaining how I got it working.
It does not require any HW or SW update but the wiring is a bit cumbersome (probably some of the wires are not needed but this wiring works ![]()
#define SCK 9
#define MOSI 3
#define SS 5
#define MISO 6
// SPI digital PINs are HW hardcoded in both Ethernet and NFC shields (SS - 10, MOSI - 11, MISO - 12, SCK - 13
// Do not know why, but using a different SS PIN for NFC shield (PIN 5) and reusing the other three PINs(11,12,13) does not work. As soon as Ethernet shield is used
// (PIN 10 set to LOW) the NFC shield stops reading tags.
// Using completely independent PINS for NFC shield (5, 3, 6, 9) works fine and no interference is detected between the two shields.
//
// Connect the Ethernet shield on top of Arduino Uno to get ICSP PINs
// Both shields use the ICSP PINs for SPI protocol (rather than the actual digital PINs). Since the NFC shield ICSP PINS are unconnected, they need to be wired to the
// appropriate digital PINs in the NFC shield.
//
// This is the required wiring:
// * wire RESET, 3,3V, 5V, GND, GND, Vin female PINS from the Ethernet shield to equivalent male PINs in NFC shield
// * wire digital female PINs in the Ethernet shield to male digital PINs in NFC shield:
// 5 (Ethernet) -> 10 (NFC) SS
// 3 (Ethernet) -> 11 (NFC) MOSI
// 6 (Ethernet) -> 12 (NFC) MISO
// 9 (Ethernet) -> 13 (NFC) SCK
//
// * wire female ICSP PINs of NFC shield with the appropriate female PINs of NFC shield:
// MISO (ICSP) -> 12
// SCK (ICSP) -> 13
// MOSI (ICSP) -> 11
// Vcc (ICSP) -> 5V (This is the 5 Volts power PIN; do not connect it by mistake to digital PIN 5)
PN532 nfc(SCK, MISO, MOSI, SS);