ICD2 vs ICD-U: scontro tra debuggers

ICD2 Microchip programmatore

In commercio esistono molti strumenti di sviluppo dedicati ai microcontrollori PIC, tutti apparentemente simili ma talvolta profondamente diversi l’uno dall’altro. Questo mese parleremo di In-Circuit Debuggers confrontando l’MPLAB® ICD2 di Microchip con l’ICD-U40 di CCS in termini di usabilità e prestazioni.

In-Circuit Debugger: come funziona

Una delle tecniche per lo sviluppo di progetti impieganti microcontrollori, è quella di utilizzare sistemi di emulazione (ICE – In-Circuit  Emulator) per la messa a punto del firmware che verrà successivamente scritto  nella  memoria interna del microcontrollore mediante l’uso di un programmatore. Questa tecnica richiede, ovviamente, l’uso di strumenti specifici (gli emulatori, appunto) il cui costo spesso risulta essere troppo elevato in rapporto all’applicazione da sviluppare. Come è noto, molti dei microcontrollori PIC supportano la tecnologia ICD (In-Circuit  Debugger) che viene implementata nel micro a livello di silicio e fornisce una alternativa a basso costo all’emulazione vera e propria. I vantaggi offerti dalla tecnologia ICD sono senza dubbio rilevanti:

  • Basso costo;
  • Minimo hardware aggiuntivo;
  • Consente il debug/programmazione  direttamente in fase di produzione;
  • Non sono necessari particolari zoccoli o adattatori.

Come ogni medaglia ha il suo rovescio, anche l’In-Circuit Debbugging ha i suoi aspetti negativi:

  • L’utilizzo di risorse interne quali I/O, memoria dati e stack fa sì che alcune parti dell’applicazione non possano essere coinvolte nel debug;
  • Le operazioni di triggering  e breakpointing  sono limitate  alle caratteristiche interne della logica di debug integrata nel micro;
  • Il micro sotto test deve essere alimentato ed avere un clock valido per consentire l’operazione di debug.

Il PIC16F877 è stato uno  dei primi  micro  di Microchip ad implementare l’ICD e la zona su silicio adibita a questa funzione è assai ridotta rispetto a quella interessata dalle altre periferiche presenti nel micro. Il cuore dell’ICD è il registro breakpoint address in cui viene caricato l’indirizzo al quale si vuole interrompere l’esecuzione del programma per esaminare i registri: quando il valore del program counter corrisponde all’indirizzo impostato nel Breakpoint address register, il micro salva nello stack il contenuto  del program counter (come avviene normalmente per le interruzioni) e salta successivamente all’indirizzo 0x1F00 in corrispondenza del quale ha inizio il codice speciale di debug. Il codice di debug inizia salvando il registro status in modo da “congelare” lo stato del micro al momento  dell’interruzione. Una volta salvato lo stato, questa parte di codice utilizza RB6 ed RB7 per gestire lo scambio dati da e verso il micro.
La scelta di RB6 ed RB7 da parte di Microchip  è palesemente dettata dal fatto che questi sono gli stessi terminali coinvolti nella fase di programmazione del dispositivo. Per predisporre un firmware all’ICD è consigliato utilizzare una istruzione vuota (NOP) come prima istruzione del programma: in questo modo il programma viene interrotto subito dopo la prima istruzione che, essendo una NOP,  garantisce che tutti  i registri siano in uno stato consistente e definito dal power-on reset.

Figura 1. Microchip MPLAB® ICD2

Figura 1.  Microchip MPLAB® ICD2

I protagonisti: Microchip MPLAB® ICD2 e CCS ICD-U40

MPLAB® ICD2

È un In-Circuit Serial Programmer™ ed In-Circuit Debugger a basso costo ed è un prodotto ufficiale Microchip. Si connette alla scheda target contenente il micro, mediante un connettore RJ a 6 poli su cui sono presenti i segnali PGD, PGC, Vss, Vdd e Vpp/MCLR. Per la comunicazione con il PC usa invece una classica connessione USB.  Per connettere l’ICD2 alla target board è necessario osservare alcune semplici regole hardware. In particolare dovrà essere prevista una resistenza di pull-up tra /MCLR e Vdd (tipicamente da 10Ko) in modo da non creare ambiguità sul livello di tale linea al reset del micro. Assolutamente da evitare sono invece resistenze di pull-up, capacità verso massa e diodi  in serie alle linee PGC e PGD e capacità sulla linea Vpp. La figura 2 mostra la corretta connessione tra ICD2 e la scheda target.

Figura 2. Connessione corretta tra ICD2 e scheda target

Figura 2.  Connessione corretta tra ICD2 e scheda target

Figura 3. L’ICD-U40 di Custom Computer ServicesINCget

Figura 3. L’ICD-U40 di Custom Computer ServicesINCget

