He leído en Internet que para iniciar una transacción SPI a un dispositivo soportado por SPI, la línea SS (slave select, también conocida como chip select) debe ser puesta a bajo para toda la transacción y luego ser llevada a alto al final para terminar la transacción. Si hago un circuito que contenga sólo un dispositivo SPI, ¿tendré que bajar la línea SS para enviar el comando y luego subirla cada vez o puedo atar la línea ss a bajo y enviar comandos ilimitados? El dispositivo que estoy usando es Chip de sonido ISD1700 .
Respuestas
¿Demasiados anuncios?[ @Kevin y @akohlsmith deberían publicar sus comentarios como respuestas.
Esto es para ampliar sus comentarios. ]
SPI 1 no prescribe el comportamiento exacto de la línea de selección de esclavos (SS) 2 ). Este comportamiento depende de la implementación de cada dispositivo individual. He visto dispositivos que pueden funcionar con el SS permanentemente asertado. También he visto dispositivos que requieren bordes descendentes y ascendentes en el SS.
Aunque no dice explícitamente que la SS debe se puede alternar,
la guía de diseño (p.31) dice que SS comienza y termina la transacción SPI. Sería prudente suponer que SS tiene que ser conmutado para que la transacción SPI llegue.
1 El SPI es más bien una costumbre, más que un estándar.
2 CS (chip select) es otro nombre para slave select.
Depende totalmente del dispositivo esclavo.
Si el protocolo para el dispositivo esclavo incluye algún tipo de encuadre, ya sea con paquetes de longitud fija, bytes de inicio/parada o una cabecera que especifica la longitud del paquete, entonces el dispositivo esclavo puede ser capaz de operar sin una selección de chip. Tengo un chip de memoria flash SPI en la placa en la que estoy trabajando actualmente que parece ser perfectamente feliz con o sin la selección de chip. Puede estar permanentemente conectado a 0V (habilitado) sin problemas.
Esto nos causó algunos problemas, porque un contratista había configurado algunas de las E/S de bajo nivel, incluyendo el SPI, y nosotros (¡y ellos!) no nos dimos cuenta de que no tenían la selección de chip funcionando. No fue hasta que tuve que ampliar su trabajo de SPI para añadir otro dispositivo SPI en el mismo bus que me di cuenta de que no teníamos selección de chip.
Por el contrario, muchos dispositivos esclavos necesitan selecciones de chip para enmarcar los datos, y el envío de más bits/bytes que el paquete esperado sin liberar la selección de chip al final será visto como una transferencia no válida y rechazada. Los DACs suelen cargar el nuevo valor en la salida en el flanco de subida de la selección de chip. Los ADCs, de forma similar, a menudo utilizan la transferencia SPI para iniciar (y a veces cronometrar) la conversión, por lo que necesitan el flanco de bajada de la selección de chip como disparador.
Su hoja de datos no dice nada sobre cómo manejar su chip en particular a través de SPI, y no estoy lo suficientemente motivado para buscarlo en Google. Ejercicio que queda para el lector... ;)
Sin saber nada específico sobre el dispositivo esclavo SPI, no, no puedes simplemente atar SS bajo.
Muchos dispositivos utilizan el flanco de subida de SS para reiniciar su lógica interna al inicio de una nueva transacción. Por ejemplo, las memorias pueden interpretar los dos primeros bytes como dirección y los siguientes como datos. Algunas memorias no realizan la escritura física hasta que SS se desactiva.
En el caso de algunos dispositivos con el protocolo adecuado, podría salirse con la suya. Sin embargo, no funcionará con la mayoría de los dispositivos existentes.