Arduino YUN SPI Probleme

Hallo Community,
leider bin ich aktuell mit meinem Latein am Ende.
Ich verwende einen Arduino Yun (noch nicht den ganz neuen, aber Anfang diesen Jahres gekauft). Unter anderem sind an diesem 3 MCP23S17 (die SPI-Variante) angeschlossen. Beim Yun sind ja die MOSI, MISO und SCK-Pins am ICSP-Header.
Laut Datenblatt kann man mehrere MCPs an einen CS anschließen, dafür muss aber Hardwaremäßig eine Adresse angelegt werden, dies habe ich auch so gemacht (Adresse 0, 1 und 2).
Für die Programmierung habe ich mir die Library von “Cort Buffington & Keith Neufeld” (https://playground.arduino.cc/Main/MCP23S17). Die Library habe ich für meine Testzwecke um die Funktion ReadRegister erweitert
Die Kommunikation findet auch statt, leider kam es bei ersten Test zu unregelmäßigen Fehlern.
Zur Vereinfachung habe ich erst einmal nur den MCP mit der Adresse 0 angeschlossen.
Zuerst hatte ich den Pin 7 vom Arduino als CS eingesetzt. Da dieser aber auch als Handshake verwendet wird und ich nicht wußte, ob der Fehler dadurch kam, habe ich den Pin A2 eingesetzt.
Den Resetpin der MCPs wird auch vom Arduino gesteuert
Hier mein Code:

#define BusResetPin 4

#define TestPin 13

bool AlarmReset = false;
MCP onechip(0x00, A2);

void setup()
{
	Bridge.begin();
	Console.begin();
	while (!Console) { ; }
	Console.println("You are connected");
	pinMode(BusResetPin, OUTPUT);
	digitalWrite(BusResetPin, HIGH);
	delay(1000);
	digitalWrite(BusResetPin, LOW);
	delay(1000);
	digitalWrite(BusResetPin, HIGH);
	delay(1000);
	onechip.begin();
	onechip.pinMode(9, INPUT);
	onechip.pinMode(10, INPUT);
	onechip.pinMode(11, INPUT);
	onechip.pinMode(12, INPUT);
	onechip.pinMode(13, INPUT);
	onechip.pinMode(14, INPUT);
	onechip.pinMode(15, INPUT);
	onechip.pinMode(16, INPUT);
	onechip.pinMode(1, INPUT);
	onechip.pinMode(2, INPUT);
	onechip.pinMode(3, OUTPUT);
	onechip.pinMode(4, OUTPUT);
	onechip.pinMode(5, OUTPUT);
	onechip.pinMode(6, OUTPUT);
	onechip.pinMode(8, OUTPUT);
	Console.println("Setup fertig");
	Console.println("IODIRA");
	Console.println(onechip.ReadRegister(IODIRA));
	Console.println("IODIRB");
	Console.println(onechip.ReadRegister(IODIRB));
}

Die Register IODIRA und IODIRB sollten eigentlich nach dem Aufruf von Setup immer den gleichen Wert haben, was aber nicht der Fall ist. Mal ist Pin 10 kein Eingang, mal Pin 12, mal…
Folgende Lösungsmöglichkeiten habe ich schon versucht:

  • Den SPI-Bus-Speed verringert
  • Den Byte-Mode vom MCP aktiviert um ein automatisches inkrementieren des Adress-Pointers zu verhindern
  • Einen anderen CS-Pin
  • Resetablauf vom MCP verändert
  • pinMode vom MCP gleich als word übertragen

Leider alles ohne Erfolg. Als ob der MCP von woanders einen Befehl bekommt seine Pins umzuschalten, oder er macht es von alleine!?
Vielleicht hat einer von euch noch eine Idee oder einen Tipp wo ich den Fehler suchen kann.
Gruß esparki