2011-01-17 38 views
12

Ok, sono un po 'confuso sulla programmazione per i processori ARM. Barrage of questions time:Come ottenere il codice ARM su un dispositivo reale, JTAG? È possibile creare JTAG Impromptu con Arduino?

  • Come si ottiene il binario compilato in un processore ARM?
  • JTAG è il metodo normale (penso che sia quello che la mia ricerca ha indicato ...)?
  • È l'unico metodo?
  • Se è un metodo valido, esattamente come lo si usa in quel modo?
  • Se non è allora cosa è/come faccio?

Inoltre, può qualcosa come un Arduino essere usato per creare un'interfaccia JTAG impromptu (se questo è effettivamente ciò che è necessario per programmare dispositivi ARM). . .?

Ho già impostato QEMU per testare il codice e così via, ma non sono sicuro di come procedere per ottenere effettivamente il mio codice nel regno fisico.

In sostanza, sto chiedendo: JTAG è il programmatore di dispositivi del mondo ARM? Posso spoofing uno con un Arduino (Arduino wiggler Clone o.o)? Se JTAG non lo è, cosa è e posso spoofarlo?

Oh ... E potrei aver bisogno di una spiegazione migliore di come funziona JTAG.

Ora per un po 'di informazioni di base:
Ho un vecchio Palm dispositivo (LifeDrive), che ha il processore XScale PXA270 credo. Sembra che non ci sia più alcun sviluppo attivo della comunità per questo, e non ne ho più molto, quindi mi piacerebbe solo giocarci/scherzare. Fondamentalmente, questo potrebbe essere un buon modo per giocare con ciò che è essenzialmente una massa di sensori, e altri ingressi e uscite varie, e anche abituarsi a ARM Assembly.

Non esitate a dirmi se sto prendendo l'approccio sbagliato, ma almeno fornire alternative (anche se sono abbastanza impostato per scherzare con il LifeDrive in particolare, se volessi solo giocare con la programmazione embedded, lo farei sul mio Arduino invece.)

Praticamente in questo momento tutto è uno sparo nel buio. Sono un po 'stanco di andare in giro da nessuna parte, quindi ho postato questo.

+0

Come si ottiene il binario compilato in un processore x86? –

+0

Tramite un emulatore. –

+0

Non proverò nemmeno a competere con la (eccellente) risposta di Clifford. Ho un numero di esempi di bracci per un numero di schede di braccio a basso costo. Il discovery stm32f4 per $ 20 è un buon percorso, quello che devi caricare viene fornito con la scheda. La scoperta della linea del valore di $ 10 stm32, simile/stessa storia. http://github.com/dwelch67/ Ho alcuni simulatori di braccia e anche thumbulator e amber_samples, così puoi avere i piedi bagnati gratis. –

risposta

15

Ecco un sacco di domande! Ecco alcune risposte:

Come si ottiene il binario compilato in un processore ARM?

Varia a seconda di un numero di fattori.

JTAG è il metodo normale (penso che sia ciò che la mia ricerca ha indicato ...)?

La maggior parte (forse tutti) dei moderni dispositivi basati su ARM includono un'interfaccia JTAG (esclusi i soft core su un FPGA). Questo in genere può essere usato per programmare on-chip o flash esterno o caricare direttamente nella RAM. L'interfaccia JTAG è anche l'interfaccia per le funzioni di debug e traccia on-chip. Alcuni dispositivi dispongono di interfacce di debug/programmazione aggiuntive, come ad esempio l'SWD ARM's.

È l'unico metodo?

In alcuni casi. Alcuni microcontrollori basati su ARM includono una ROM bootloader su chip che può supportare il flash seriale, USB, NAND Flash o altri mezzi di programmazione del flash su chip. A volte una tale funzione è molto semplice e si intende solo caricare ed eseguire un bootloader secondario che viene eseguito dalla RAM e fa la programmazione flash effettiva.

Se è un metodo valido, esattamente come lo si usa in quel modo?

Utilizzando il software host appropriato. JTAG è un'interfaccia molto semplice e non definisce alcuna funzionalità particolare, ma solo un mezzo per il trasferimento dei dati. In genere il software di programmazione deve sapere con quale dispositivo sta comunicando e se la memoria flash non è on-chip, sarà necessario conoscere il dispositivo flash e il suo indirizzo. Spesso la toolchain di sviluppo include il supporto per la programmazione dei dispositivi, in particolare per i dispositivi con memoria on-chip. Se si utilizza la toolchain GNU, è possibile utilizzare OpenOCD per programmare il dispositivo e interfacciare il debugger GNU.

