Board pinout


Come scoprire la piedinatura della scheda


Non mi assumo nessuna responsabilita' per danneggiamenti, perdita di dati o danni personali come risultato diretto o indiretto dell'uso delle informazioni contenute in queste pagine. Questo materiale e' fornito cosi' com'e' senza nessuna garanzia implicita o esplicita.


Home
Hardware
Software

Abstract
Il principio
Mappatura GPIO
Board pinout
Reverse in azione
Possibili espansioni
Download
Links
FAQ
Contatti

Abstract

Applicando una tecnica di reverse engineering ho scoperto come sono mappati i segnali sulla scheda ARM. Questo vuol dire avere il pinout completo della scheda. In questa pagina vi illustrero' il procedimento che ho usato per trovare come sono collegati i segnali sulla scheda e per finire vi mostrero' il pinout completo.
A vostro proprio rischio potete ripetere l'intero procedimento sulla vostra scheda, oppure semplicemente potete prendere i miei risultati come buoni e basare il vostro lavoro su di essi. Volendo potete anche utilizzare lo stesso metodo per altre schede o altri sistemi e tentare di scoprire come sono stati disegnati.

Il principio

Il microprocessore MC9328MXL e' dotato di un piccolo firmware interno chiamato bootloader. Questo e' un piccolo programma che puo' essere attivato da una precisa configurazione delle linee BOOT (vedere Bootstrap Mode Operation nel Manuale di Riferimento del MC9328MXL). Nel nostro caso l'attivazione del bootloader si ottiene chiudendo il Programming jumper al centro della scheda.
Il bootloader e' un piccolo interprete dei comandi in grado di fare solo due o tre cose: riceve comandi dalla porta seriale, i comandi sono costituiti da stringhe speciali chiamate B-records, ciascun comando puo' leggere dei dati dalla memoria, scrivere dei dati in memoria o avviare l'esecuzione di un programma da un'indirizzo ben preciso.
Questo loader viene utilizzato per caricare nella scheda il codice richiesto dall'applicazione e in alcuni casi puo' essere utilizzato come un debugger molto primitivo.
Nel nostro caso noi utilizzeremo questo bootloader come un agente in grado di agire dall'interno della scheda e di fare cio' che noi gli chiederemo di fare. In questo scenario noi comunichiamo attraverso la seriale con il loader e possiamo manipolare i registri del microprocessore dalla Linux box. Ho fatto tutto questo perche' e' molto piu' semplice per me scrivere e modificare un programma che gira sulla mia Linux box invece di scrivere un programma che giri sull'ARM che c'e' sulla scheda.

Possiamo vedere il bootloader come una piovra che possiamo guidare per manipolare i registri di controllo all'interno del microprocessore. Ora noi gli chiederemo di impostare uno specifico registro ad un ben preciso valore ed egli lo fara', in questo modo possiamo manipolare i registri di controllo direttamente dalla Linux box.
Questa cosa e' estremamente utile perche' modificando i registri di controllo possiamo pilotare le linee di I/O e scoprire come sono collegate nel PCB. Cerchero' di spiegarmi meglio: sulla scheda c'e' una linea di I/O, osservando dove e' collegata possiamo supporre l'uso che questa linea puo' avere, ma non saremmo in grado di trovare l'esatta funzione della linea: per esempio sappiamo dov'e' la porta seriale, il connettore e' ben visibile sulla scheda, ma questo connettore ha 6 fili, quale di questi e' la linea TX? Quale la linea DTR?
Agendo dall'interno possiamo muovere il pin TX su e giu', quindi con una sonda possiamo individuarlo sul connettore, in questo modo siamo assolutamente sicuri di quale sia il piedino TX.
Possiamo collegare una serie di sonde ciascuna ad una linea di I/O, quindi pilotare su e giu' ciascuna linea mappata sul GPIO e vedere dove si trova quella linea sulla scheda.

Mappatura GPIO

Ci sono 97 linee di I/O disponibili sul MC9328MXL, tutte queste linee sono pilotate dal modulo GPIO. Il GPIO e' un dispositivo (interno al microprocessore) in grado di rimappare ciascuna linea di I/O da un elenco di funzioni che possono essere impiegate per quella linea.
Questa tabella riassume tutte le funzioni che possono essere mappate su ciascuna linea di I/O, i bit segnati come Unused non sono disponibili nel GPIO.

Port A Function
GPR_A=0
Function
GPR_A=1
Other
0 A24   SPI2_SCLK
1 TIN   SPI2_RXD
2 PWMO    
3 CSI_MCLK    
4 CSI_D0    
5 CSI_D1    
6 CSI_D2    
7 CSI_D3    
8 CSI_D4    
9 CSI_D5    
10 CSI_D6    
11 CSI_D7    
12 CSI_VSYNC    
13 CSI_HSYNC    
14 CSI_PIXCLK    
15 I2C_SDA    
16 I2C_SCL    
17 PA17   SPI2_SS
18 BCLK    
19 LBA    
20 ECB    
21 A0    
22 CS4    
23 CS5    
24 A16    
25 A17    
26 A18    
27 A19    
28 A20    
29 A21    
30 A22    
31 A23    
Port B Function
GPR_B=0
Function
GPR_B=1
Other
0      
1      
2      
3      
4      
5      
6      
7      
8 SD_DAT_0 MS_PI0  
9 SD_DAT_1 MS_PI1  
10 SD_DAT_2 MS_SCLKI  
11 SD_DAT_3 MS_SDI0  
12 SD_CLK MS_SCLKO  
13 SD_CMD MS_BS  
14 PB14    
15 PB15    
16 PB16    
17 PB17    
18 PB18    
19 PB19    
20 USBD_AFE    
21 USBD_OE    
22 USBD_RCV    
23 USBD_SUSPND    
24 USBD_VP    
25 USBD_VM    
26 USBD_VPO    
27 USBD_VMO    
28 UART2_CTS    
29 UART2_RTS    
30 UART2_TXD    
31 UART2_RXD    
Colors legend
Unused SPI1 SPI2 UART1 UART2 UART3
  I2C CMOS SIM MSHC MMCSD
  SSI SSI2 USB LCD other I/O
