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?