Come migrare da Microchip a Freescale e Perchè
La competizione nel mercato dei semiconduttori è alta, ed uno dei settori più diversificati è il mercato dei microntrollori. Potrebbe non risultare complicato selezionare un amplificatore operazionale per la vostra applicazione nel caso dobbiate scegliere tra 5-6 modelli prodotti da 3-4 produttori. Quando però ci si sposta sui microcontrollori la scelta dei componenti risulta essere una delle parti più complesse del design. Esistono così tante periferiche, e così tanti core con caratteristiche differenti e così tanti requisiti di progetto che si basano sul microntrollore! Tutte queste cose determinano quale periferica verrà utilizzata.
Il compito di scegliere il miglior controllore per un'applicazione non è reso semplice dalla moltitudine di fornitori disponibili oggi sul mercato, anzi questo è l'inconveniente principale di avere molteplici opzioni (un inconveniente amato da noi ingegneri!). Le maggiori industrie in competizione nel settore dei microcontrollori sono Freescale, Microchip, Infineon, STMicroelectronics, Texas Instruments, Analog Devices e Maxim Integrated Products. La comparazione di tutti questi produttori viene di solito effettuata da divisioni specializzate all'interno delle compagnie stesse o all'interno delle compagnie produttrici. In questo articolo il nostro scopo sarà solo di dimostrare la superiorità delle soluzioni Freescale rispetto a quelle presentate da Microchip.