Se non è allora cosa è/come faccio?

Se il target è un COTS, potrebbe includere un bootloader che consente già l'aggiornamento del software tramite USB, seriale o Ethernet, ad esempio.

Inoltre, è possibile utilizzare qualcosa come un Arduino per creare un'interfaccia JTAG improvvisata (se è effettivamente necessario per programmare i dispositivi ARM). . .?

Probabilmente, come ho detto JTAG stesso è banalmente semplice da implementare, il problema è renderlo compatibile con qualsiasi software host che si utilizzerà (o rendere il software compatibile con esso). Gli adattatori JTAG "wiggler" più semplici sono implementati tramite I/O della porta parallela del PC, non particolarmente veloce, ma funzionale.

In sostanza, sto chiedendo: JTAG è il programmatore di dispositivi del mondo ARM?

'stato originariamente definito come boundary scan test interface, ma è ora ampiamente utilizzato nella maggior parte dei microprocessori e microcontrollori che includono debug e programmazione on-chip.

Posso prendere in giro uno con un Arduino (Arduino wiggler Clone o.o)? Se JTAG non lo è, cosa è e posso spoofarlo?

Non si tratta di "spoofing", l'interfaccia può essere implementata in molti modi. Il modo in cui implemnt influisce principalmente sulla velocità dell'interfaccia. 16   MHz può essere acquisito, ma un più semplice oscillatore parallelo porterebbe probabilmente a non più di 500   kHz. È un'interfaccia sincrona, quindi i clock rate variabili non sono un problema.

Oh ... E potrei aver bisogno di una spiegazione migliore di come funziona JTAG.

sono sicuro che non posso fare di meglio che la spiegazione di Wikipedia in JTAG. Ma per l'implementazione sul dispositivo di destinazione, è necessario consultare il manuale/il foglio dati di riferimento della parte.

Ho un vecchio dispositivo Palm (LifeDrive), che ha il processore XScale PXA270 credo.

"Credere" probabilmente non è sufficiente; dovrai saperlo. I pin JTAG sono anche esposti sulla lavagna? Sarebbe normale su un prodotto di consumo omettere un connettore JTAG effettivo. Anche se ce n'è uno, sarà probabilmente un connettore proprietario e un pin-out (JTAG stesso non ne definisce nessuno, e ce ne sono diversi definiti per ARM, ma ciò che potresti trovare su una scheda di sviluppo potrebbe non essere incluso nel prodotto finale del consumatore.

Fondamentalmente, questo potrebbe essere un buon modo per giocare con ciò che è essenzialmente una massa di sensori, e altri ingressi e uscite vari, e anche abituarsi ARM linguaggio assembly.

Probabilmente è meglio avere una scheda di sviluppo pronta all'uso con i pin e le interfacce I/O esposti.Per un prodotto di consumo, è probabile che solo i pin richiesti dall'applicazione di destinazione siano esposti, e anche in questo caso potrebbero non essere accessibili se sono collegati ai dispositivi BGA. Inoltre, XScale si trova all'estremità complessa dei dispositivi ARM (all'incirca tra ARM9 e ARM11), se non si ha familiarità con tali dispositivi e cose come il controllo dell'orologio PLL, il controllo e la sincronizzazione di SDRAM e la configurazione della MMU, si potrebbe voler guardare qualcosa di più semplice Non solo, ma dal momento che sia Flash che RAM saranno off-chip, occorreranno dettagli sulla mappatura degli indirizzi della memoria e di altri dispositivi esterni, oltre ai necessari dettagli di temporizzazione SDRAM. Trattandosi di un dispositivo consumer, tali dettagli potrebbero non essere disponibili se non mediante reverse engineering.

Detto questo, per quanto riguarda il commento precedente sui bootloader, Palm fornisce a user installable ROM update per il dispositivo, quindi deve avere un bootloader. Tuttavia, avresti ancora bisogno di dettagli sul formato del file immagine e sul protocollo di trasferimento dati. È improbabile che siano pubblicati e probabilmente difficili da decodificare.

se volevo solo giocare con programmazione embedded, lo farei sul mio Arduino invece.)