Come già accennato in precedenza, la funzionalità In-Circuit Debugger occupa alcune risorse del micro. In generale vengono impegnate:

  • La linea Vpp (in fase di programmazione);
  • La linea /MCLR (ad esclusione dei micro con estensione -ICD)
  • GP0 e GP1 (o RB6 ed RB7) utilizzati sia per la programmazione che per il debugging;
  • Un livello dello stack.

A seconda del tipo  di micro  sul quale si sta eseguendo il debug, vengono poi impegnate anche alcune risorse interne ovvero alcuni registri della memoria dati ed alcune locazioni nella memoria programma. Le tabelle riportate alla fine dell’articolo mostrano le risorse utilizzate per le varie famiglie di PIC. Si noti che per alcuni tipi di PIC il debug è possibile solo utilizzando apposite versioni del micro, contraddistinte appunto dal suffisso –ICD. Si noti inoltre, dalle stesse tabelle, come l’impiego  di risorse sia minimo per i dsPIC della famiglia 30F. ICD2 viene pilotato dal PC attraverso l’ambiente IDE di MPLAB® con il quale si integra perfettamente.

Custom Computer ServicesINC (CCS) ICD-U40

ICD-U40 è anch’esso un In-Circuit Debugger per PIC prodotto da CCS. Lato PC la connessione è USB, mentre per la connessione con la target board viene utilizzato un connettore a 6 poli di tipo RJ a cui fanno capo i segnali Vpp/MCLR, PGD, PGC, Vss, Vdd e, a differenza di MPLAB®  ICD2, il segnale RB3 che viene utilizzato per la fase di debug con i compilatori CCS. Le risorse impiegate sul PIC sono le stesse viste per ICD2 e riportate nelle tabelle a fine articolo. La gestione del  dispositivo può essere fatta in due modi: mediante il software standalone CCSICD oppure mediante l’ambiente IDE di qualsiasi compilatore CCS. Nel primo caso è possibile testare sia il programmatore che la scheda target ed è possibile usare l’ICD-U40 solo come ICSP™ (In-Circuit Serial Programmer™), nonché aggiornare il firmware del programmatore stesso. Attraverso l’ambiente di un qualsiasi compilatore CCS, è invece possibile sfruttare anche la funzionalità di debugger. La figura 4 mostra l’interfaccia del software stand-alone e una fase del debugging attraverso l’IDE del compilatore CCS PCWH. Anche per l’ICD-U40, nella connessione con la target board, valgono le stesse regole hardware viste per MPLAB® ICD2 e lo schema dei collegamenti è riportato in figura 5.

Figura 4. La gestione dell’ICD-U40 con il software stand-alone e mediante l’IDE del PCWH

Figura 4. La gestione dell’ICD-U40 con il software stand-alone e mediante l’IDE del PCWH

Figura 5. I collegamenti tra ICD-U40 e la target board

Figura 5. I collegamenti tra ICD-U40 e la target board

La comparazione

La tabella comparativa tra i due dispositivi è riportata in figura 6.

MPLAB® ICD2 CCS ICD-U40
Alimentazione 9.0V/750mA o via USB via USB
Interfaccia USB SI SI
Interfaccia RS232 SI NO
Firmware aggiornabile SI SI
Supportato da MPLAB® SI NO
Risultato test su PIC16F877A 1.36sec 0.24sec
Figura 6.  Dati tecnici di ICD2 e ICD-U40

Tra i parametri di comparazione, oltre alle interfacce disponibili e le modalità di alimentazione, viene riportato  il risultato di un test effettuato sui due debuggers. Il test consiste nella rilevazione del tempo di esecuzione di un comando in single-step utilizzando un PC con processore a 2.4GHz e prevede che il software di gestione del dispositivo sia impostato per leggere l’intera memoria ad ogni step. Per  single-step si intende l’intervallo di tempo impiegato dal program counter per incrementare di 1 il suo contenuto.  Il test è stato eseguito su un PIC16F877A, utilizzando MPLAB® (v.6.10) per pilotare l’ICD2 ed il compilatore  PCW (v.3.132)  per il pilotaggio dell’ICD-U40. Entrambi i debuggers sono stati connessi al PC via USB. Per completezza si riporta una tabella dei dispositivi supportati dai due debuggers. Ovviamente questo elenco è in continua espansione, si rimanda quindi ai siti dei produttori  per ottenere l’elenco aggiornato allo stato dell’arte.

Per entrambi  i dispositivi è prevista la possibilità di aggiornamento firmware il che permette di mantenere sempre aggiornato il proprio ICD in funzione dei nuovi PIC rilasciati da Microchip. Le versioni firmware vengono rilasciate periodicamente dai relativi produttori.

39

40

41

42

43

44

Leggi anche:

Recensione ICD2 full version

MPLAB IDE: Introduzione agli strumenti di sviluppo Microchip

Debugger/Programmer MPLAB ICD 2 [recensione]

4 Comments

  1. Maurizio Maurizio 23 novembre 2015
    • Emanuele Emanuele 23 novembre 2015
  2. maurizio.f1969@yahoo.it 16 dicembre 2015
    • Emanuele Emanuele 17 dicembre 2015

Leave a Reply