Recientemente diseñé un PCB para un cliente, todo está bien con el hardware y el software (la aplicación funciona como se supone que debe hacerlo). Ahora nos enfrentamos a la necesidad de actualizar el programa dentro del microcontrolador, pero dado que estos PCB están instalados en diferentes lugares del mundo, sería perfecto instalar un gestor de arranque y usar el mismo UART utilizado por la aplicación.
Descripción del tablero
- AT32UC3L032
- Un UART ya se usaba para comunicarse entre la placa y la PC
- Par de E / S para la aplicación
- Par de LED de estado
PIN y configuración relevantes
PA01 # Used for entering ISP with high level
PA20 # Used for application and ISP UART
PA21 # Used for application and ISP UART
#define COM_USART (&AVR32_USART2)
#define COM_USART_RX_PIN AVR32_USART2_RXD_0_0_PIN
#define COM_USART_RX_FUNCTION AVR32_USART2_RXD_0_0_FUNCTION
#define COM_USART_TX_PIN AVR32_USART2_TXD_0_0_PIN
#define COM_USART_TX_FUNCTION AVR32_USART2_TXD_0_0_FUNCTION
#define COM_USART_IRQ AVR32_USART2_IRQ
#define COM_USART_BAUDRATE 115200
Herramientas utilizadas
- Windows XP
- Atmel Studio 6.1
- Programador AVRONE
Después de muchas horas de búsqueda, encontré el DFU Atmel Software Framework, provisto en ASF 3.14.0.834. Eso parecía prometedor, pude instalarlo en mi tablero usando las herramientas proporcionadas:
- AVR32Studio 2.6.0
- program_at32uc3l-uart-isp-1.0.1.cmd (script proporcionado con ASF)
- Voltear 3.4.7 (batchisp)
Al principio, usé .bin
y .dat
proporcioné ASF, instalado usando el script. Ahora intenta cargar la aplicación con el comando batchisp:
batchisp.exe -device at32uc3l032 -hardware RS232 -port COM1 -baudrate 115200 -operation erase f memory flash blankcheck loadbuffer myapp.hex program verify
Pero siempre obteniendo:
Device selection.................... PASS
Hardware selection.................. PASS
Opening port........................ PASS
Synchronzing target................. FAIL Timeout error.
He probado con el osciloscopio RX y TX de UART, los datos se van a subir pero la PC está recibiendo una onda cuadrada de 27 kHz (no pueden ser datos de UART ya que no hay un bit de parada ni nada, probablemente la frecuencia no sea la misma para 115200bps).
Después de más investigación, he configurado Word1
y Word2
en el archivo at32uc3l-uart-isp_cfg-1.0.1.dat
para obtener estos valores:
- Word1: 0xE11E0024
- Word2: 0x494F81AA
Usar el pin PA01
como opción para ingresar al ISP.
Además, cargué la fuente de la DFU en Atmel Studio 6.1 y noté que no estaban usando la misma configuración de puerto serie, por lo que cambié por lo mismo que mi aplicación. También se agregaron algunos LED que se alternan dentro de la principal de la DFU.
Después de actualizar el gestor de arranque en la placa, no hay cambios de LED, mismo tiempo de espera, misma onda cuadrada.
¿Me estoy perdiendo de algo?
fuente
Respuestas:
Tal vez intente usar un programador AVR y el IDE Arduino si eso es posible. Sé que funciona bien con los microcontroladores de la serie AT.
fuente
El uso de JTAG sin el código de trampolín adecuado sobrescribirá el BOOTLOADER enviado por ATMEL. Entonces, después de la primera programación con JTAG, lo más probable es que haya borrado el BOOTLOADER para siempre.
Además, los fusibles deben estar configurados para permitir que funcione el gestor de arranque, que las configuraciones predeterminadas del programador JTAG suelen estropear.
Para reparar esto, necesita programar el BOOTLOADER nuevamente (tomado de un chip aún no programado) en el chip por JTAG y configurar los fusibles correctamente.
Dejé de usar JTAG hace mucho tiempo ya que BOOTLOADER + FLIP es mucho más cómodo y rápido. Asegúrese de estar usando hexadecimal en lugar de bin / elf y la condición BOOTLOADER sigue siendo cierta después de que finalice la condición de reinicio.
Así es como uso FLIP en RS232:
Dónde
avr32-objcopy
es de la carpeta bin AVRStudio yBatchisp
es de FLIP. Solo necesita cambiar los nombres de archivo y la ID del chip AVR y COM para que coincida con su proyecto.En caso de que lo necesite, también puede usar USB:
El trampolín debe estar habilitado en el enlazador (propiedades del proyecto) así es como se ve la configuración de la mina:
Todavía estoy usando AVR32 Studio 2.7.0 ya que las versiones más nuevas son una mierda, por lo que en ellas la configuración puede ser diferente.
[Editar1] información adicional
para UC3L0 el
AVR32_PIN_PA20
es un poco de RC reloj genérica (debe ser de 32 KHz pero varía de un chip a otro mucho sin calibración con predivisores) desde el chip hasta que su propósito se cambia a GPIO o cualquier otra cosa por lo que el ~ reloj de 27KHz no tiene nada que ver con USART . Por cierto, ese reloj funciona con 3.3V y se genera incluso si el núcleo del chip 1.98V se fríe para siempre ...La condición del cargador de arranque se ha
AVR32_PIN_PA11
establecido en cero antes de la liberación de reinicio (a menos que implemente sus propias condiciones / comandos de DFU en su firmware) Por lo tanto, una posibilidad es hacer un RC que disipe en estado BAJO y reiniciar antes de cargarlo de nuevo ... o use alguna puerta o puente FLIP / FLOP ...fuente