Hace un par de días tuve un problema por el que no podía leer datos de un esclavo SPI. Finalmente lo arreglé y ahora puedo leer los datos bastante bien.
Sin embargo, encontré otro tema interesante hoy. Si conecto la salida del esclavo directamente a la MCU, los datos están dañados. La siguiente imagen muestra esto:
Sinembargo,siinstalounaresistenciade220ohmiosenserie,losdatosestánbien,así:
El byte transferido fue 11001101. Puede ver el inicio y el final de la transferencia desde las dos pequeñas inmersiones en la forma de onda. La caída inicial se ve cerca del indicador de disparo. Estos no se ven en la forma de onda dañada.
La tasa de transferencia de datos no es muy rápida. La velocidad de reloj es de solo 62500 Hz.
¿Qué podría causar esto? ¿Y cómo puedo asegurarme de que no ocurra cuando finalmente dispongo el PCB?
La forma de onda superior es el reloj (SCK) y la parte inferior es MISO.
Estas formas de onda muestran el timbre con más detalle. Nuevamente, la forma de onda superior es el reloj y la parte inferior es MISO. Esta imagen tiene el CPLD y la MCU conectados a través de una resistencia de 220 ohmios:
EstomuestraeltimbrecuandolaMCUyelCPLDestánconectadosdirectamente(nohayresistenciaentreellos).Tengaencuentaquenopuedoaccederalpindeorigen(enestecaso,elpindelCPLD)porqueelCPLDestáenunaplacadedesarrolloyelchipestáenunpaqueteBGA.Voyatratardeversielpinsepuedesondear.Además,olvidéagregar,tambiéntengounaresistenciade100OhmiosenserieenelSCKcomo.NecesitabaestoparareducireltimbredelaMCUenelrelojyporqueesnecesarioparaelprogramadorISPAVR.Delocontrario,AVRStudiosimplementeemiteunerror.Porlotanto,eneldiseñofinaldePCBseránnecesarios.