mercoledì 22 luglio 2009

IP-301 reflash via jtag


Mi si è "guastato" il telefono IP. All'accensione compaiono dei caratteri strani sul display e non si avvia. E' il modello IP301 della Perfectone (www.perfectone.net). Ipotizzo che in qualche modo si sia "sputtanata" la memoria flash che contiene il firmware e pertanto risulta bloccato, inutilizzabile. Forse sono stati i fulmini del tifone tropicale dei giorni scorsi...boh. Decido allora di ripristinare il firmware originale che a suo tempo mi ero prudenzialmente salvato.
La procedura è abbastanza semplice per gli "addetti ai lavori" con un particolare ringraziamento a "Franklin Nell'Ano Roosevelt", ai ragazzi che collaborano al progetto Openwrt ed agli sviluppatori del programma che, attraverso la porta parallela, permette il dialogo tramite porta JTAG alla CPU. Quest'ultima è una CM5000 il cui datasheet è reperibile in rete e con un minimo di passione e buona volontà (oltre alla strumentazione adatta) è possibile riscrivere da zero il firmware per migliorarne le potenzialità. Ma, cosa occorre per ripristinare il firmware originale del produttore nel proprio telefono e poter godere appieno di TUTTE le funzionalità che esso offre?
Hardware:
  • Telefono PERFECTONE IP-301
  • Un pc con porta parallela.
  • Un cavo jtag auto-costruito. Per il cavo: Un connettore 25 pin maschio possibilmente con contatti placcati oro (per la porta parallela), filo sottile per wire-wrap di ottima qualita' (facoltative: 4 resistenze da 100 ohm 1/2 watt fasce marron nero marron oro)

Software:
  • un pc con sistema GNU/Linux (io ho utilizzato la Ubuntu 9.04).
  • tjtag

Files:
  • IP301_070105.rom firmware originale (reperibile direttamente dal produttore con tanto di licenza d'uso o usare quello che ci si è salvati dal proprio telefono bloccato senza avviso da un azienda che illecitamente ha truffato impunemente molti clienti senza nemmeno chiedere scusa dell'errore commesso)
  • tjtagv2-1-4_for_Lexra_LX4380_CPU_20090122.zip (da compilare per quel sistema operativo che non voglio più nominare o per linux con un paio di modifiche ai sorgenti)
Il cavo è "semplice" da realizzare. Nel mio caso non ho utilizzato le 4 resistenze da 100 ohm. La porta parallela del portatile (che ho utilizzato), è noto, ha dei livelli di tensione diversi (più bassi) da quelli di un PC (dipende dal modello) e supportano correnti più basse di quelle indicate nelle specifiche. Occorre connettere dei pin della porta parallela ad altri pin del connettore JP10 presente nella mother board del telefono. Per aprirlo ci sono solo 4 viti con testa a croce. Il JP10 è posto "sotto" il processore principale. Sono due file di piazzole da 6 disposte parallelamente. Una di queste è quadrata ed indica il pin numero 1. La numerazione dei pin di JP10 è dispari per la fila superiore (quella con la piazzola quadrata) e pari per quella inferiore che è collegata a massa (quindi tutti i pin 2,4,6,8,10,12). Le connessioni da eseguire sono:
LPT <----------> jtag JP10
2<----100ohm--->3 (DATA0)
3<----100ohm--->9 (DATA1)
4<----100ohm--->7 (DATA2)
13<---100ohm--->5 (SELECT)
17-25<--------->2 (GND)
quindi 5 fili in tutto.

La cosa che può far bestemmiare in dodici lingue è la saldatura nel circuito stampato dei fili che provengono dalla porta parallela. Serve del flussante liquido e dello stagno sottilissimo NON RoHS in quanto fonde a temperatura inferiore ed è più facile da trattare. Temperatura della punta...250-280 gradi circa se si ha la mano svelta. Senza flussante o senza una punta a spillo del saldatore...lasciate perdere. C'è il rischio di bruciare le piazzole e sollevarle dal circuito, costringendovi a provare a saldare i fili direttamente sul microprocessore... anche questa soluzione riservata solo ai malati di mente o agli incapaci, dilettanti, incompetenti. Una buona lente di ingrandimento di dimensioni generose è quasi indispensabile (come la mia, recuperata da un proiettore di lucidi). Nel mio caso è andata bene al secondo colpo. I fili non devono essere più lunghi di 8-10 centimetri e tirandoli per collegare il connettore è facile strapparne qualcuno (oops...succede). La soluzione più "professionale" è quella di avere un connettore maschio femmina del passo previsto, anche se lo sconsiglio. Questa operazione non è cosa di tutti i giorni e pertanto meglio saldare i fili direttamente sullo stampato.

