Estoy tratando de hacer que mis dispositivos de bus SPI funcionen en una placa de circuito personalizada que he soldado juntos. Desafortunadamente, olvidé agregar puntos de prueba de la sonda en esta placa de circuito en particular, y no creo que pueda probar directamente las señales del bus SPI en los circuitos integrados. Uno es un controlador de hundimiento actual de 20 pin LED en un paquete SSOP y el otro es un soporte de tarjeta microSD.
Parece que no consigo que ninguno de los dos dispositivos funcione.
Mi MCU es un Teensy 3.1. (Compatible con Arduino) En términos de firmware, estoy usando Arduino v1.06 (la versión más alta admitida por Teensyduino), y Teensyduino V1.20. Estoy usando la biblioteca / objeto SPI para comunicaciones con el controlador LED y la biblioteca SdFat para comunicaciones con la tarjeta SD.
Aquí está el esquema de cómo mi controlador LED y mi tarjeta SD están conectados:
De acuerdo con la Hoja de datos de TLC59025 , el diagrama de tiempo para comunicarse con el controlador LED es el siguiente entonces:
Mi método de prueba hasta ahora, aparte del software (es decir, intentar abrir un archivo en la tarjeta SD), ha sido el siguiente:
- Se aseguró de que el LDO de 3,3 V que sirve a la tarjeta SD estaba emitiendo el voltaje correcto
- Se intentó iniciar comunicaciones en serie con la tarjeta SD usando la biblioteca SdFat (esto fue un no-go)
- Voltaje medido en varios pines fuera del controlador LED, antes y después de enviar dos palabras de 8 bits al pin MOSI del controlador LED y pulsando LE alto
Si el pin de salida del LED en particular está bloqueado y la corriente de sumidero, entonces el voltaje que mido en ese pin debería estar cerca de 0 V, ¿correcto?
La velocidad del reloj de mi SPI maestro es de alrededor de 2 MHz . Sé que el TLC59025 dice que su punto de operación es 30 MHz . Pensé que mientras el Maestro esté usando un SCK que sea más bajo que el reloj del esclavo, las comunicaciones funcionarán. ¿Estoy equivocado?
Pensé que tal vez el comportamiento triestatal era el culpable de mis problemas, sin embargo, parece que el controlador LED TLC59025 está diseñado para aceptar siempre datos en su registro de cambios, incluso cuando no lo está. El esclavo pretendido se comunica con. Me parece que está diseñado para bloquear simplemente los últimos 16 bits de datos enviados a través del bus SPI MOSI cada vez que el pin LE está pulsado alto.
Estoy perplejo en cuanto a cómo proceder con la resolución de problemas. Sé que el problema no se debe al bus MISO, ya que solo tengo un dispositivo (la tarjeta SD) conectado a ese bus. ¿Podría ser el bus MOSI? ¿Es posible que haya demasiada capacitancia en el bus MOSI cuando intento comunicarme, degradando así la señal de datos? Si agrego un búfer de tres estados a las señales MOSI / CS en la tarjeta SD, y un resistor pullup en la señal de selección de chip de la tarjeta sd, ayudaría a mantener la integridad de la señal en el bus MOSI (es decir, reducir la capacitancia de MOSI). bus hasta el punto de que al menos el controlador LED debería funcionar?).