Impossible de faire démarrer le chargeur de démarrage sur un PCB personnalisé avec AT32UC3L

12

J'ai récemment conçu un PCB pour un client, tout va bien avec le matériel et les logiciels (l'application fonctionne comme prévu). Nous sommes maintenant confrontés à la nécessité de mettre à jour le programme à l'intérieur du microcontrôleur, mais comme ces PCB sont installés à différents endroits du monde, il serait parfait d'installer un chargeur de démarrage et d'utiliser le même UART que celui utilisé par l'application.

Description du conseil

  • AT32UC3L032
  • Un UART déjà utilisé pour communiquer entre la carte et le PC
  • Couple d'E / S pour l'application
  • Deux LED d'état

PINS et config pertinents

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

Les outils utilisés

  • Windows XP
  • Atmel Studio 6.1
  • Programmeur AVRONE

Après plusieurs heures de recherche, j'ai trouvé la DFU Atmel Software Framework, fournie dans ASF 3.14.0.834. Cela semblait prometteur, j'ai pu l'installer sur ma carte à l'aide des outils fournis:

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

Au début, j'ai utilisé .binet .datfourni avec ASF, installé à l'aide du script. Maintenant, essayez de télécharger l'application en utilisant la commande batchisp:

batchisp.exe -device at32uc3l032 -hardware RS232 -port COM1 -baudrate 115200 -operation erase f memory flash blankcheck loadbuffer myapp.hex program verify

Mais toujours:

Device selection.................... PASS
Hardware selection.................. PASS
Opening port........................ PASS
Synchronzing target................. FAIL    Timeout error.

J'ai testé avec l'oscilloscope RX et TX de UART, les données vont embarquer mais le PC reçoit une onde carrée de 27 kHz (ne peut pas être des données de UART car il n'y a pas de bit d'arrêt ou quoi que ce soit, la fréquence n'est probablement pas la même pour 115200 bps).

Après plus de recherches, j'ai configuré Word1et Word2en fichier at32uc3l-uart-isp_cfg-1.0.1.datpour obtenir ces valeurs:

  • Word1: 0xE11E0024
  • Word2: 0x494F81AA

Pour utiliser la broche PA01comme option pour entrer dans le FAI.

En outre, a chargé la source de la DFU dans Atmel Studio 6.1 et a remarqué qu'ils n'utilisaient pas la même configuration de port série, donc changé pour la même chose que mon application. Ajout de quelques voyants à bascule à l'intérieur du principal de la DFU.

Après la mise à jour du chargeur de démarrage dans la carte, aucune LED ne change, même timeout, même onde carrée.

Suis-je en train de manquer quelque chose?


Alexandre Lavoie
la source
1
Posté comme ticket pour Atmel, va voir qui peut vraiment m'aider: D
Alexandre Lavoie
Quelles broches utilisez-vous (PAxx / PBxx). Je ne me souviens pas exactement, mais pour entrer dans le chargeur de démarrage, vous êtes censé tirer une broche haute ou basse (selon les deux mots de configuration). Pouvez-vous confirmer que vous appuyez sur un bouton ou similaire?
Tom L.
@TomL., En utilisant PA01 (ajouté en question). Essayé à la fois haut / bas ... même résultat. Même si cette broche est utilisée avec JTAG, cela ne devrait pas poser de problème.
Alexandre Lavoie
Et quelles broches utilisez-vous pour l'UART?
Tom L.
1
Hm ok, donc rien d'inhabituel ici. Pouvez-vous vérifier le code du trampoline et si l'application est correctement liée à l'adresse de démarrage flash (vous devriez le voir dans le fichier linker .map). Pouvez-vous publier vos arguments de l'éditeur de liens?
Tom L.

Réponses:

1

Essayez peut-être d'utiliser un programmeur AVR et l'IDE Arduino si cela est possible. Je sais que cela fonctionne bien avec les microcontrôleurs de la série AT.

violon électrique
la source
0

L'utilisation de JTAG sans code de trampoline approprié écrasera le BOOTLOADER expédié par l'ATMEL. Donc, après la première programmation avec JTAG, vous avez probablement effacé définitivement le BOOTLOADER.

De plus, les fusibles doivent être réglés pour permettre au chargeur de démarrage de fonctionner, ce que les paramètres par défaut du programmeur JTAG gâchent habituellement.

Afin de réparer cela, vous devez programmer le BOOTLOADER (provenant d'une puce non programmée) en puce par JTAG et régler les fusibles correctement.

J'ai arrêté d'utiliser JTAG il y a longtemps car BOOTLOADER + FLIP est beaucoup plus confortable et plus rapide. Assurez-vous que vous utilisez hex au lieu de bin / elf et que la condition BOOTLOADER est toujours vraie après la fin de la condition de réinitialisation.

Voici comment j'utilise FLIP sur 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

avr32-objcopyvient du dossier bin AVRStudio et Batchispest de FLIP. Il vous suffit de changer les noms de fichiers, l'ID de puce AVR et COM pour correspondre à votre projet.

Si vous en avez besoin, vous pouvez également utiliser 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

Le trampoline doit être activé dans l'éditeur de liens (propriétés du projet), voici à quoi ressemble ma configuration:

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

J'utilise toujours AVR32 Studio 2.7.0 car les nouvelles versions sont de la merde, donc la configuration peut être différente.

[Edit1] informations supplémentaires

pour UC3L0 l' AVR32_PIN_PA20est une RC horloge générique ( qui devrait être 32KHz mais il varie d' une puce à puce pas mal sans étalonnage avec prescalers) de la puce jusqu'à ce que son but est changé GPIO ou quoi que ce soit d' autre de sorte que le ~ horloge 27kHz n'a rien à voir avec USART . En fait, cette horloge est alimentée par 3,3 V et génère même si le noyau de la puce 1,98 V est frit pour de bon ...

La condition Bootloader est AVR32_PIN_PA11réglée sur zéro avant la réinitialisation (à moins que vous n'implémentiez vos propres conditions / commandes DFU dans votre micrologiciel) .Une possibilité consiste donc à faire un RC que vous dissipez à l'état BAS, et réinitialisé avant de le recharger ... ou utilisez une porte FLIP / FLOP ou un cavalier ...

Spektre
la source