Estoy interesado en crear una interfaz simple para SWD para poder escribir memorias flash de chips ARM. Es decir. para crear un dispositivo de programación impecable, más por ejercicio.
Empecé a leer la documentación y buscar ejemplos (porque creo que la gente ya lo ha intentado). Actualmente tengo algunas preguntas, por lo que agradecería la orientación:
- Voy a configurar SWDCLK como salida normal y SWDIO como drenaje abierto (que actúa como entrada cuando está en alto-Z, ver más abajo). Sospecho que también está abierto en el lado El dispositivo de destino, por lo que con la ayuda de pull-up nunca tendré un cortocircuito por error, ¿es correcto?
- ¿hay un período de reloj mínimo permitido? ¿O algo hará, incluso unos pocos Hertz? ¿O quizás esto depende del dispositivo de destino?
- ¿es correcto que en el modo de espera ambas líneas se muevan ALTA en el lado del host, y cuando comienza la comunicación, se está cayendo la primera ventaja en SWDCLK?
- HOST debería cambiar SWDIO en el flanco descendente de SWCLK, y muestra datos del objetivo (cuando sea necesario) en el flanco descendente de SWCLK, ¿no?
Creo que actualmente es suficiente (aunque también estaría agradecido por una breve muestra de la secuencia de comandos para leer / escribir el flash, pero creo que pronto lo descubriré) - ¡gracias de antemano!
Actualmente estoy tratando de usar Arduino para crear un prototipo básico, aunque puedo cambiar a un simple Atmega o LPC111x con el cable FTDI en cualquier momento ... Aunque creo que esto no es importante.
P.S. Para explicar mejor sobre SWDIO, por ejemplo, con AVR, puse el pin en estado BAJO y luego, si se cambia a salida, produce 0. Sin embargo, si se cambia a entrada, se encuentra en estado de alta Z y realmente funciona como entrada . Es decir. No manipulo el bit PORTx, sino DDRx (mientras que PORTx es 0 permanente y PINx se usa para leer).