Articles Tagués ‘CCS’

Bonjour à tous,

Alors en ce moment je joue pas mal avec mon Stellaris Launchpad et je vous propose aujourd’hui une méthode pour se passer du programmateur. L’intérêt ? Et bien on peut imaginer des montages avec un ARM en standalone sans avoir besoin d’y intégrer un programmateur. Au passage, Texas Instrument propose directement des bootloaders pour flasher via USB, Série, SPI et même i2c. Sur les Tiva C série 129 il y en a même équipés de l’ethernet et on peut flasher par ce biais. La doc de TI sur le sujet 

Ce billet va traiter d’une autre méthode, même si elle utilise l’USB. Au hasard du net j’ai trouvé le boulot d’un type  et j’ai décidé de tester et d’adapter la méthode pour Energia.

Par ailleurs, n’ayant qu’un Stellaris Launchpad sous la main, mon tuto a été réalisé sur cette carte mais normalement ça marche aussi pour les Tiva C Launchpad, moyennant peut-être juste quelques adaptations. Enfin il se destine pour les mêmes raisons aux Windows-iens 😉

1ère étape

Dans le github de l’auteur, dossier prebuilt, récupérer boot_msc_usb.bin

Si vous ne l’avez pas, récupérez LMFlashProgrammer ici. C’est un outil de programmation très simple mais très efficace fourni par TI pour ses ARM. Au passage si vous jouez avec les différents types de bootloader, ce programme permet d’uploader un programme par n’importe quelle voie, même l’ethernet !

On va maintenant flasher le Launchpad avec le booloader. Branchez votre Launchpad par l’USB Debug et lancer  LMFlashProgrammer :

Dans « quick set », selectionnez « LM4F120 Launchpad » si vous avez un Stellaris LaunchPad et « TM4C123G Launchpad » si vous avez un Tiva C launchpad, puis dans l’onglet « Program » allez chercher le fichier boot_msc_usb.bin préalablement téléchargé. Si vous n’avez touché à rien d’autre alors tout est bien configuré.

Cliquer sur Program, et voila 😉

2ème étape

Vérification : brancher votre launchpad via USB Device cette fois et n’oubliez pas de basculer l’interrupteur de sélection d’alim sur Device. Presser le bouton SW2 et tout en le maintenant enfoncé appuyez puis relâchez le bouton reset. Normalement la led rouge se met à clignoter, signe que le bootloader s’est lancé et votre launchpad apparaît sur votre PC comme une clé USB.

3ème étape

« Ah bin t’es marrant toi je mets quoi dessus maintenant ? »

J’y viens j’y viens …

Il faut copier votre program au format .bin. En réalité, quelque soit votre environnement de développement (Energia, CCS, IAR …) votre programme est toujours transformé en fichier binaire, compréhensible par le µC (peut-être que vous avez déjà croisé des histoires de .bin et des .hex). C’est fruit d’une série d’étapes dont on a pas toujours connaissance. Exemple sur Arduino, on clique sur upload et hop « comme par magie » il se retrouve sur la carte. Vous vous doutez bien que c’est pas aussi simple que ça derrière le rideau …

Bref, après une modification mineure, on va pouvoir récupérer le .bin de votre programme codé sous Energia, pour le copier sur le Launchpad comme si on copiait une musique sur son lecteur mp3.

Donc aller dans votre dossier Energia\hardware\lm4f\cores\lm4f et ouvrer dans notepad ou notepad++ le fichier lm4fcpp.ld

Il faut modifier la partie concernée du fichier comme suit :

MEMORY
{
// flash (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 // ligne d’origine
flash (rx) : ORIGIN = 0x00004000, LENGTH = 0x0003c000 // ligne pour upload via USB Storage mass
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000
}

Le bootloader étant installé sur la flash il faut « décaler » la plage de programmation allouée au programme, sans ça il ne démarrera jamais. Attention : si vous essayer de repasser par le port debug pour uploader votre programme via Energia, ça ne marchera plus, il faut remettre la ligne d’origine, c’est pour ça que je commente/décommente les lignes concernées dans ce fichier, au moins pour passer d’une méthode à l’autre j’ai juste à faire ça. Par ailleurs, écrire un programme avec la configuration d’origine va effacer le bootloader et il faudra recommencer depuis l’étape précédente.

Maintenant sur Energia, ouvrez votre programme, cliquer sur Vérifier pour lancer la programmation. Dans l’espace en bas apparaît une série de lignes. Regardez à la fin, il apparaît un certain fichier …

energia bin

Et oui c’est notre .bin ! Récupérer le et copier le sur votre Launchpad. Appuyer sur Reset et normalement il se lancera 😉

Par ailleurs je ne l’ai pas précisé mais ce .bin est tout à fait uploadable via LM Flash Programmer avec le Launchpad branché sur la prise USB Debug (ou par les autres voies citées en intro si vous avez mis un autre bootloader), à condition cette fois d’utiliser la config d’origine du fichier lm4fcpp.ld

Optimisations

Alors j’avoue que pour l’instant mes connaissances sur tout ce qui touche à la compilation, au linker, au makefile … est très limitée. Il y aurait surement une méthode plus simple pour spécifier à la compilation qu’on veut le .bin, donc modifier le fichier .ld automatiquement et mettre le .bin sur le bureau par exemple.

Sur CCS

Sur CCS la méthode est quasiment la même, il suffit de modifier le fichier nom_de_votre_projet.cmd  comme ceci :

//#define APP_BASE 0x00000000 // originale
#define APP_BASE 0x00004000
#define RAM_BASE 0x20000000

/* System memory map */

MEMORY
{
/* Application stored in and executes from internal flash */
//FLASH (RX) : origin = APP_BASE, length = 0x00040000  // originale
FLASH (RX) : origin = APP_BASE, length = 0x0003c000
/* Application uses internal RAM for data */
SRAM (RWX) : origin = 0x20000000, length = 0x00008000
}

/* Section allocation in memory */

SECTIONS
{
.intvecs: > APP_BASE
.text : > FLASH
.const : > FLASH
.cinit : > FLASH
.pinit : > FLASH
.init_array : > FLASH

.vtable : > RAM_BASE
.data : > SRAM
.bss : > SRAM
.sysmem : > SRAM
.stack : > SRAM
}

__STACK_TOP = __stack + 1024;

Faites ensuite clique droit sur votre projet > properties puis dans  la colonne de gauche « Build » puis onglet « Steps » et enfin au champs « Command » dans Post-Build steps  ajoutez ces lignes :

« ${CCS_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat » « ${BuildArtifactFileName} » « ${BuildArtifactFileBaseName}.bin » « ${CG_TOOL_ROOT}/bin/armofd.exe » « ${CG_TOOL_ROOT}/bin/armhex.exe » « ${CCS_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe »

Lancez le build et dans votre dossier de projet se trouvera le .bin 😉

Si vous avez des questions n’hésitez pas les commentaires sont la pour ça 😉

Publicités