What sensible methods do people use to implement SPI slave comms on AVR micros? I'm specifically working with the ATtiny26L right now.
I'm currently using a software approach, with the select line connected to an int-on-change pin. When that int comes in, I read the state of the pin and if it's high, I turn off the USI UART and set MISO to input mode so it doesn't interfere with other devices on the bus. This has a speed downside, and more importantly fearsome things happen to the bus if the micro is crashed. (Of course my code is pefrect and error-reef, but I have to allow for the presence of bad fairies ;). Upside is that it's trivial to detect end-of-transaction and clear out any garbage data that may have accumulated.
Second method I considered was using an LS244 to buffer the MISO/MOSI/SCK lines and tristate it with the select signal. Downside to this is increased BOM.
Third method I considered was for all devices to regard themselves as continuously selected, but only listen/respond to certain commands (and keep their mittens off the MISO line until it's their turn to talk). This seems to be horrendously fragile though, for all kinds of reasons.
Is there some seriously silly error I've made, or are these my only options?