Logiskt sett så borde SS-pinnen inte ha någon funktion när SPI är i master-mode. Det har den inte heller OM den är satt till utgång, alltså kan man använda vilken pinne som helst för CS på sina slavar
En anledning att använda just den pinnen som SS-pinne är väl just det att det annars kan vara lätt att glömma bort att den inte får användas som ingång till något annat.
Angående att köra AVR-processorn som slav så har jag haft väldigt svårt för att få det att fungera bra. Kör man SPI i t.ex. 500kHz så har man inte mycket tid på sig att ta emot data innan det är borta igen. Om man inte har möjlighet att ligga och polla hela tiden (oftast gör man ju något annat än att bara vänta på SPI hela tiden) så måste man göra ett interrupt som triggas av CS - låg flank. Men interruptet tar sån tid att starta (Om man programmerar i C) att man mycket lätt missar första byten... Ännu svårare är att hinna få med den data som ska komma som svar... Jag har inte lyckats lösa problemet särskilt bra. Trots det använder jag en Attiny461 som SPI-slav för att ta emot kommandon och sända data. Tror jag kör ett par "dummy"-bytes i början för att den ska hinna med. Det fungerar "klockrent", men jag känner mig ändå inte nöjd.
Det fungerar ju om man kan manipulera mastern att skicka som man vill (t.ex. långsamt, speciella bytes etc), men inte om man har en "färdig" master som skickar ut massa data i hög hastighet... Det är grymt svårt att fånga upp...
Allra bäst fungerar SPI förstås om man ha shiftregister att klocka in / ur all data med. Det har jag också gjort och det fungerar extremt bra. Läser bland annat av ett antal knappar och tänder/släcker ett antal lysdioder med en enda byte SPI (åtta bitar in och åtta ut samtidigt via två shiftregister). Bara man ser till att ha ett litet lågpassfilter på CS och klockan, annars kan det bli konstigheter när man kör på några meters avstånd.