Prima di spippolare il telefono è meglio fare un backup di quello che c'è...non si sa mai.
Per iniziare, nella propria linux box è meglio rimuovere il modulo lp, uccidere CUPS ed HPoj se attivo (driver stampanti HP). Meglio fermare tutto quello che ha a che fare con la porta parallela, moduli e devices personalizzati compresi. Quindi dare i comandi:

sudo rmmod lp

sudo /etc/init.d/cups stop

sudo /etc/init.d/hpoj stop

Collegare il connettore maschio 25 pin alla porta parallela del PC ed alimentare il telefono con l'alimentatore in dotazione all'apparecchio.
Provare se il cavo è ok con :

sudo ./tjtag -probeonly

Se qualcosa non va, il programma vi elenca i motivi. Generalmente, dato che contrariamente alle indicazioni la CPU è compatibile con quella indicata, c'è qualche collegamento sbagliato o qualche saldatura fredda. Controllare con un oculare illuminato prima di procedere è una cosa saggia se non indispensabile. Okkio ai corti!!

Poi il backup del firmware::

sudo ./tjtag -backup:wholeflash

Il backup dura un pò (più di trenta minuti) ed a video è possibile seguire la percentuale di avanzamento sino alla fine. Poi ci si copia nella cartella dove si trova tjtag compilato, il file IP301_070105.rom che va rinominato in WHOLEFLASH.BIN

Quindi si lancia:

sudo ./tjtag -flash:wholeflash

Il programma inizia a cancellare la memoria e poi a scriverci il file. Ci mette una vita, sia a backuppare che a riflaschare. Armatevi di pazienza e mentre aspettate... fate un pò quello che vi pare. Potete anche stare ad osservare i bytes che scorrono sullo schermo, che fa tanto da film di fantascienza...
Alla fine si spegne il PC, si staccano i fili saldati e si rimonta il tutto. All'accensione, digitare nome utente e password di default previste dal firmware originale e tutto magicamente torna a funzionare come prima. Ottimo lavoro di hacking, perfettamente legale e legittimo contrariamente alla connotazione negativa che certa stupida stampa di regime ha dato al termine "hacker".

Il modello in questione è lo stesso noto apparecchio telefonico (ethernet) che viene dato in "omaggio" da una nota azienda. Ne regalano uno per ogni 20 euro circa di ricarica del credito. Circa due anni fa, veniva "regalato" senza avvisare i clienti che l'apparecchio è bloccato, ovvero non permette di usare altri operatori al di fuori di loro. Grazie tante per il mancato avviso, ne avete fregato chissà quanti, maledetti disonesti miliardari. Sono un consumatore, un cliente, e PAGO regolarmente in anticipo il credito che mi serve per lavorare. Perchè questo trattamento?. L'apparecchio è mio, non è in comodato d'uso e pertanto ci voglio fare quello che mi pare. Se voglio mi ri-scrivo il firmware da zero, a mio piacimento e me lo installo come piace a me. E sia ben chiaro, non è illegale. Della garanzia non mi interessa. Se si guasta ci recupero il display e lo uso per altre attività...sono ca**i miei. Vorrei, data l'occasione e spinto dall'euforia della riuscita dell'operazione, mandare a fanchiulo qualcuno:
In primis, bonariamente, quei ragazzini di quel bellissimo forum, che si sono letteralmente cagati addosso dalla paura alla prima minaccia dell'azzeccagarbugli di turno ed hanno cancellato dal forum le istruzioni per sbloccare quegli apparecchi bloccati indebitamente senza avviso ai clienti. Ragaaaaaaaazzi... gli azzeccagarbugli mentono! Se c'è odore di illecito, quelli partono alla grande (per guadagnare) e non preavvisano di certo, tanto meno "bonariamente". Molti avvocati, per ordine dei propri clienti e per l'interesse dei loro padroni, mentono, mentono in aula, mentono davanti ai giudici, mentono solo per interesse...non lo sapevate? Svegliaaaaa!
In seconda istanza, un vaffanchiulo anche agli azzeccagarbugli di quell'azienda. Maledetti pezzenti, prepotenti e bugiardi. Facile minacciare dei ragazzini che permettono il libero scambio di informazioni senza commettere nulla di illegale vero?. Facile ubbidire al padrone (solo per soldi) il quale ha interessi commerciali nel mentire ai propri clienti per i propri profitti vero? Facile favorire chi non reinveste nell'attività e mette in cassa integrazione i collaboratori a progetto, che vengono usati come fazzolettini usa e getta vero?
Per ultimo...giova far notare all'azzeccagarbugli di turno che naviga alla ricerca di garbugli da azzeccare, che in questo post non vi sono dati sensibili di nessuno. La riparazione di un telefono che si guasta è consentita e perfettamente lecita. Ogni eventuale utilizzo delle informazioni qui riportate per commettere illeciti, è da attribuire a chi commette l'illecito stesso. E COMUNQUE, VAFFANCHIULO, IL TELEFONO E' MIO E CI FACCIO IL CA**O CHE MI PARE. Andatevene a fanchiulo, bastardi!.