Port C Function
GPR_C=0
Function
GPR_C=1
Other
0      
1      
2      
3 SSI_RXFS    
4 SSI_RXCLK    
5 SSI_RXDAT    
6 SSI_TXDAT    
7 SSI_TXFS    
8 SSI_TXCLK    
9 UART1_CTS    
10 UART1_RTS    
11 UART1_TXD    
12 UART1_RXD    
13 SPI1_SPI_RDY    
14 SPI1_SCLK    
15 SPI1_SS    
16 SPI1_MISO    
17 SPI1_MOSI    
18      
19      
20      
21      
22      
23      
24      
25      
26      
27      
28      
29      
30      
31      
Port D Function
GPR_D=0
Function
GPR_D=1
Other
0      
1      
2      
3      
4      
5      
6 LSCLK    
7 REV UART2_DTR SPI2_SCLK
8 CLS UART2_DCD SPI2_SS
9 PS UART2_RI SPI2_RXD
10 SPL_SPR UART2_DSR SPI2_TXD
11 CONTRAST    
12 ACD/OE    
13 LP/HSYNC    
14 FLM/VSYNC    
15 LD0    
16 LD1    
17 LD2    
18 LD3    
19 LD4    
20 LD5    
21 LD6    
22 LD7    
23 LD8    
24 LD9    
25 LD10    
26 LD11    
27 LD12    
28 LD13    
29 LD14    
30 LD15    
31 TMR2OUT   SPI2_TXD

Questa tabella potrebbe essere incompleta in alcune parti, l'ho ricavata dal capitolo Signals and connections del MC9328MXL Tecnical Data.

Board pinout

Questa e' la piedinatura completa della scheda:

Reverse in azione

Se vuoi ripetere l'intero processo per tuo conto leggi questo capitolo, in caso contrario puoi saltarlo ed andare a lavorare con la tua scheda ARM.
Prima di tutto hai bisogno di una sonda, meglio sarebbe avere piu' sonde da usare contemporaneamente. Una sonda molto semplice (come quella usata da me) puo' essere costruita come mostrato nella figura sottostante, altrimenti puoi usare un voltmetro (meglio se analogico) o un oscilloscopio.

Questo tipo di sonda funziona anche se il livello d'ingresso e' ricavato da un'alimentazione a 3.3V, quindi funzionera' anche con la scheda ARM.

1) Collega questo convertitore RS232 alla prima porta seriale ed usarlo per connettersi alla Linux box.

2) Collega tutte le tue sonde a tutti i piedini di I/O visibili sulla scheda, fai attenzione ai connettori CMOS perche' sono molto delicati.

3) Scarica mxlrever ed installalo sulla tua Linux box.

Ora sei pronto per partire:
4) Digita:

$ mxlrever -icspnuw

per lanciare tutti i test per tutti i piedini.
Se l'esecuzione e' troppo veloce puoi modificare alcuni #define in test.c o semplicemente rilanciare il test. Fai attenzione: se usi mxlrever piu' di una volta devi aggiungere il flag -S sulla riga di comando.
Non tutte le 97 linee di I/O vengono testate al momento, ma mxlrever e' comunque sufficiente per trovare cio' che stai cercando.

Possibili espansioni

Come puoi vedere sopra ci sono alcuni connettori inutilizzati che puoi usare per collegare una memoria SD o una Memory stick alla scheda ARM. Ci sono altre cose interesanti che possiamo fare con questa scheda, per una documentazione completa sull'argomento ti rimando alla documentazione ufficiale del microprocessore, sotto puoi trovare alcuni link e materiali molto interessanti.

Download

Puoi scaricare tutti i files relativi al progetto ARM diretamente da qui.

mxldump-0.05.tar.gz Firmware management suite per il microprocessore MC9328MXL.
MXL-datasheets.tar.bz2 Datasheets ufficiali dell'MC9328MXL.
ADS-schematics.tar.gz MC9328MXL ADS board schematics.

Links

Alcuni link utili riguardo questo progetto:

binutils binutils ftp repository.
GCC GCC homepage.
newlib newlib homepage.
u-boot u-boot repository presso sourceforge.
ARM Linux porting del kernel di Linux per varie architetture ARM.
uClinux La homepage del progetto uClinux: linux per mcroprocessori che non hanno la MMU.
brain & vision descrizione del modulo brain & vision e links ai data sheets.

FAQ

Q: Sai a cosa serve il jumper J20 vicino al condensatore?
A: Certo, il pin vicino al condensatore e' collegato a massa (GND), l'altro pin e' collegato alla linea SSI_RXCLK (pin 4 PORT C). Questo segnale puo' essere utilizzato sia come ingresso che come uscita per fare dei controlli sull'esecuzione del programma.

Contact me

Se hai delle domande, suggerimenti, problemi, etc. puoi contattami a questo indirizzo: bit.trapper@gmail.com

Ultimo aggiornamento: 29 Dic 2012


Questo sito e' stato realizzato interamente con vim.
Grazie a tutta la comunita' open source, alla free software foundation e chiunque scriva software libero.