Uso molti microcontrollori e microprocessori da molti, molti anni ormai, ma mi sembra di essere ostacolato dalla serie Kinetis KE (in particolare S9KEAZN64AMLC).
17 gennaio 2015 TL; DR:
Freescale conferma che la versione 2.0 del software Kinetis Design Studio non funziona con questo dispositivo (inclusa la propria scheda di valutazione TRK-KEA64). Per il momento raccomandano di usare CodeWarrior MCU V10.6.
Segger ha rilasciato la v4.96a (la "a" è importante, stavo usando la v4.96) che risolve il problema e consente di utilizzare una scheda di debuger CortexM J-Link Lite Segger con KDS e dispone di funzionalità complete di programma / debug.
Prima che Segger rilasciasse la v4.96a, sono riuscito a far lampeggiare il chip riprogrammando il debugger OpenSDA sulla scheda di valutazione FRDM-KL25Z economica ($ 15) di Freescale riflettendo il firmware OpenSDA fornito con USBDM (usando v4.10.6.240). Ho quindi utilizzato il software standalone "ARM Programmer" di USBDM. Non ho trascorso molto tempo a cercare di far funzionare il debug, poiché sono abbastanza abile nel debug "oldschool" per non averne bisogno. Assicurati di eseguire il flashing di un programma "benigno" nel target di bordo KL25 o potrebbe interferire con la programmazione poiché la linea di reset del target di bordo KL25 è ancora collegata al debugger OpenSDA anche con taglio J11 (vedi il post sul blog di Keith Wakeham , collegato di seguito).
Un grande ringraziamento a Erich Styger per avermi aiutato molto gentilmente a determinare il problema e confermare le mie scoperte tramite e-mail.
Ora torniamo alla nostra domanda regolarmente programmata:
Ho creato una stupenda scheda breakout 3.3V. Ha alcuni LED su PTA, una connessione UART su PTC e le linee SWD sono sulle loro linee dedicate. Non c'è letteralmente niente di stravagante o divertente in questa tavola.
Sto usando un J-Link Lite per Cortex-M (J-Link LITE CortexM-9, vedi https://www.segger.com/jlink-lite-cortexm.html ) e sotto OSX e Windows ottengo il stesso risultato: l'utilità J-Link Commander può identificare il chip, posso leggere e scrivere su SRAM e giocare con le periferiche con letture e scritture manuali all'indirizzo I / O mappato in memoria corretto. Quando provo a far lampeggiare il dispositivo, tuttavia, non riesce.
$ JLinkExe
SEGGER J-Link Commander V4.94c ('?' for help)
Compiled Oct 31 2014 20:08:55
DLL version V4.94c, compiled Oct 31 2014 20:08:48
Firmware: J-Link Lite-Cortex-M V8 compiled Jul 17 2014 11:40:12
Hardware: V8.00
S/N: 518107921
Feature(s): GDB
VTarget = 3.332V
Info: Could not measure total IR len. TDO is constant high.
Info: Could not measure total IR len. TDO is constant high.
No devices found on JTAG chain. Trying to find device on SWD.
Info: Found SWD-DP with ID 0x0BC11477
Info: Found Cortex-M0 r0p0, Little endian.
Info: FPUnit: 2 code (BP) slots and 0 literal slots
Cortex-M0 identified.
Target interface speed: 100 kHz
J-Link>device skeazn64xxx2
Info: Device "SKEAZN64XXX2" selected (64 KB flash, 4 KB RAM).
Reconnecting to target...
Info: Found SWD-DP with ID 0x0BC11477
Info: Found SWD-DP with ID 0x0BC11477
Info: Found Cortex-M0 r0p0, Little endian.
Info: FPUnit: 2 code (BP) slots and 0 literal slots
J-Link>r
Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.
J-Link>erase
Erasing device (SKEAZN64xxx2)...
(...several second pause while it communicates with the MCU...)
****** Error: PC of target system has unexpected value after erasing sector. (PC = 0xFFFFFFFE)!
---------------------------------------------------------------------- Registers -------------------------------------------------------------------------------------
PC = FFFFFFFE
Current: R0 = 00F3E3BE, R1 = 00000001, R2 = 4004801C, R3 = 00000001
R4 = 00000000, R5 = 00000000, R6 = 000000F4, R7 = 1FFFFD61
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Info: J-Link: Flash download: Total time needed: 2.174s (Prepare: 0.894s, Compare: 0.000s, Erase: 0.736s, Program: 0.000s, Verify: 0.000s, Restore: 0.542s)
ERROR: Erase returned with error code -5.
Il J-Link Lite è perfettamente funzionante (posso leggere e scrivere sul SoC nRF58122, un altro processore Cortex-M0, con esso) e il dispositivo sembra funzionare diversamente. So che Kinetis è sbloccato poiché sono stock freschi di fabbrica da DigiKey, ma anche allora il comando "sblocco cinetis" in JLinkExe scade senza errori o informazioni utili.
A questo punto sono sicuro che sto facendo qualcosa di stupido, ma sono in perdita per quello che potrebbe essere.
Qualcuno ha già lavorato con questi dispositivi? Come li stai programmando?
modifica per aggiungere la procedura dettagliata:
Qualche informazione in più:
Ho letto che il pin NMI # è abilitato dal reset (e verificato questo leggendo SIM_SOPT) ma anche che ha un pull-up interno quando abilitato. In questa particolare parte PTB4 si trova sul pin 10, che è un no-connect nel mio design. La disabilitazione del pin NMI non fa differenza. RST # è simile; È collegato a un pulsante che mette a terra il pin e va anche a J-Link Lite ma non c'è pullup esterno. Questo non dovrebbe importare perché come NMI #, il pin RST # ha un pullup interno che è abilitato quando PTA5 è configurato per essere un reset.
Guardando il clock ora ... Fuori dal reset, ICS è la sorgente di clock per FLL e BDIV in ICS_C2 è impostato su 001 (il valore predefinito di reset). Se ho capito bene, questo significa che l'oscillatore interno a 32kHz viene moltiplicato per 1024 per il FLL e quindi diviso per 2, rendendo ICSOUTCLK 32kHz * 1024/2 o 16.8MHz. Posso verificare tramite l'interfaccia della riga di comando J-Link che il FLL è bloccato leggendo ICS_S:
J-Link>mem8 40064004 1
40064004 = 50
(LOCK e IREFST sono impostati, questo è corretto.)
Passo quindi a verificare che la SIM abbia l'orologio abilitato per il controller flash leggendo SIM_SCGC. Posso anche verificare rapidamente per assicurarmi che BUSDIV in SIM_BUSDIV sia impostato su zero, il che significa che BUSCLK ha la stessa frequenza di ICSOUTCLK (cioè non viene suddiviso):
J-Link>mem32 4004800c 1
4004800C = 00003000
J-Link>mem32 40048018 1
40048018 = 00000000
Finora, tutto sembra a posto. BUSCLK è 16,8 MHz e l'orologio del controller flash non è chiuso.
Passiamo ora al controller flash. Fuori reset FCLKDIV è zero e abbiamo bisogno di un clock da 1MHz. La Tabella 18-2 in KEA64RM mostra che FDIV deve essere impostato su 0x10.
Non resettato:
J-Link>mem8 40020000 1
40020000 = 00
Configurare il divisore e verificare le cose vanno bene:
J-Link>w1 40020000 10
Writing 10 -> 40020000
J-Link>mem8 40020000 1
40020000 = 90
FDIVLD è impostato e viene visualizzato il valore corretto in FDIV.
Prima di andare troppo avanti, assicuriamoci che il flash non sia protetto:
J-Link>mem8 40020001 1
40020001 = FE
KEYEN = 11 (disabilitato) e SEC = 10 (non garantito). Ok. Proviamo a verificare che il dispositivo sia vuoto:
J-Link>mem8 40020006 1
40020006 = 80
J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 1
Writing 01 -> 4002000A
J-Link>mem8 40020006
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 83
Qui vediamo che i bit MGSTAT in FSTAT indicano che il controllo del bianco è fallito e che sono stati trovati errori non correggibili. Dispari. Proviamo a cancellarlo da soli:
J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 8
Writing 08 -> 4002000A
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 80
Il comando cancella tutto è riuscito. Ora proviamo un controllo vuoto:
J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 1
Writing 01 -> 4002000A
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 80
Ora il controllo in bianco va bene?
A questo punto sono pronto per arrendermi, mangiare la perdita di questi prototipi e andare con un processore di ST dove non ho mai avuto questo tipo di problemi prima. La documentazione di Kinetis è abbastanza approfondita ma è molto densa e trovo molto difficile iniziare. Posso spostare l'I / O attraverso le letture della memoria e accedere ad altre periferiche, ma non riesco a capire cosa c'è che non va nel controller flash. Lavoro con i micro da oltre 20 anni e questo tipo di difficoltà è qualcosa che non avevo mai incontrato prima.
20150102 modifica:
Quindi ancora non andare qui. Ho effettivamente acquistato una scheda di valutazione FRDM-KL25Z ($ 15 da DigiKey) e l'ho modificata inserendo il software generico CMSIS-DAP sul debugger OpenSDA e tagliando J11 come nel blog di Keith Wakeham . Ho il target di bordo (il KL25Z) che esegue un semplice programma in modo che non interferisca con la linea di reset e posso vedere il mio SKEAZN64 con OpenOCD e giocare con esso, ma sfortunatamente non può nemmeno programmarlo. Il software Kinetis Design Studio (KDS) non farà lampeggiare il mio Kinetis perché dice che è protetto e che devo fare una cancellazione di massa, ma OpenOCD (come parte di KDS) non sembra sapere come farlo. La versione master git di OpenOCD che ho costruito sul mio Mac comprende Kinetis, ma non la specifica serie KEA, quindi sono tornato al punto di partenza.
Tornando al J-Link ...
@AdamHaun ha avuto un ottimo indizio, e se ho impostato il tipo di reset di J-Link (comando rsettype) sul tipo '6' (Kinetis) si suppone che J-Link disabiliti il watchdog dopo aver resettato il core. Guardando il registro WDOG_CS1 (0x40052000) sembra che sia così, ma ancora nessun dado. Un'operazione di cancellazione sembra andare fuori dai binari con PC a 0xfffffffe e codice di errore -5, e un comando "sblocca cinetis" funziona solo se disabilito il pin di reset usando SIM_SOPT (scrivendo il valore a 32 bit da 0x00000008 a 0x40048004). Sfortunatamente, se lo faccio, la CPU non può mai essere arrestata di nuovo, presumibilmente perché l'interfaccia SWD non può usare la linea di reset per forzare il DAP SWD in uno stato noto.
20150103 modifica:
HO LED LAMPEGGIANTE
RIPETERE
HO LED LAMPEGGIANTE
Versione TL; DR: metti l'immagine USBDM sulla scheda FRDM-KL25Z (una storia tutta per sé), usa l'app autonoma del programmatore ARM per inviare il test stesso sulla scheda. Ciclo di accensione e voilà.
La versione lunga arriverà più tardi. Ora ho meno di 48 ore per scrivere ed eseguire il debug del software per questa scheda KEAZN64, finire di modificare / testare altri software che ne derivano e lavorare su alcuni documenti per un altro client. Prometto che farò aggiornare a questa domanda con una risposta dettagliata. Volevo solo condividere il mio successo. Grazie a tutti per il vostro aiuto. Potrei dover parlare con le mod perché mi piacerebbe davvero dare la grazia ad un paio di voi in particolare.