Breve storia delle due compagnie
Freescale Semiconductor nacque il 6 Ottobre del 2003, seguendo l'annuncio di Motorola circa lo smantellamento della sua divisione semiconduttori. La nuova compagnia si specializzò nella produzione di circuiti integrati per l'industria automobilistica, delle comunicazione ed embedded fino ad arrivare nella Top 20 dei Worldwide Semiconductor Sales Leaders.
Microchip apparse la prima volta nel 1987 come distaccamento della General Instrument, che decise di chiudere la sua divisione di componenti microelettronici. I prodotti Microchip includono microcontrollori, DSP, periferiche seriali EEPROM, periferiche seriali SRAM, periferiche KEELOQ, periferiche a radio frequenza (RF), termostati, periferiche analogiche e lineari per gestione e ricarica delle batterie ed anche interfacce e periferiche per segnali mixed. Non si trova nella Top 20 dei Worldwide Semiconductor Sales Leaders (per lo meno secondo i rapporti di analisi di iSupply).
Periferiche Disponibili
Le due compagnie coprono circa la stessa fetta di mercato attraverso la produzione dei loro microcontrollori e DSP per settori:
-
* Automobilistici;
* Elettrodomestici;
* Controllo dei motori;
* Meccatronica;
* Soluzioni mediche;
* Periferiche di alimentazione;
* Connettività cablata e Wireless.
La scelta di un prodotto rispetto ad un altro basandosi sulle capacità tecniche può risultare abbastanza difficile, poichè entrambe le compagnie producono componenti con le stesse caratteristiche.
Freescale però sembra essere favorita grazie alla diversità dei settori per cui produce componenti ed alle preferenze ricevute dai produttori OEM.
Prendiamo come esempio il settore automobilistico. Nelle applicazioni in cui la sicurezza risulta critica, Freescale offre soluzioni per unità di controllo degli Airbag, per TPMS e ESP. Microchip invece offre solo soluzioni TPMS. Freescale offre inoltre anche sistemi di comunicazione FlexRay per quanto riguarda le reti interne ai veicoli, una soluzione che non esiste nel portfolio di Microchip.
L'elettronica della struttura del veicolo utilizza un'ampia gamma di prodotti Freescale nei Body Control Modules, dai prodotti per l'accesso ed il controllo remoto, le soluzioni per la ventilazione ed il condizionamento dell'aria, l'illuminazione fino all'attivazione di portiere/finestrini. Microchip è in grado di fornire all'interno di questa lista solo l'automazione per i finestrini elettrici ed il lunotto sul tettuccio.
Il dominio delle soluzioni Freescale è ancora più evidente se si va a dare un'occhiata all'interno della lista dei fornitori certificati OEM. Generalmente, quando si progetta un prodotto automobilistico, il cliente (BMW, VW, PSA, Fiat, Toyota ecc.) ha parecchie pretese per quanto riguarda i dettagli del progetto. Ed uno dei dettagli che viene controllato nelle loro "liste approvate" è il microcontrollore principale sulla scheda madre che agisce come un microcontrollore "CAN". In generale, Freescale occupa il primo posto all'interno di queste liste, mentre in alcune di esse non è presente nessun prodotto Microchip.
Molti studenti si sono trovati in una posizione per cui dopo aver felicemente sperimentato l'utilizzo delle PIC all'università hanno dovuto abbandonare tutto per imparare ad utilizzare lo HC08, HCS08 o S12X perchè "il cliente voleva utilizzarlo". Devo ammettere che la presenza di microcontrollori Microchip è molto più evidente rispetto a quella delle soluzioni Freescale, ma questo non è l'ambiente in cui si trovano i soldi ed è più importante vedere chi si trova nelle liste OEM.
A questo punto, proveremo ad aiutare coloro che si trovano a dover migrare verso una nuova piattaforma per necessità, e lo faremo fornendo un confronto di base tra le periferiche, le istruzioni e gli strumenti di sviluppo.
Le seguente immagine è un estratto da una tabella compilata da EMCElettronica che indica le potenziali corrispondenze tra alcune PIC ed i microcontrollori Freescale, basandosi sulle caratteristiche tecniche. L'intera lista (purtroppo incompleta) è disponibile nella sezione Download (trovate il collegamento alla fine dell'articolo).
Ovviamente la lista non sarà mai perfetta. Ci sono così tante variabili in gioco quando si vuole selezionare un controller appropriato (I/O, tensioni di alimentazione, dimensione della PCB, consumi, dimensione della memoria, periferiche, ecc.) che questo tipo di lista non sarà mai nient'altro che un punto di partenza. Questo è il modo in cui dovrebbe essere considerata.
Comparazione dei set di istruzioni
Osservando la precedente lista, è possibile effettuare una serie di osservazioni: i microcontrollori PIC a 8bit generalmente posseggono un componente equivalente nella sottofamiglia di periferiche Freescale HC908. Ha senso quindi avere una visione comparativa dei set di istruzioni solamente di queste due famiglie.
Anche se la maggior parte delle applicazioni viene scritta in C, il set di istruzioni assembly risulta sempre un buon indicatore riguardo alle operazioni che un microcontrollore può svolgere e a come si comporterà in specifiche circostanze.
Dal momento che esiste un numero abbastanza significativo di istruzioni di cui è necessario tenere conto, non risulta pratico discutere riguardo ad ognuna di esse.
Infatti preferisco sottolineare le istruzioni che non posseggono una versione equivalente in una delle due famiglie di componenti, oppure indicare quelle che potrebbero essere rimpiazzate da gruppi di istruzioni dell'altra famiglia (che posso essere quindi raggruppate in macro).
Operazioni dei registri orientate ai byte
La maggior parte di queste istruzioni possiede equivalenti nella produzione di Freescale per entrambi HC908 e PIC microcontrollori. Le addizioni/sottrazioni di registro dai/agli accumulatori, il complemento al registro, il suo incremento o decremento, la rotazione a destra o sinistra attraverso l'uso del registro carry ecc. sono operazioni che possono essere eseguite utilizzando istruzioni a 2 byte, poichè queste sono le istruzioni eseguite dalla maggior parte dei microcontrollori disponibili. Però ci sono due istruzioni di incremento/decremento disponibili per le PIC che non trovano corrispondenza nella famiglia HC908:
Increment f, Skip if 0 INCFSZ Decrement f, Skip if 0 DECFSZ
Operazioni dei registri orientate ai bit
BCF, BSF, BTFSC, BTFSS posseggono tutte dei corrispettivi nella famiglia di microcontrollori HC908 (nello stesso ordine: BCLR, BSET, BRCLR, BRSET). Esiste solo una istruzione del PIC senza equivalente: BTG (cambia un bit in un registro).
Operazioni letterali e di controllo
Questa categoria è più numerosa ed esistono svariate istruzioni che non posseggono una corrispondenza tra le due famiglie. Come è stato dimostrato precedentemente, la famiglia HC908 risulta chiaramente avvantaggiata rispetto all'altra, avendo poche istruzioni di controllo che trovano corrispettivi nella famiglia PIC solo in gruppi o macro di istruzioni. D'altro canto, solo due istruzioni della famiglia PIC non posseggono una corrispondenza. Queste sono CLRWDT (azzera il timer watchdog) e RETLW (return with literal nell'accumulatore).
Il numero di istruzioni HC908 che non trovano un equivalente nella famiglia PIC è abbastanza alto, ed il modo migliore di elencarle è una tabella, che può anche dare informazioni riguardo ai frammenti di codice che produrrebbero lo stesso risultato utilizzando i prodotti Microchip.
| Add with Carry | ADC | BTFS STATUS, INCF M,F ADDWF M,F |
| Arithmetic Shift Left | ASL | BCF STATUS, RLF M,F |
| Arithmetic Shif Right | ASR | BCF STATUS, BTFSC M,7 BSF STATUS,C RRF M,F |
| Branch if Carry Bit Clear | BCC | BTFSS STATUS, GOTO addr |
| Branch if Carry Bit Set | BCS | BTFSC STATUS, GOTO addr |
| Branch if Equal | BEQ | BTFSC STATUS,Z GOTO addr |
| Branch if Greater than | BGT | BTFSS STATUS,N BNOV rel BTFSS STATUS,OV BNN rel |
| Branch if Half Carry Bit Clear | BHCC | BTFSC STATUS,DC GOTO addr |
| Branch if Half Carry Bit Set | BHCS | BTFSC STATUS,DC GOTO addr |
| Branch if Higher | BHI | BTFSC STATUS,C GOTO addr BTFSC STAUTS,Z GOTO addr |
| Branch if Higher or Same | BHS | BTFSS STATUS,C GOTO addr |
| Branch if IRQ High | BHI | BTFSC PORTx, <pin> GOTO addr |
| Branch if IRQ Low | BIL | BTFSS PORTx,<pin> GOTO addr |
| Bit Test | BIT | MOVLW <mask> ANDWF M,W |
| Branch if Lower | BLO | BTFSC STATUS,C GOTO addr |
| Branch if Lower or Same | BLS | BTFSC STATUS,C GOTO addr BTFSC STATUS,Z GOTO addr |
| Branch if IRQ Mask Clear | BMC | BTFSS INTCON, GIE GOTO addr |
| Branch if Minus | BMI | BTFSC M,7 GOTO addr |
| Branch if IRQ Mask Set | BMS | BTFSC INTCON,GIE GOTO addr |
| Branch if Not Equal | BNE | BTFSS STATUS,Z GOTO addr |
| Branch if Plus | BPL | BTFSS M,7 GOTO addr |
| Branch if BIT n in Memory Clear |
BRCLR n | BTFSS M,n GOTO addr |
| Branch if Bit n in Menory Set | BRSET n | BTFSC M,n GOTO addr |
| Compare and Branch if Equal | CBEQ | SUBWF M,W BTFSC STATUS,Z GOTO addr |
| Compare Index Register with Memory |
CPX | MOVF M,W SUBWF FSR,W |
| Decimal Adjust Accumulator | DAA | ADDLW 0x06 BTFSS STATUS,DC GOTO $+3 ADDLW 0x10 GOTO $+2 ADDLW 0xFA GOTO $+2 ADDLW 0xFA ADDLW 0x60 BTFSS STATUS,DC ADDLW 0xA0 |
| Decrement and Branch if Not Zero | DBNZ | DECF M,F BTFFSS STATUS,Z GOTO addr |
| Divide | DIV | No corresponding instruction/macro |
| Load index Register From Memory | LDX | MOVF M,W Memory MOVWF FSR |
| Logical Shift Left | LSL | BCF STATUS,C RLF M,F |
| Logical Shift Right | LSR | BCF STATUS,C RRF M,F |
| Move | MOV | MOVF M,W MOVWF N |
| Multiply | MUL | MULWF (not on all) |
| Store Index Register | STHX | MOV FSR, W MOVWF M |
| Store Index Register Low in Memory |
STX | MOVF FSR,W MOVWF M |
| Test for Negative or Zero | TST | MOVLW O SUBWF M,W |
| Add Immediate Value to Stack Point | AIS | No corresponding instruction/macro |
| Branch if Greater Than or Equal | BGE | No corresponding instruction/macro |
| Branch if Greater Than | BGT | No corresponding instruction/macro |
| Branch if Less than or Equal to | BLE | No corresponding instruction/macro |
| Branch if Less than | BLT | No corresponding instruction/macro |
| Compare index Register with memory | CPHX | No corresponding instruction/macro |
| Load Index Register From Memory | LDHX | No corresponding instruction/macro |
| Push Accumulator onto Stack | PSHA | No corresponding instruction/macro |
| Push Index Register High onto Stack | PSHH | No corresponding instruction/macro |
| Push Index Register Low onto Stack | PSHX | No corresponding instruction/macro |
| Pull Accumulator from Stack | PULA | No corresponding instruction/macro |
| Pull Index Register High from Stack | PULH | No corresponding instruction/macro |
| Pull Index Register Low from Stack | PULX | No corresponding instruction/macro |
| Reset Stack Pointer | RSP | No corresponding instruction/macro |
| Transfer Stack Pointer to Index Register | TSX | No corresponding instruction/macro |
| Transfer Index Register to Stack Pointer | TXS | No corresponding instruction/macro |
Come probabilmente si può notare, i microcontrollori di Freescale hanno a disposizione un numero maggiore di istruzioni. La maggior parte di queste istruzioni sono istruzioni che riguardano le operazioni di controllo/branching e di stack. Queste istruzioni permettono ai compilatori C di generare del codice più efficiente minimizzando inoltre la quantità di memoria necessaria per un'applicazione.
Inoltre rendono le cose più semplici per i programmatori assembly, che hanno a disposizione più opzioni durante l'elaborazione del codice.
Infine un paio di istruzioni aggiuntive per operazioni sugli stack permettono un salvataggio dei dati in caso di interrupt più semplice per la familgia Freescale rispetto alla PIC.
Comparazione degli strumenti di sviluppo software
Descriverò brevemente i due pacchetti IDE distribuiti dalle due compagnie.
Microchip utilizza il conosciuto MPLAB IDE. Questa soluzione ha il vantaggio di essere gratuita, ed include un ambiente di sviluppo, un simulatore e capacità di debugging. Purtroppo è disponibile solo per Windows. MPLAB Integrated Development Environment
L'ambiente in se è gratuito, ma diversa à la situazione per quanto riguarda il compilatore C. Può in ogni caso essere utilizzato per compilare piccoli progetti assembly oppure è possibile scaricare la versione studente del compilatore C di Microchip (utilizzabile per 30 giorni). Sono disponibili compilatori prodotti anche da terze parti che possono essere integrati con MPLAB.
Il simulatore di MPLAB è abbastanza buono, e qualche tempo fa Microchip rese disponibile anche l'accesso ad alcuni tipi di codice VHDL che permettevano all'utente di descrivere dettagliatamente le interazioni coi registri e i pin di I/O. Non esisteva supporto a questa funzione nella documentazione, e il suo utilizzo era particolarmente limitato.
Lo strumento corrispondente di Freescale è CodeWarrior.
Questo ambiente di sviluppo è disponibile per diversi sistemi operativi (Mac, Windows, Linux, Solaris) e questo è già un grosso vantaggio rispetto a Microchip.
CodeWarrior non è gratuito, anche se esistono alcune versioni gratuite sul sito di Freescale che permettono la compilazione di una quantità limitata di codice.
Il limite è abbastanza alto e molte compagnie utilizzano queste versioni per lo sviluppo, e non solo come versioni dimostrative. Per quanto riguarda le caratteristiche i due IDE sono abbastanza simili. Anche CodeWarrior possiede un simulatore e permette la completa integrazione di soluzioni di debugging.
La modalità con cui è possibile visualizzare i registri sembra leggermente migliore nel tool di Freescale poichè essi possono essere mappati per diversi oggetti come display LED, o display a 7 segmenti ecc.
Un'altro articolo/tutorial di EMCElettronica in grado di fornire una descrizione dettagliata dell'utilizzo dell'ambiente di sviluppo e del simulatore di CodeWarrior può essere trovato nella sezione: Iniziare con CodeWarrior IDE della Freescale
Conclusioni
Anche se sembrano essere equivalenti in vari aspetti dei microntrollori, le soluzioni Freescale risultano essere migliori in alcuni campi, e questa potrebe essere una motivazione più che valida per cui molti sviluppatori per PIC stanno migrando verso Freescale. Esistono alcune periferiche disponibili nel portfolio Microchip che non trovano eguali in termini di footprint nella produzione Freescale, ma esiste anche un array abbastanza stupefacente di prodotti finali in cui le soluzioni Freescale sembrano dominare. La maggior parte delle PIC a 8 bit posseggono una versione corrispondente nelle periferiche Freescale, e questo vale anche per le periferiche del range dsPIC.
La lista completa di EMCelettronica che illustra le corrispondenze tra molti microntrollori delle due compagnie è disponibile nella sezione download (Microchip_Freescale_EMCElettronica list.xls), accessibile dopo avere effettuato la registrazione al sito.
RICHIESTA DI CONTATTO
Se desideri maggiori informazioni su questo prodotto Freescale, invia una richiesta ad Arrow utilizzando il seguente modulo.
- blog di danielepelosi
- 850 letture







Programmazione dei freescale
Una domanda.
I PIC della microchip sono facilmente programmabili tutti con lo stesso HW e SW, non mi pare sia così per i freescale (almeno da una rapida ricerca che ho effettuato).
Quali sono gli strumenti HW e SW utilizzabili per programmare la FLASH dei chip HC08, HCS08 o S12X?
Grazie.
Programmatori o Debugger?
Prima di tutto bisogna fare una distinzione, tra programmatori e debugger, poi bisogna valutare la "profondità" del debugger da effettuare, ad esempio se per il progetto abbiamo bisogno di un emulatore completo oppure un semplice debugger.
Deciso questo, bisogna anche considerare se convenga acquistare una demo board per poter sviluppare il progetto.
Comunque su Microchip hai ragione, con l'ICD2 (ora ICD3) si possono debuggare tutti i micro (anche la serie 12, con un adattatore).
Per Freescale bisogna identificare la famiglia, quindi, il programmatore/emulatore, essendo piu specifico, spesso consente di avere maggiori opzioni di emulazione.
La risposta alla tua domanda è
M68CYCLONEPROE
Se ti serve domattina, lo trovi qui da Farnell
http://it.farnell.com/freescale-semiconductor/m68cycloneproe/programmer-in-cct-for-hc-s-08-hcs12/dp/1579766
Se devi sviluppare un progetto ed hai necessità di supporto, allora compila il modulo di contatto
http://it.emcelettronica.com/contact/freescale
Invia nuovo commento