Esta shield es una expansora de puertos SPI, que intenta resolver de una determinada manera el tema de las comunicaciones SPI. Este tipo de comunicación es serial sincrónica y full-duplex, por lo que requiere de 4 hilos.El problema de SPI es que uno de esos cuatro hilos cumple la función de "Slave Select" o SS, lo que implica que es necesaria una linea por cada uno de los periféricos conectados. Esto convierte a SPI en una especie de híbrido entre comunicación serial y comunicación paralela, desde el punto de vista del hardware, ya que si por ejemplo se quieren conectar 4 dispositivos SPI a un µControlador, se necesitan 7 hilos en total: 2 para la comunicación full-duplex, 1 para el clock de sincronismo y 4 mas para los dispositivos.La mayoría de los diseños propuestos, tanto en Arduino como en otros proyectos, contempla solo la conexión de 1 dispositivo SPI a la vez, de modo de emplear una sola linea SS. Esto empalma con las librerías de software de SPI que usan un pin específico como SS. Cuando se quieren conectar dos o mas dispositivos SPI (por ejemplo un adaptador Ethernet y una almacenamiento de tarjetas SD) ya se complica desde el punto de vista del hardware y desde el software.Los diseñadores de Arduino han definido la comunicación SPI como lo hacen los fabricantes de µControladores (tanto AVR como PIC) en sus hojas de datos: Con cuatro hilos, donde uno de ellos es SS y sirve para un solo dispositivo. Y actualmente hay una dualidad en Arduino sobre donde estarían colocados esos 4 pines de SPI, ya que en la UNO R3 están colocados:
-- en los pines digitales high en la forma de 4 pines hembra en una fila, sin alimentación
-- en el conector ICSP en la forma de 6 pines machos en dos filas, incluyendo alimentación, pero sin la linea SS
La forma "normal" de conectar dispositivos SPI a la Arduino UNO es usando los pines digitales, pero al parecer los diseñadores quieren dejar solo la comunicación por el conector ICSP (como lo hicieron en la Leonardo), pero en ICSP no tenemos la linea SS .... La forma prevista parece ser que la shield tenga un conector de 6 pines hembra en la parte de abajo que conecte encima del conector ICSP de las Arduino, con lo que la ubicación física de ese conector pasa a ser crítica, y la linea SS debe resolverse por otro lado. Además no queda claro que pueda hacerse encadenamiento (daisy-chain) de esos conectores, y no queda claro cuantos dispositivos SPI pueden conectarse de esta forma a una Arduino.
Incluso, en diseños como el de este conector UEXT de 10 pines, se intentan resolver los tres tipos de conexiones seriales en el mismo conector. Por el conector se lleva alimentación de 3.3V, dos hilos para comunicación UART, dos para I2C, y 4 para SPI. Ese conector podría ser usado en dispositivos con daisy-chain. Pero de los tres tipos, solo I2C permite hacer de forma transparente el daisy-chain y la multiplicidad de dispositivos. La comunicación UART intrínsecamente solo permite un dispositivo a la vez, y en el caso de SPI podría haber sido múltiple, pero por el conector viaja una sola linea SS, permitiendo conectarle en toda la cadena solo 1 dispositivo SPI. Es probable que este tipo de conectores desperdicie muchas lineas (6 de las 10) y genere una errónea sensación de multiplicidad.
Lo que se propone en FreeSensors es utilizar el direccionamiento de 3 bits (ya usado en la shield AIport) para tener 8 lineas SS de Slave Select y así poder comunicar con hasta 8 dispositivos SPI en forma simultánea usando una shield específica. Se usará el color Blanco para distinguir este tipo de conectores del resto. Si el dispositivo no necesitase la linea SS (que podría estar siempre seleccionada internamente), necesitamos igualmente conectar 5 hilos: 2 de alimentación, 2 de serial y 1 de clock, y si requiriese si o si la SS para su operación necesitamos una linea adicional totalizando 6. En cualquier caso, se requieren conectores (jacks y plugs) de 6 contactos 6P6C.
Las otras posibilidades a explorar son la posibilidad de generar el clock de SPI en la shield, y las comunicaciones donde la Arduino es slave y no master.