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é .bin
et .dat
fourni 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é Word1
et Word2
en fichier at32uc3l-uart-isp_cfg-1.0.1.dat
pour obtenir ces valeurs:
- Word1: 0xE11E0024
- Word2: 0x494F81AA
Pour utiliser la broche PA01
comme 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?
la source
Réponses:
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.
la source
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:
Où
avr32-objcopy
vient du dossier bin AVRStudio etBatchisp
est 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:
Le trampoline doit être activé dans l'éditeur de liens (propriétés du projet), voici à quoi ressemble ma configuration:
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_PA20
est 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_PA11
ré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 ...la source