Vai al contenuto
PLC Forum


Circuito reset


3kek1

Messaggi consigliati

Qualcuno mi sa decifrare come funziona questo circuito reset di un TV, sapendo che 3.3VS e' una tensione di standby sempre presente, il processore e' unico e il segnale di ORESET# va al processore?

Grazie.

Hisense-LTDN42K680XWSEU3D_reset-circuit.GIF

Link al commento
Condividi su altri siti


del_user_97632

Ci provo.

Al power on,  V7 e' in saturazione, e la base va lentamente, per via di C95 che si carica, verso lo 0, mandando in interdizione il transistor. Quindi ottieni un segnale di reset basso -> alto. Che va bene visto che e' un tipico reset negato (#).

Il transistor serve da interruttore.

 

EDITATO, ah, letto dopo che V3,3 e' sempre presente ... quindi a questo punto non saprei aiutarti. Ecceto che a volte le cpu hanno un ulteriore pin per comandare gli stati di idle, o piu probabile, che forse con TV in std-by la cpu va appunto in idle (low power mode, ma via apposite istruzioni SW) ma resta alimentata e non viene resettata.

Modificato: da _angelo_
Link al commento
Condividi su altri siti

La descrizione di Angelo va bene, ovviamente la tensione di 3V3 non può essere sempre presente, basta staccare la spina...

Non serve a resettare il processore quando esce da stand-by, ma solo quando viene alimentato da rete. Probabilmente in stand-by il processore è messo in modo sleep o similare, e aspetta la pressione di un tasto o del telecomando (interrupt) per "svegliarsi" e agire di conseguenza.

Link al commento
Condividi su altri siti

del_user_97632
 

 

Non serve a resettare il processore quando esce da stand-by, ma solo quando viene alimentato da rete. Probabilmente in stand-by il processore è messo in modo sleep o similare, e aspetta la pressione di un tasto o del telecomando (interrupt) per "svegliarsi" e agire di conseguenza.

👍

 

Famosi sleep mode, lavorai 3 anni in un azienda che voleva che il suo carputer automotive consumasse solo 5mA con auto in modalita' door-open. Diventai matto, e raggiunsi 20mA, alla fine andare in sleep (anche gestendo propriamnente i pin) solo con la cpu non basta, ma e' tutto il circuito che deve essere progettato per basso consumo.

 

 

Modificato: da _angelo_
Link al commento
Condividi su altri siti

Si nei tv c' e' sempre un processore di standby e uno di fase accensione, in questo caso sono integrati in un unico chip, grazie della spiegazione, dunque se collego il segnale ORESET# a massa avro un processore che e' come fosse disalimentato...

Link al commento
Condividi su altri siti

del_user_97632

No.

Il reset nelle CPU e' un po' come la frizione in un auto. In reset la CPU non fa nulla, ma consuma un minimo. Rilasci il reset e lui parte a eseguire istruzioni. Infatti i condensatori sul reset servono come dire a lasciar scaldare il motore per qualche ciclo di clock, e poi rilasciare la frizione.

 

 

 

 

 

Modificato: da _angelo_
Link al commento
Condividi su altri siti

Non ho capito, il processore si attiva dal fronte di salita dallo 0 a 3v3 del segnale reset? E il condensatore tra C e E di V7 cosa dovrebbe fare?, se V7 mette a massa per pochi istanti ORESET, il condensatore non si scarica troppo presto visto che V7 lo cortocirc. a massa(quasi)? In sostanza per inibire il processore cosa devo fare, non basta mettere a massa ORESET? Il processore genera il clock per la memoria flash, non voglio che lo faccia, siccome voglio leggere la flash senza dissaldarla, che e' impossibile, e voglio darglielo io il clock, invece che togliere la resistenza sulla linea clock, perche' sono difficili da dissaldare risaldare, facevo questo.

Link al commento
Condividi su altri siti

Il condensatore in questione serve a dare un'impulso di un tempo predefinito.

Il micro ha necessità che la linea di reset si mantenga a 0 per in tempo minimo.

Durante il reset il processore ha il program counter forzato ad una locazione ben precisa, da cui si lancia la routine di inizializzazione 

Link al commento
Condividi su altri siti

del_user_97632
 

In sostanza per inibire il processore cosa devo fare, non basta mettere a massa ORESET?

Si, puoi portarlo a massa con una resistenza magari, che e' buona pratica.

 

Memoria flash, se parli di clock, immagino non sia parallela, immagino neanche nand perche la vedo un po' complessa, ma spi, o qspi, giusto ? comunque i i pin della cpu, in reset, dovrebbero mettersi in alta impedenza, quindi dovresti poterla leggerla.

Se no forse riesci a leggerla a tv spento, alimentandola. Che sigla ha per curiosita' ?

Auguri.

 

 

 

Modificato: da _angelo_
Link al commento
Condividi su altri siti

E' una emmc, gia', ho tralasciato di mettere la resistenza, non avevo considerato il motivo della presenza della R84, invece ieri ho messo il segnale reset direttamente a massa, non so cosa comporta cio'. I collegamenti volanti sono gia' difficili da gestire e ho voluto alimentare  la memoria tramite la scheda su cui e', c'e' anche da considerare il segnale di reset che va alla emmc, mi sono accorto che spegnendo la cpu questo segnale non arriva, perche' da schema parte direttamente dalla presenza di una tens. di alimentazione di fase accensione, ma se il tv non si puo' accendere, devo fare io un ponticello a un 3v3 di standby. Si fa un po' piu complicato del previsto...

Modificato: da Trans Istor
Link al commento
Condividi su altri siti

del_user_97632
 

ho messo il segnale reset direttamente a massa, non so cosa comporta cio

E' buona pratica usare una resistenza solo perche' in caso tu faccia qualcosa di sbagliato, e crei un corto sulal linea, la resistenza, magari di 100ohm o roba del genere, puo salvare la porta della cpu. Nel caso specifico il reset e' un input, non vedo che tu possa aver creato problemi, e 'solo una cosa che ti ho indicato come metodologia.

 

E' una eMMC, ok, quindi protocollo "SDIO" 8 pin dati + clock e comando. Non vedo che tu la possa leggere facilmete. Protocollo SD lo sto studiando ora che sto scrivendo un driver linux, e' molto complesso. C'e' una complessa inizializzazione, e poi vari comandi prima di arrivare al comando di lettura.

Modificato: da _angelo_
Link al commento
Condividi su altri siti

Ti tolgo la curiosita' ma non volevo allargare cosi l'argomento se no poi chiedo troppo, per i problemi di protocollo penserebbe tutto un semplice lettore smartcard usb da 2 euro, ce' chi l'ha gia fatto.

Link al commento
Condividi su altri siti

del_user_97632

No, SD /microsd sono sempre stesso identico protocollo SDIO ma 4 fili dati. Le eMMC ne hanno 8, anche con DDR mode a 1.8V e altre complicanze, per saltare all'HS400 (high speed 400Mhz). Forse quelli che lo hanno fatto sono riusciti a usare solo 4 fili dati, potrebbe darsi che il lettore SD le configuri in modalita 200Mhz o 50Mhz, prova, collega CLK / CMD e D0 a D3, o era qualche eMMC 4 fili dati. Io tutte quelle che ho visto sono 8 linee dati.

 

Unica soluzione semplice e' leggerle dalla cpu dove sono cablate. Anche perche dissaldare un BGA del genere per poi metterlo dove ...

 

Hai visto se prima della eMMC il boot passa per una classica flash SPI nor 8 pin ?

In genere il secondary boot loader (il primary e' il ROM boot loader) e' spesso su una piccola spi nor soic8 ad hoc. Nei TV non so, potrebbe bootare direttamente da eMMC. Tuttavia le eMMC sono comode perche sono in genere usate partizionate, come un HD o SD, quindi molte volte utilizzate dal sistema in uno step successico al boot iniziale, con un file system, non per R/W raw, anche se nessuno ne vieta l'uso RAW.

Modificato: da _angelo_
Link al commento
Condividi su altri siti

Fidati ho letto bene sull'argomento, le emmc sono tutte in grado di dialogare a 1 bit, 4 o 8 e sono quindi compatibili con lo schema delle SD o MMC, la emmc su questo tv e' l' unica memoria presente eccetto la eprom i2c dedicata ai soli settaggi. So che vengono partizionate, non ti spiego tutta la cronistoria, le ho cancellate inavvertitamente tutte facendo accesso alla shell di linux, solo che io non conosco linux, e Linus Torvalds non conosceva le buone maniere di scrivere bene l'aiuto in linea di comandi pericolosi come quello per formattare.. brutta storia.. solo non ho capito bene la funzione delle partizioni di boot, contengono il boot del sistema operativo, bootloader, o cosa?

Modificato: da Trans Istor
Link al commento
Condividi su altri siti

del_user_97632

Si, vero, SD puoi andare a 1, 4  o 8 bit. E' da configurazione iniziale da parte del driver. Ti ho detto, puo darsi che la leggi, prova.

 

Sul kernel linux se hai bisogno ho una certa esperienza, quasi 20 lavori in mainline:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?qt=author&q=dureghello

 

Partizioni di boot delle emmc molte volte non si usano proprio, specie se si fa il boot da SPI NOR. Ma in questo caso potrebbe essere usata una partizione di boot perche non hai la classica spi-nor. Pero mi fa strano, in genere, se c'e' Linux, si passa per un bootloader secondario che inizializza le DDR e carica linux in DDR. Ci sono delle SDRAM/DDR ?

Per esempio in tutte le schede embedded viene caricato prima u-boot che poi inizializza le ddr e carica linux. Da u-boot hai dei comandi per leggere e scrivere le sd/emmc, Per quello chiedevo se vedevi una spi NOR in zona.

Link al commento
Condividi su altri siti

del_user_97632

Quando ti ho risposto ero in citta' a bere una birra e tornano indietro ho ripensato un po' al discorso.

Siccome come ti dicevo sto scrivendo un driver SD ne conosco abbastanza bene il meccanismo.

Il driver in genere legge le "capabilities" della scheda tramite apposito comando, e cerca di settarsi per la massima velocita' offerta dalla scheda. Questa negoziazione avviene a 400Khz. PEr poi saltare a 25Mhz (legacy) o 50, o 200 o 400Mhz, a seconda del tipo di scheda. Potrebbe darsi che quindi sia necessario forzare il driver a richiedere la modalita' 1 o 4 bit. Ma come detto sopra, prova.

Modificato: da _angelo_
Link al commento
Condividi su altri siti

DDR ovviamente ci sono che servono anche ad altro, u-boot e' una specie di Lilo? No mi confondo, forse e' un VMlinuz? Comunque ripeto e' l' unica flash.. Forse confondi, la mia non e' una SD ma una emmc, quindi essendo fissa il processore direi che sa con che velocita' dialogare, mi stava pure venendo il dubbio che il processore contenesse il software di standby...

Modificato: da Trans Istor
Link al commento
Condividi su altri siti

del_user_97632

Editato:  SD e emmc sono stesso protocollo. E' la cpu (driver) che alla fine decide velocita e bus-width. In genere lo fa chioedendo le capabilities, e facendo una specie di "media" con le capacita' del controller. E' una media al massimo comune, esempio il controller supporta solo 25Mhz e la scheda puo andare a 400Mhz come le emmc, il driver va a 25Mhz. non so se mi spiego

 

Il concetto per schede linux e' diverso dal PC, perche nei pc e' il firmware bios/uefi a inizializzare le ddr, Lilo o Grub sono un ulteriore boot loader che viene caricato a DDR gia inizialzzate.

 

Nei sistemi linux su schede, si passa in genere per u-boot, che inizializza le DDR poi carica il kernel in DDR, salta al kernel con un semplice "jmp".

Alcune cpu, come la serie imx, riesce a inzializzare le DDR prima del caricamento di u.boot grazie a delle speciali istruzioni che vengono scritte in testa al binario del bootloader. Ma in molti casi DDR le inizializza u.boot.

 

Tu dici che la tv ha linux (o forse ho capito male), e non ci sono altre spi-nor. Quindi la emmc potrebbe essere utilizzata in modalita' RAW, con u-boot (o qualche altro bootloader che puo essere facilmente scritto dal costruttore) nella partizione di boot. (sono ipotesi). Che cpu e' ? Se fosse u-boot, e trovi modo di collegarti a una console ttl che credo ci sia, dovresti vedere il prompt su un terminale (setta 115200 n 8 1, se u-boot fosse in "silent" mode (boot countdown = 0), prova a digitare un tasto molto velocemente al boot sul terminale.

 

 

Modificato: da _angelo_
Link al commento
Condividi su altri siti

Processore MediaTek MT5398. U-boot c'e' sicuro, lo vedo anche ora dal Log del boot che avevo salvato prima di cancellare tutto, ma mi sta venendo un atroce dubbio, dallo schema la emmc e' alimentata solo in modo acceso, non standby, quindi devo pensare forse che c'e' una flash nel processore.. Del resto nel log si parte con inizializzazione DRAM, poi c'e' una riga eloquente "Start Lmain [CR] MT5398 Boot Loader v0.9" preceduto da un "Start Pmain [CR]   EMMC boot" , piu avanti compare u-boot, da notare che nella directory dev c'erano un paio device, in mezzo a quelli delle partizioni regolari,  tipo "mmcblkboot0" e "mmcblkboot1" vado a memoria. quelle non le ho cancellate, solo quelle, mi ricordo pero' che dopo la formattazione non era presente piu nessun LOG, nemmeno all'applicazione della corrente, si perche' c'era un breve log prima di accendere col pulsante, poi il resto, la gran parte del log.

Modificato: da Trans Istor
Link al commento
Condividi su altri siti

del_user_97632

ok, cpu ARM cortex dual core 900Mhz

 

Start Pmain [CR]  EMMC boot

Start Lmain [CR] MT5398 Boot Loader v0.9" 

 

non sono messaggi di .-u.boot, quindi probaible del ROM bootloader che da pin di bootstrap e' configurato per il proimo boot da emmc.

 

Se poi parte u-boot, ottimo, prova a entrare nel prompt digitando velocemente un tasto, poi se riesci a entrare puoi fare varie cose, ecco un esempio

 

 


U-Boot 2020.01-rc3-00059-g160b006815 (Nov 23 2019 - 23:32:16 +0100)

CPU:   Freescale MCF54415 (Mask:a0 Version:2)
       CPU CLK 240 MHz BUS CLK 120 MHz FLB CLK 60 MHz
       INP CLK 30 MHz VCO CLK 480 MHz
DRAM:  128 MiB
MMC:   FSL_SDHC: 0
Loading Environment from SPI Flash... SF: Detected is25lp128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB
OK
In:    uart@fc060000
Out:   uart@fc060000
Err:   uart@fc060000
Hit any key to stop autoboot:  0 
stmark2 $ 


stmark2 $ mmc .

mmc - MMC sub system

Usage:
mmc info - display info of the current MMC device
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan
mmc part - lists available partition on current mmc device
mmc dev [dev] [part] - show or set current mmc device [partition]
mmc list - lists available devices
mmc hwpartition [args...] - does hardware partitioning
  arguments (sizes in 512-byte blocks):
    [user [enh start cnt] [wrrel {on|off}]] - sets user data area attributes
    [gp1|gp2|gp3|gp4 cnt [enh] [wrrel {on|off}]] - general purpose partition
    [check|set|complete] - mode, complete set partitioning completed
  WARNING: Partitioning is a write-once setting once it is set to complete.
  Power cycling is required to initialize partitions after set to complete.
mmc setdsr <value> - set DSR register value

stmark2 $ mmc read ${loadaddr} 1 16

MMC read: dev # 0, block # 1, count 22 ... 22 blocks read: OK

stmark2 $ md.b ${loadaddr} 255
40001000: fc bf df db ff db 2e 5e de ca 9a d3 0f e1 2f fe    .......^....../.
40001010: 77 df 37 dc af 95 ec 39 9c fb 7f df fd c0 f2 b5    w.7....9........
40001020: 3b eb ee 7f fd 36 ad c6 94 8f e6 47 70 7b 72 e3    ;....6.....Gp{r.
40001030: e3 af d6 7c ce 5f 5b dc ab 2b e3 0d f9 8d 93 a5    ...|._[..+......
40001040: a6 47 ff 75 b0 70 36 b7 7a bf dc 97 5b 7f af ff    .G.u.p6.z...[...
40001050: ba e9 df 2f 1e cf d5 b4 f5 ba f5 bc f7 3e e7 e7    .../.........>..
40001060: ec 96 e8 d7 ce 34 cf 7d f9 8e 31 9f dd 7c bb f6    .....4.}..1..|..
40001070: 7f fc f3 fc b9 9d fd d7 3f fd f1 b7 77 d1 e7 ff    ........?...w...
40001080: 57 56 ff 9f f9 ab a3 da cf 8b b7 5d 8a 7f 2c 7d    WV.........]..,}
40001090: 6b f3 fb bf ff bf 3e ef fd 6a a4 77 71 ce ef e7    k.....>..j.wq...
400010a0: 7f 9b 97 cb 55 99 57 bf 9f db be df c1 c6 82 3d    ....U.W........=
400010b0: ea 7b ee 59 df db 73 b3 c7 6f 2b 97 ff dc ee de    .{.Y..s..o+.....
400010c0: ff 38 2f 41 6b fd b8 f0 fb 1a ae d8 dc 67 7f ce    .8/Ak........g..
400010d0: be fc ce eb fa eb f2 cc d4 dd f5 dc 7e 3f fb bf    ............~?..
400010e0: 0e cf 7f 7f 57 89 7f ff bd 51 e8 dc be fc be fb    ....W....Q......
400010f0: 66 f7 9b a5 f9 fd e6 ff fe fc 8c 6b e1 51 91 e2    f..........k.Q..
40001100: e5 5c c4 cd f5 e8 8c ce 7e b3 ed dd f7 7f dd 36    .\......~......6
40001110: be ea ee ef a6 dd c3 bd e5 a7 eb f2 2c 4f 7d b5    ............,O}.
 

se poi hai il firmware, puoi riscriverla con comando "loady e mmc write". Problema e' capire dove scriverlo.

Vedi anche comandi "ls" di uboot per capire se ci sono partizioni / dati

stmark2 $ mmc dev 0
switch to partitions #0, OK
mmc0 is current device
stmark2 $ ls mmc 0:1
<DIR>       1024 .
<DIR>       1024 ..
<DIR>      12288 lost+found
         2504736 uImage
          339588 uRamfs
               0 test
         8112368 zImage

 

 

 

Modificato: da _angelo_
Link al commento
Condividi su altri siti

del_user_97632

PS. Se non hai cancellato /dev/mmcblk0boot0 e boot1 u-boot dovrebbe esserci. Collegati in console, li da qualche parte avrai 3 pin, tx RX e gnd

Modificato: da _angelo_
Link al commento
Condividi su altri siti

del_user_97632

Ho ripensato su anche alla logica del driver, del "massimo comune". Se il driver rileva che il controller funziona a 4 linee, settera' la emmc per funzionare a 4 linee dati, anche se interrogata la emmc dice che ne supporta 8. Dovrebbe andare, forse anche piu facilmete a 4 fili  che a 1.

 

Se riesci ovviamente cerca di intervenire da u-boot, che permette di scrivere su partizioni ext2/4. Ma, non di ripartizionare. Per cui se hai distrutto la tavola della partizioni dovresti riuscire a ricrearla con una scruttura RAW a all'offset specifico delal tavola delle partizioni. Poi c'e' da sperare pero' che tiu possa accedere alle partizioni perche la "directory" potrebbe essere rovinata. Nota, le partizioni nelle eMMC sono nell'area "user" non nelle boot. Ecco i comandi per leggere scrivere su partizioni ext2/4,

 

https://github.com/ARM-software/u-boot/blob/master/doc/README.ext4

 

A proposito di partizioni, ci sono quelle della emmc "fisiche", boot0 boot1 e "user data".

Le partizioni invece contenenti file system sono altra cosa, e tutte scritte nell'area "user" della eMMC (/dev/mmcblk0p1 /dev/mmcblk0p2 e compagnia).

 

Modificato: da _angelo_
Link al commento
Condividi su altri siti

C'e' molto da ragionare qui, mi sono letto anche un po' di una miniguida sui comandi di u-boot, tra cui c'e' il comando loadb che non e' chiaro come si usa ma potrebbe far al caso mio perche' da una scheda sana ho salvato su chiave usb il blocco delle partizioni, non ricordo bene come, poi anche il comando usb potrebbe servire, ma il fatto piu importante e' che mi sono visto i miei appunti su cio che ho fatto e risulta che dopo aver cancellato le partizioni, al riavvio della scheda non c'era piu nessun log, nemmeno cio' che precede l'avvio di u-boot, proprio zero come se fosse tutta la memoria azzerata per cui non so se ha senso collegarsi ancora in telnet dato che dovrei pure rimuovere il ponticello tra segnale reset e massa, cosa non difficile ma se e' inutile..

Link al commento
Condividi su altri siti

del_user_97632

No aspetta, nessun telnet. Console seriale. Tutte questi genere di schede hanno 3 pin per la console, magari trovi solo 3 pad, ma ci dovrebbero essere, eccetto casi eccezionali, almeno per lo sviluppo.

 

CPU di questo genere non hanno flash interna in genere, non ho tanto tempo ora per leggere il datasheet.

 

Un altra possibilita' per riscrivere u-boot se lo hai cancellato e' il jtag, o similare. 

 

 

al riavvio della scheda non c'era piu nessun log,

dove lo vedevi il log ? su schermo ?  se non parte il kernel difficile che tu veda messaggi. Ma u-boot probablmente parte lo stesso. Collegati alla console seriale.

 

loadb e' come loady che ti ho constigliato. E' piu facile tu abbia un terminale con ymodem che kermit.

Nota, u-.boot lo consosco bene, sono custode dell'archietettura m68k ma conosco anche la struttura generale (https://www.denx.de/wiki/U-Boot/Custodians

 

 

Modificato: da _angelo_
Link al commento
Condividi su altri siti

Abbiamo postato quasi in contemporanea, ora rispondo al penultimo post, non mi raccapezzo piu con le registrazioni dellle sessioni di shell che ho fatto, forse non ho salvato tutto mannaggia, comunque avevo salvato il blocco delle partizioni con un:

dd if=/dev/mmcblk0 of=/tmp/mnt/Ciccio.bin

piu o meno, in /tmp/mnt avevo montato la chiavetta drive usb, come vedi il descritttore mmcblk0 rappresenta il "disco" intero non le singole partizioni, ed e' un file di 4Gb, come la dimensione della flash stando a una specie di infosheet, all'inizio avevo collegato solo 1 linea dati poi seguendo il tizio di youtube che dice di aver dovuti collegarne 4 ne ho aggiunte 3 ma non e' li il problema, infatti non funziona, pero con 4 andrebbe piu veloce. Ho sbagliato dicendo telnet, sono connesso ovviamente un UART. Ma mi spieghi come mai il log di avvio mostrava scritte anche antecedenti alla scritta di U-boot [versione], e io come posso pensare di arrivare alla console di u-boot se nemmeno compare una sola riga di log?

Modificato: da Trans Istor
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...