P.S. hack the planet! Ripeto: hack the planet!

domenica 12 luglio 2009

Batteria portatile - CMB001B (approfondimento)

Chi la dura la vince. Dopo un infinità di tempo passato a "googlare" a causa della mia testardaggine che mi "impedisce" a volte di scegliere le domeniche per un più sano giro in bici, sono riuscito a decodificare i segnali della batteria in corso di analisi. Premetto che ora, sono molto più "preparato" in merito al funzionamento delle batterie al litio. Se vengono caricate con una corrente troppo alta che porta le celle ad un valore superiore a 4,8 volts, si produce ossigeno che essendo infiammabile può provocare esplosioni ed incendi. Se la tensione di cella scende sotto i 2,6 volts, si ha un degrado fisico dell'anodo, per cui la batteria si distrugge irreparabilmente. Il metodo di carica è multi-step. In una prima fase deve essere caricata con corrente regolata sino ad una certa soglia di tensione. Successivamente la carica è in tensione, sopra una soglia predefinita, con conseguente diminuzione della corrente assorbita. Il tutto va controllato con la temperatura, che deve rimanere entro limiti ben precisi in base al valore di resistenza del termistore che in questi casi è obbligatorio ed indispensabile. Si spiega così come mai le batterie al litio necessitano di uno specifico processore e di una memoria che memorizza i valori di soglia (specifici per le celle utilizzate). E' necessario inoltre memorizzare lo stato di carica totale e residua per poter riprendere in fase di ricarica il giusto step. Si spiega inoltre come mai a volte alcune batterie, di cellulari o portatili, esplodono o si incendiano. Una causa potrebbe essere la presenza di valori incongruenti o fuori specifica. La colpa viene quasi sempre addossata alle batterie "cinesi", comunque non originali cui segue sempre la raccomandazione di acquistare batterie originali. Ecco spiegato perchè quando accade, la casa madre richiede sempre il pezzo bruciato od esploso... controllano i dati. Ma se ai primi sintomi di decadimento provo a variare i parametri e far "esplodere" una batteria originale, è probabile che mi venga sostituita in garanzia con tanto di rimborso dei danni conseguenti. Basta solo distruggere l'eeprom e nessuno sarà mai in grado di dimostrare nulla.
Può però accadere che i valori memorizzati normalmente, calcolati a volte per approssimazione in base al firmware implementato e dipendenti dalla temperatura, presentino dei valori incongruenti con l'effettivo stato delle celle. Accade infatti che il portatile (quasi improvvisamente o nel giro di pochissimi giorni) si rifiuti di caricare le celle in quanto la lettura dei parametri suggerisce il contrario. Le celle a mio avviso non sono "guaste", forse presentano una piccola diminuzione di efficienza, ma possono ancora continuare a lavorare per un pò di tempo. Leggendo infatti la documentazione sulla chimica delle batterie al litio, non esiste in letteratura alcuna segnalazione che indichi o spieghi un progressivo e rapido degrado come quello che si riscontra nell'uso quotidiano delle batterie dei computer portatili. Forse c'è un "problema di firmware" e pertanto vorrei provare a modificare i valori di carica - scarica memorizzati nell'eeprom per sperimentare la "resuscitazione" di una batteria dichiarata prematuramente defunta.
Per procedere con la lettura e scrittura dei valori che mi interessano, avrei prima la necessità di decodificarli. Ho trovato nella schedina di controllo, un integrato prodotto dall'azienda Power Smart (purtroppo il sito non risponde), un PS331S il cui funzionamento di principio è visibile in figura, così come la sua piedinatura. E' un processore che controlla lo stato di 4 celle e regola la comunicazione con l'esterno e con l'eeprom. Ecco la descrizione dei pin, in inglese.
PIN # NAME DESCRIPTION
1 SWITCH (Input) Edge triggered input pin typically used for LED activation. May also be used for ‘Sleep Mode’ wake-up comparator input.
2 EE-SCK (Output) External serial EEPROM Clock. Connect to SCK pin on external serial EEPROM. 3 EE-CS (Output) External serial EEPROM Chip Select . Connect to CS pin on external serial EEPROM.
4 VREFT (Output) Reference voltage output for use with temperature measuring A/D circuit . This 150 mV output is the top leg of a voltage divider thermistor circuit.
5 VNTC (Input) Temperature measurement A/D input for use with temperature circuit. This is the mid-point connection of a voltage divider where the upper leg is a thermistor (103ETB-type) and the lower leg is a 3.65K ohm resistor . This input should not go above 150 mV.
6 VCELL1 (Input) Lowest level input for A/D measurement of cell voltages.
7 VASS1 Analog ground reference point.
8 VCELL2 (Input) Second to lowest level input for A/D measurement of cell voltages.
9 VCELL3 (Input) Second to highest level input for A/D measurement of cell voltages.
10 VCELL4 (Input) Highest level input for A/D measurement of cell voltages.
11 VADD (Input) Analog supply voltage input.
12 VSHP (Input) Current measurement A/D input from positive side of the current sense resistor.
13 VSHM (Input) Current measurement A/D input from negative side of the current sense resistor.
14 VASS2 Analog ground reference point.
15 VREG (Output) Used to control an external small signal MOSFET to provide a regulated voltage to the IC . Only required for battery packs with voltages greater than 3.6V.
16 OSCOUT (Output) Oscillator connection for an external low-power 32.768 kHz crystal which provides accurate timing for self-discharge and capacity calculations.
17 OSCIN (Input) Other oscillator connection . (See OSCOUT description.)
18 EE-SO (Output) External SPI serial EEPROM data input. Connect to the SO pin on external SPI serial EEPROM. 19 EE-SI (Input) External serial EEPROM data input. Connected to the SO pin on external serial EEPROM
20 VDDD (Input) Digital supply voltage input.
21 SAFEOUT (Output) Programmable over-voltage and/or over-temperature output. Default non-active output is low (0V)
22 LED4 (Output) Relative or Absolute State-Of-Charge visual display
23 LED3 (Output) Same as LED4 pin
24 LED2 (Output) Same as LED4 pin
25 LED1 (Output) Same as LED4 pin
26 SMB-DTA SMBus Data pin connection.
27 SMB-CLK SMBus Clock pin connection.
28 VDSS Digital ground reference point.
I pin che ci permettono il "dialogo" con la batteria, dall'esterno senza necessità di aprirla, sono il 26 ed il 27, collegati al pettine di connessione esterno assieme al positivo (P+), negativo (P-) e termistore (T), come mostrato nella foto. I pin 2, 18 e 19 invece offrono la possibilità di interfacciarsi via SPI all'eeprom, per operazioni di lettura e scrittura. Occorre programmare un micro o utilizzare un interfaccia compatibile con i protocolli previsti. Il bus-pirate che ho ordinato deve ancora arrivare, altrimenti sarebbe stato un gioco da ragazzi farlo immediatamente.
Per leggere i valori nell'eeprom, non ci sono grandi difficoltà, se non riuscire a saldare dei fili sottili (che non ho per ora) con un operazione chirurgica. Verso l'esterno, il connettore della batteria presenta i soliti segnali che abbiamo già visto con il primo post sulla batteria alla quale è stata fatta la radiografia. Oltre ai poli positivo e negativo, il terminale del termistore (per la misura e monitoraggio della temperatura, ed il segnale SMBUS (vedi foto). Per complicare la vita ai tecnici "faidate" (DIY do it yourself) il produttore ha sdoppiato il piedino di massa, mentre gli altri sono sempre i soliti (T,D,C). Nella prossima batteria che andrò ad analizzare, i punti di contatto sono 11 ma ho il sospetto che molti di essi siano sdoppiati solo per confondere (inutilmente) gli hackers. Bene. Ora manca solo l'organizzazione dei dati nell'eeprom per verificare se la mia teoria è esatta. Mi sa che avrò bisogno di tuffarmi in qualche forum specializzato per cercare qualche dritta utile. Alla prossima.

P.S. Piove dove serve. Ripeto: Piove dove serve.

sabato 11 luglio 2009

Batteria portatile - CMB001B

Questo post è in corso di aggiornamento. Potrebbe contenere informazioni non corrette. Stay tuned for further updates.
Stavolta ho aperto una batteria di un computer portatile Compaq P700, per proseguire le indagini, approfondimenti e ricerche in merito all'elettronica di controllo delle celle. Il modello della batteria è CMB001B, un elemento da 14.8V e 3.6Ah (Compaq part number 246437-001) con celle coreane assemblate a Taiwan e compatibili con i Compaq modelli CM2090 e CM2130. Il contenitore plastico non è particolarmente critico da aprire, a anche se occorre inevitabilmente romperlo un pò. Le due parti sono agganciate con due clips su ciascun lato lungo ed una per ciascun lato corto in posizione centrale. I bordi sono saldati non tanto tenacemente ad ultrasuoni e le celle all'interno sono tenute al loro posto con del bi-adesivo sottile. Otto celle, LG Chem made in Korea sono collegate in una serie di 4 coppie in parallelo fra loro, ciascuna da 3,7 volts. Per ogni coppia di celle in parallelo, è collegato un filo che entra nella scheda di controllo, probabilmente per misurare i valori di carica - scarica o per poterle caricare coppia per coppia. Potrò essere più preciso solo dopo l'analisi approfondita del circuito. Al polo positivo è collegato un fusibile mentre il termistore di controllo temperatura è incollato in prossimità dell'elemento intermedio alla serie. Su ogni cella è stampigliato un numero diverso in calce ad un codice a barre. Due codici, sono impressi a punti di inchiostro direttamente sull'involucro di ogni cella ma, a causa della bassa risoluzione, risulta difficile individuare le differenze fra una C una D o uno zero, mentre a volte il 2 sembra un 8. Confrontando le varie sigle, dovrebbero essere CCD0011102 e CAD0C30302 e si può supporre che rappresentino il codice della cella per un eventuale ricerca e riordino dei ricambi.
elettronica batteria compaqIl pettine di connessione presenta 6 contatti, ma sfortunatamente non esiste alcuna indicazione in merito al loro significato. L'elettronica risiede su un unica scheda che alloggia anche il pulsante di visualizzazione dello stato di carica ed i 4 led corrispondenti.
Cobra Ver.G2 sembra essere l'unica sigla dello stampato che alloggia due integrati interessanti siglati 1511414C e 25LC040. Il primo è sconosciuto, non si riesce di trovare il datasheet, mentre il secondo è un SPI bus serial (Simple Serial Peripheral Interface ) eeprom (electrically erasable PROM) da 4Kbyte con SCK (clock) ed uscite separate SI ed SO. E' sicuramente lì dentro che sono memorizzati i valori che vorrei leggere, solo che in mancanza dei dati del processore, è particolarmente difficile comprenderne il significato. Proverò ad approfondire la ricerca e controllare il logo del produttore stampigliato per verificare se nel suo sito è possibile reperire qualcosa... la ricerca continua, alla prossima.

P.S. Il riso è cotto. Ripeto: Il riso è cotto.