Ma chaîne de développement est sous Linux (Ubuntu 16.04 LTS), sur laquelle j'ai pk2cmd qui fonctionne ainsi que l'environnement MPLAB X IDE et le compilateur XC8. Tous çà à jour car téléchargé et installé aujourd'hui même
Le PIC est un PIC18F4550 avec à son bord un bootloader USB (donc celui compilé avec C18). J'ai sur ma machine l'utilitaire hid_bootloader qui semble fonctionner correctement (si je reprogramme un hex compilé jadis, le programme fonctionne)
J'ai donc créer un petit programme de test pour vérifier le bon fonctionnement de ma chaine de programmation.
J'ai le fichier C suivant (qui se compile sans problème) :
Code : Tout sélectionner
#pragma config PLLDIV = 5 // (20 MHz crystal)
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config BORV = 2
#pragma config VREGEN = ON //USB Voltage Regulator
#pragma config WDT = OFF
#pragma config WDTPS = 2048
#pragma config MCLRE = ON
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF //NOTE: modifying this value here won't have an effect
//on the application. See the top of the main() function.
//By default the RB4 I/O pin is used to detect if the
//firmware should enter the bootloader or the main application
//firmware after a reset. In order to do this, it needs to
//configure RB4 as a digital input, thereby changing it from
//the reset value according to this configuration bit.
#pragma config CCP2MX = ON
#pragma config STVREN = ON
#pragma config LVP = OFF
#pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming
#pragma config XINST = OFF // Extended Instruction Set
// Write Protection config bits
#pragma config CP0 = OFF // Code Protect disabled
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF // Boot block is not code protected
#pragma config CPD = OFF // Data EEPROM is not code protected
#pragma config WRT0 = OFF // Write Protect disabled
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF // Boot Block not protected
#pragma config WRTC = OFF // Config registers not protected
#pragma config WRTD = OFF // Data EEPROM is not write protected
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
#define _XTAL_FREQ 20000000
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <p18f4550.h>
void delay100ms(unsigned int x)
{
while(x--)
{
__delay_ms(25);
__delay_ms(25);
__delay_ms(25);
__delay_ms(25);
}
}
int main(int argc, char** argv) {
TRISB=1; // PortB en entrée
TRISC6=0; // RC6 (LED1) en sortie
TRISC7=0; // RC7 (LED2) en sortie
TRISD=0; // Port D en sortie
ADCON1|=0x0F; // Mets toutes les pins en digital
while(1)
{
delay100ms(10);
RC6=1;
delay100ms(10);
RC6=0;
}
return (EXIT_SUCCESS);
}
Dans les options du linker, j'ai spécifié un codeoffset de 0x1000 !
Quand je le charge dans le PIC (via le bootloader USB), après reset, la LED ne clignote pas ! Mais le bootloader n'est pas effacé.
J'ai essayé de charger le hex dans le PIC avec pk2cmd (et cette fois-ci sans code offset) et là pareil, pas de signe de vie.
Je court-circuite une étape mais je vois pas laquelle
Merci pour votre aide
PS : Avant je codais avec le compilateur C18, mais çà c'était avant.


