No se puede hacer que el gestor de arranque funcione en una PCB personalizada con AT32UC3L

12

Recientemente, he diseñado una PCB para un cliente, todo está bien con el hardware y el software (la aplicación funciona como se supone). Ahora nos enfrentamos a la necesidad de actualizar el programa dentro del microcontrolador, pero como estos PCB se instalan en diferentes lugares del mundo, sería perfecto instalar un cargador de arranque y usar el mismo UART que usa la aplicación.

Descripción del foro

  • AT32UC3L032
  • Una UART ya utilizada para comunicarse entre la placa y la PC
  • Par de I / Os para la aplicación
  • Par de LED de estado

PINS relevantes y configuración

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 de Atmel Software Framework, que se proporciona en ASF 3.14.0.834. Se veía prometedor, pude instalarlo en mi pizarra utilizando las herramientas proporcionadas:

  • AVR32Studio 2.6.0
  • program_at32uc3l-uart-isp-1.0.1.cmd (script proporcionado con ASF)
  • Flip 3.4.7 (batchisp)

Al principio, usé .bin y .dat provistos con ASF, instalados usando el script. Ahora intento cargar la aplicación usando 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 desde UART, los datos se van a incorporar, pero la PC está recibiendo una onda cuadrada de 27 kHz (no puede haber datos de UART porque no hay bit de parada ni nada, probablemente la frecuencia tampoco) lo mismo para 115200bps).

Después de más investigaciones, he configurado Word1 y Word2 en el archivo at32uc3l-uart-isp_cfg-1.0.1.dat para obtener estos valores:

  • Word1: 0xE11E0024
  • Word2: 0x494F81AA

Para usar el pin PA01 como opción para ingresar en el ISP.

También, cargué la fuente del DFU en Atmel Studio 6.1 y noté que no estaban usando la misma configuración de puerto en serie, por lo que se cambió por el mismo que mi aplicación. También se agregaron algunos indicadores LED que se alternan dentro de la parte principal del DFU.

Después de actualizar el gestor de arranque en la placa, no hay cambios en los LED, el mismo tiempo de espera, la misma onda cuadrada.

¿Me estoy perdiendo algo?

pregunta Alexandre Lavoie

2 respuestas

1

Tal vez intente usar un programador AVR y el IDE de Arduino si es posible. Sé que funciona bien con los microcontroladores de la serie AT.

    
respondido por el electricviolin
0

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.

También se deben configurar los fusibles para permitir que el gestor de arranque funcione, con lo que las configuraciones predeterminadas del programador JTAG suelen fallar.

Para reparar esto, debe programar la parte posterior de BOOTLOADER (tomada de un chip no programado y sin programar) en el chip por JTAG y configurar los fusibles correctamente.

Hace mucho que dejé de usar JTAG porque BOOTLOADER + FLIP es mucho más cómodo y rápido. Asegúrate de que estás utilizando hexágono en lugar de bin / elf y la condición de BOOTLOADER sigue siendo verdadera después de que finalice la condición de restablecimiento.

Así es como uso FLIP en RS232:

avr32-objcopy -O ihex AT32UC3L064.elf AT32UC3L064.hex
Batchisp -device AT32UC3L064 -hardware RS232 -port COM1 -baudrate 115200 -operation onfail abort memory flash erase f blankcheck loadbuffer AT32UC3L064.hex program start reset 0

Donde avr32-objcopy es de la carpeta bin de AVRStudio y Batchisp es de FLIP. Solo necesita cambiar los nombres de archivo, ID de chip AVR y COM para que coincida con su proyecto.

En caso de que lo necesites, también puedes usar USB:

avr32-objcopy -O ihex cpp_trampoline.elf AT32UC3A3256.hex
Batchisp -device AT32UC3A3256 -hardware USB -operation onfail abort memory flash erase f blankcheck loadbuffer AT32UC3A3256.hex program start reset 0

El trampolín debe estar habilitado en el enlazador (propiedades del proyecto), así es como se ve la configuración de la mina:

linker: -nostartfiles -Wl,--gc-sections -Wl,-e,_trampoline -mpart=uc3l032 -Wl,--gc-sections --direct-data --rodata-writable

Todavía estoy usando AVR32 Studio 2.7.0 ya que las versiones más nuevas son mierda de mierda, por lo que en ellas la configuración podría ser diferente.

    
respondido por el Spektre

Lea otras preguntas en las etiquetas