¿Puedo usar ICSP si los componentes comparten pines MOSI / SCK?

4

Estoy diseñando un circuito con un ATmega32U4 en el que necesitaré grabar un cargador de arranque una vez instalado en la PCB. Actualmente tengo 4x 74HC595 registros Shift, compartiendo el MOSI & Pasadores SCK.

¿Todavía podré conectar el programador y grabar el cargador de arranque a través de ICSP sin problemas?

MCU

Registrosdedesplazamiento

Encabezado ICSP

    
pregunta davivid

1 respuesta

3

Usted puede. Sin embargo, debe tener cuidado si le importa lo que los registros de turnos y cualquier otro esclavo SPI puedan ver si lo hace. Una forma sencilla de hacer esto es asegurarse de que ninguno de los esclavos tenga una selección de chip baja (suponiendo que la señal de selección de chip / esclavo SPI del esclavo SPI esté activa a nivel bajo, como es habitual. debe asegurarse de que no es alta). Por lo general, los pines AVR se ponen tristes durante la programación. Esto significa que puede ocurrir algún comportamiento inesperado o no especificado. Una resistencia pullup externa en el rango de 10K o más debería ser suficiente para evitar sorpresas. (El pullup interno no funcionará ya que durante el reinicio, es posible que no estén habilitados)

Por sugerencia en los comentarios, aquí hay un ejemplo parcial de cómo lo harías para un esclavo SPI genérico. La mayoría de las conexiones no se muestran, y el dispositivo SPI es un ADC aleatorio que tengo en mi biblioteca. Lo que notará es que la señal CS está baja, indicada por la línea sobre el símbolo. Esto significa que el chip se selecciona cuando la señal CS es baja. Esta es más o menos la forma estándar en que se seleccionan los dispositivos SPI. De hecho, en los circuitos integrados más sofisticados, el periférico SPI también se ocupa de la señal CS durante las ráfagas DMA y, a diferencia del AVR, donde tiene que seleccionar manualmente un esclavo utilizando una línea IO, en este caso PB1. Cuando CS se mantiene alto, al esclavo SPI no le importa lo que esté pasando en las otras líneas SPI. La resistencia que lo levanta asegura que se mantenga alta a menos que el AVR lo afirme bajo, lo que solo puede hacerse por código (y no durante la programación).

Sin embargo, en su caso, no está utilizando un dispositivo que no sea un esclavo SPI legítimo, ya que no está diseñado para cumplir con la especificación. Debería poder lograr el mismo efecto usando la señal de Latch, que parece que ya está haciendo según su esquema. Lo que debe hacer es asegurarse de que los estados del registro de cambios no cambien durante la programación, ya sea utilizando un pull-up o un pull-up según sea necesario. Alternativamente, dependiendo de su aplicación, también puede vincular el RESTABLECIMIENTO del AVR a la señal CLR en el registro de desplazamiento. Esto ayudaría a borrar todos los registros de turnos y asegurarse de que se inicia desde un estado conocido cada vez. De todos modos, si recuerdo, el restablecimiento correcto se mantiene bajo durante la programación, así que también debería permitirle evitar cualquier señal en las líneas SPI.

    
respondido por el Chintalagiri Shashank

Lea otras preguntas en las etiquetas