Ci sono un sacco di scheda di sviluppo a basso costo ARM disponibili. Prova ad esempio Olimex: hanno anche un basso costo "Wiggler" clone JTAG adapter.

+0

Grazie mille per la tua eccellente risposta: D. Sì, è infatti il ​​PXA270, e ho trovato qualcosa su hackndev che delinea i punti in cui i pin JTAG si trovano sul lifedrive. Inoltre so (penso che almeno!) dove la maggior parte dei vari dispositivi sono mappati alla memoria all'avvio, quindi sarebbe utile in questa situazione? – JBailey

+0

bene, questo lo rende molto più fattibile. ancora più difficile di una scheda di valutazione. –

+0

Accolgo con favore la sfida = p – JBailey

0

Non posso aiutarti in particolare, ma lavoro con ARM. È dotato di compilatori e linker ARM e di test con debugger progettati appositamente per il dispositivo, quindi il codice viene visualizzato su supporti che il dispositivo esegue in modo nativo.

Pertanto, sarà necessario un modo per aggiornare le informazioni su un supporto che Palm può eseguire o richiedere un emulatore software per il test. Vorrei sapere di più sul Palm, ma sono più sul lato dello sviluppo del gioco :) Sembra che JTAG potrebbe essere un emulatore x86 di qualche tipo, quindi probabilmente inizierei da lì.

+0

JTAG è una sorta di interfaccia di debug del circuito. . . Qualcosa come i vari chip sulla scheda sono collegati insieme, quindi è possibile accedere e eseguire il debug di tutti utilizzando un'interfaccia JTAG. Non sono abbastanza sicuro di me stesso, ma grazie per aver risposto comunque. Ma dimmi di più su come il codice viene mostrato ai "media" (e che tipo di media è). E cosa vuoi dire che il dispositivo funziona in modo nativo? Un po 'come il PC che si avvia da un hard disk? – JBailey

+0

La maggior parte dei dispositivi ha un'area nella RAM in cui appaiono per iniziare a eseguire il loro codice: un'area di boot strap di per sé. Quell'area di solito ha un comando jmp dove vuoi che il tuo codice di avvio vivi. Il codice che controlla ciò che ho trovato è solitamente chiamato crt.s o qualcosa di simile. Questo imposta le dimensioni dello stack, cancella RAM, carica statica e così via, quindi chiama una routine "principale" che la maggior parte del codice C/C++ si aspetta come ingresso. Sì, un po 'come un disco rigido. Per molti telefoni cellulari/game hadheld, le schede SD vengono utilizzate per l'avvio. Altro in arrivo ... –

+0

Per un esempio su un dispositivo su cui ho lavorato, consulta gbadev.org per qualche informazione su come creare un'app per Game Boy Advanced e Game Boy DS. Questi sono entrambi dispositivi ARM7/ARM9 con una tonnellata di documentazione e supporto per i forum. Vi darà anche un bel corso accelerato sulla programmazione embedded di base. Ho lavorato in terra incorporata per così tanto tempo ora che mi infastidisce quando lavoro su sistemi con sistemi operativi ora :) –

1

JTAG è il modo più semplice per accedere alla scheda per eseguire la RAM o il flash.È uno strumento di debug che consente di leggere e scrivere tutti i registri interni di una CPU e controllare anche tutti i pin I/O. Le CPU più moderne supportano JTAG.

Può essere semplice come una porta parallela bit banger (wriggler) o un costoso hardware di costruzione. Vorrei acquistare un piccolo dispositivo USB solo per iniziare come questo one. Il ragazzo This lo ha usato con un PXA270.

Per tutti gli articoli OpenOCD correlati vai here. Questo aiuterà nel debugging e nella programmazione e elenca tutti i tipi di hardware JTAG semplici.

Una nota sul processore che hai. Non sembra essere ampiamente supportato. Forse dovresti guardare una scheda di sviluppo economica con un processore ampiamente supportato.

+0

Hmm, OpenOCD non funzionerà con il PXA270? Sul sito web macraigor sembra indicare che Wiggler supporta questo processore, o è più un problema con il software Host. Inoltre, in che modo UrJtag è paragonabile a Open OCD o sono entità separate e incomparabili? – JBailey

+0

Funzionerà. Open OCD è usato dalla maggior parte delle persone per ARM, non so nulla di UrTjag ma potrebbe funzionare. – Gerhard