EMMC有四個區:boot1、boot2、user、EXT_CSD,理論上來講,引導程序放入boot區,主程序寫入user區,具體的要視方案而定,MTK和RTD芯片方案引導在user區,Mstar方案主板的引導起始地址在boot1區,最新的MSD6A838方案boot1區和boot2區都有用到,boot1區為引導起始地址,boot2區為Mstar魔法鑰匙,也是目前為止,最高級的加密算法,不過這些都不用擔心,RT809H輕鬆解決!
說到EMMC的四個區,不得不說的就是EXT_CSD,EXT_CSD為EMMC擴展寄存器,對於維修行業來說,它的主要作用有三個:
1、啟動位置選擇,我們都知道EMMC有三個區,分別為:boot1區、boot2區和user區,mboot從那個區開始?或者說mboot開始位置在哪個區?Mstar單EMMC芯片方案mboot開始位置在boot1區,而MTK單EMMC芯片方案mboot開始位置在user區初始位置,所以啟動位置選擇非常重要;
2、啟動位寬選擇,目前來說啟動位寬有三種8bit、4bit、1bit,另有高速/標準速度選擇位,組合起來就有6種;
3、復位模式選擇,復位模式分別有外部復位模式和內部復位模式兩種。
上圖為比較常見的EMMC與主芯片CPU通訊電路,一片EMMC的實物看上去很多引腳,實際上真正工作的就這麼幾個引腳,要想電路正常工作,必須滿足幾個條件:
1、VCC,3.3V供電,也是EMMC的主供電;
2、VCCQ,也叫VCCIO,這個電壓有3.3V和1.8V兩種,這個電壓是由CPU的EMMC總線的VCCIO電壓值決定的,也就是說CPU的EMMC總線的VCCIO為3.3V,EMMC的VCCQ就必須為3.3V,如果CPU的VCCIO為1.8V,EMMC的VCCQ就必須為1.8V,這也是用編程器飛線讀寫時,比較重要的一個選擇項,選擇錯誤就可能讀寫出錯,離線讀寫時候就不存在這個狀況,默認3.3V即可。
3、RST_N,復位,低電平復位,工作起來後為高電平。
4、Flash選擇,上圖電路為3.3V通過RM101送入CPU識別,高電平為選擇EMMC。
5、CLK,時鐘。
6、CMD,控制指令。
7、D0-D7,8位數據通訊。
再附上一張EMMC印製板點位圖,供大家維修時參考。
以上為EMMC的工作條件,也是維修時候的重要檢測點,前面說到,硬件是軟件的載體,所以說要想軟件流暢的運行,必須保證硬件的可靠。在維修中,不管是軟件故障還是硬件故障,我們通過打印信息配合分析,都能很快找到故障點。
有朋友說到打印信息太難了,主要是不認識英文,其實不然,看打印信息主要是看它運行的節點標誌,很多維修高手也不精通英文,只會三個單詞,yes,no,ok,但是他們也會看打印信息。
前文說到,整個操作系統軟件運行的順序為引導程序,內核程序,主程序,所以說從大的方面我們要分清楚這三個節點,引導是否運行完?內核是否啟動?主程序是否啟動?
下面我們先找一篇MT5505的打印信息給大家看看打印的節點。
017-09-25,11:58:34
COM6,BaudRate:115200 bps, RXD: VGA->11,TXD: VGA-> 4, Printed by RT809H:
Boot- 初始化DDR
DRAM Channel ACalibration.
Byte 0 :Gating(2 ~ 47), Size=46, Mid=26, Set=16.
Byte 1 :Gating(2 ~ 42), Size=41, Mid=24, Set=14.
Byte 2 : Gating(2~ 62), Size=61, Mid=34, Set=24.
Byte 3 :Gating(2 ~ 57), Size=56, Mid=31, Set=21.
HW Byte 0 :DQS(10 ~ 39), Size 30, Set 23, HW_Set 26.
HW Byte 1 :DQS(7 ~ 37), Size 31, Set 21, HW_Set 24.
HW Byte 2 :DQS(9 ~ 40), Size 32, Set 24, HW_Set 25.
HW Byte 3 :DQS(9 ~ 38), Size 30, Set 23, HW_Set 24.
DRAM A Size =512 Mbytes.
Boot 初始化EMMC
Start Pmain
0x0000a000
EMMC boot
CID:0x0ae472cb
:0x30109196
:0x30344739
:0x11010030
LZHS addr:0x00100040
LZHS size:0x00099eb8
LZHS checksum:0x000000bc
Boot
Start Lmain 初始化總線
MT5880 BootLoader v0.10
Boot reason: A/Cpower on!!
Load VGAinternal EDID.................
Load HDMI internal EDID.................
CEC Physical offset 159
HDMI1 Physicaladr 0x10
HDMI1 PA 0x10
HDMI1 checksum0x52
HDMI2 PA 0x10
HDMI2 checksum0x52
HDMI3 PA 0x20
HDMI3 checksum0x42
HDMI4 PA 0x30
HDMI4 checksum0x32
SIF_Master0: newdesign
IR DATA register: 0x 0
Boot reason: A/Cpower on!!
T8032 init A/Con case loader stage...
Load T8032 FW(addr: 0x d6af60, size: 24576)success!!
T8032 FWversion: 84
T8032 change toloader stage...
LDR_FlashCopy0xf010 0x4d000 0x80
1st MAC in EEPis valid (64:88:ff:2e:65:da)
1st :(64:88:ff:2e:65:da)
2nd :(ab:3e:0f:52:c6:cf)
Boot reason: A/Cpower on!!
Boot reason: A/Cpower on!!
Boot reason: A/Cpower on!!
Boot reason: A/Cpower on!!
Disable VGAwakeup
GPIO_MtkLedCtrlFunc_eLedStatus=2
---standby_EEPDTV_GetCfg, bLedOnOff = 0x1!!
==Standby (待機標誌)
DRAM Channel ACalibration.
Byte 0 :Gating(2 ~ 47), Size=46, Mid=26, Set=16.
Byte 1 : Gating(2~ 42), Size=41, Mid=24, Set=14.
Byte 2 :Gating(2 ~ 57), Size=56, Mid=31, Set=21.
Byte 3 :Gating(2 ~ 52), Size=51, Mid=29, Set=19.
HW Byte 0 :DQS(10 ~ 38), Size 29, Set 23, HW_Set 26.
HW Byte 1 :DQS(7 ~ 37), Size 31, Set 21, HW_Set 24.
HW Byte 2 :DQS(9 ~ 40), Size 32, Set 24, HW_Set 25.
HW Byte 3 :DQS(9 ~ 39), Size 31, Set 24, HW_Set 24.
DRAM A Size =512 Mbytes.
Boot
Start Pmain
0x0000a000
EMMC boot
CID:0x0ae472cb
:0x30109196
:0x30344739
:0x11010030
LZHSaddr:0x00100040
LZHSsize:0x00099eb8
LZHSchecksum:0x000000bc
Boot
Start Lmain
MT5880 BootLoader v0.10
SIF_Master0: newdesign
IR DATA register: 0x 0
T8032 change toloader stage...
LDR_FlashCopy0xf010 0x4d000 0x80
1st MAC in EEPis valid (64:88:ff:2e:65:da)
1st :(64:88:ff:2e:65:da)
2nd :(ab:7e:0f:52:c6:cf)
PDWNC_Init
GPIO_MtkLedCtrlFunc_eLedStatus=1
Enable Ledblinking (gpio_idx 201, on_value 1, period 20, type: 80)
USB0: Set GPIO64= 1.
USB1: Set GPIO64= 1.
USB2: Set GPIO61= 1.
Do USB upgrade 升級標誌
USB: Vbus turnup time = 369 ms, Max =900 ms.
No USB device.
USB upgrade stop
eepNptv offset:0x260, EEP_BOOT_LOGO_INDEX offset: 0x91
Read boot logoindex from eeprom: 0, 0x01
Load boot logoindex: 0
Loader_ReadMsdc(14,0, 0x0d000000, 1048576)
Find panel index106 from EEPROM
Translate panelindex to 106
u4Offset == 0x70
Calc Flashpanelattrib checksum =0xff
[xh_dbg] selectflash panel's base data
Calc Flashpanelex_attrib checksum =0xffffffff
[xh_dbg] selectflash panel's extra data
[hhhxxx] panel_table.c
[hhhxxx] LoadProductIndex line 7690
Find product index 45 from EEPROM
[xh_pnl_drv]set CHProductTypeIndex = 45
---------- [SA7]vErrorHandleInit ----------
[SA7] Errorhandling init
[SA7] PANEL_GetPanelWidth=0x780,PANEL_GetPanelHeight=0x438 , 加載屏信息
wDrvGetOutputHTotal=0x898 ,wDrvGetOutputVTotal=0x465
[SA7]PANEL_GetHTotalMax=0xa60, PANEL_GetHTotalMin=0x870, PANEL_GetVTotalMax=0x5c8,PANEL_GetVTotalMin=0x44c
[SA7]PANEL_GetPixelClkMax=164000000, PANEL_GetPixelClkMin=100000000
[SA7] PANEL_GetPixelClk60Hz= 0x8d9ee20
---------- [SA7]vErrorHandleSetByTiming ----------
[SA7]u2HSyncWidth=260, u2HSyncStart=1930, u2VSyncWidth=26, u2VSyncStart=1094
---------- [SA7]vErrorHandleSetByTiming end----------
---------- [SA7]vErrorHandleSetByPanel end----------
[SA7] vDDDSInit
---------- [SA7]vErrorHandleSetByTiming ----------
[SA7]u2HSyncWidth=30, u2HSyncStart=1936, u2VSyncWidth=3, u2VSyncStart=1119
---------- [SA7]vErrorHandleSetByTiming end----------
[LVDS]u4Freq=148500000
vDrvSetOCLKClockSchemaInit.
[SA7]_fgVopllUseDDDS = True
[SA7] u4Syspll =648000000
[LVDS] VOPLLInitialize successful !
befor jpegdecode!
jpeg_decode(0x0d000000,1048576, 0x0e000000, 1048576, 0x0f000000, 1920, 1080)
Color:14BmpAddr:0x0f000000 Width:1920 Height:1080
---Panel 1920 x1080
LDR_OsdDisplay(14,0x0f000000, 1920, 1080) return 0
Flash load lzhsheader from 0x80000 to dram(0x15029d0), size=2048拷貝引導到DDR
Decompressionuboot to 0x00800000...
Flash load imagefrom 0x80000 to dram(0x15029d0), size=0x3949a
secure boot ok 拷貝引導完成
LZHS start
LZHS done
Startingimage...
運行引導
U-Boot2011.12.12 (Feb 17 2016 - 10:46:27)
DRAM: 401 MiB
WARNING: Cachesnot enabled
MMC: HOST 1
Dev Num: 0,Timing Position: 0, Sample Edge: 0x00
11010030:30344739:30109196:0AE472CB
id1:00303034id2:47393010
eMMC Name:UNKNOWN
Dev Num: 0,Timing Position: 1, Sample Edge: 0x00
Dev Num: 0,Timing Position: 2, Sample Edge: 0x00
: 0
0.0.0.0
In: serial
Out: serial
Err: serial
Net: Net Initialization Skipped
No ethernetfound.
Hit any key tostop autoboot: 0
## Bootingkernel from Legacy Image at 00007fc0 ...拷貝內核到DDR
XIP Kernel Image ... OK 拷貝完成
OK
Starting kernel...
加載內核
timekeeping_initdone
mmc0: 5880
at 0xf006d000 irq 100 data mode 3 Optimization
mmc1: 5880
at 0xf0012000 irq 60 data mode 3
init:====~~~~starting 'ueventd'
special_arg:00000002
test mmc...
init: init:cannot open '/initlogo.rle'
Unable toregister pmem driver!
init: ====~init:I read console
===
init: =================appstore running======================
init: notcom.changhong.appstore.apk, or sdk appstore changed !
init: so copy/system/apk/com.changhong.appstore.apk to /data/app
Password: init:I read console
===
init:===============check tent================
init: the nv is0
init: the cv is1
init:====~~~~starting 'servicemanager'
init:====~~~~starting 'vold'
init:====~~~~starting 'uuid_init'
init:====~~~~starting 'netd'
init:====~~~~starting 'debuggerd'
init:====~~~~starting 'ril-daemon'
init:====~~~~starting 'zygote'
init:====~~~~starting 'drm'
init:====~~~~starting 'media'
init:====~~~~starting 'dbus'
init:====~~~~starting 'installd'
init:====~~~~starting 'keystore'
init:====~~~~starting 'vdevcreate'
init:====~~~~starting 'sensor-daemon'
init:====~~~~starting 'insmod'
init:====~~~~starting 'pre-init'
init:====~~~~starting 'post-init'
init:====~~~~starting 'dtv-svc'
init:====~~~~starting 'chtvos'
init:====~~~~starting 'cmddaemon'
init:====~~~~starting 'pppoe-dial'
init:====~~~~starting 'uploadservice'
init:====~~~~starting 'addvirtualnet'
==> pre-init start 內核加載完成,初始化開始。
2.11 3.10
chmod:/perm/voice: No such file or directory
mknod:/dev/mali: File exists
mknod: /dev/ump:File exists
Setting upswapspace version 1, size = 104853504 bytes
UUID=848eaee0-a1de-4c2c-ba23-85848ba71c1d
{At00:00:2:415}<<<<
dtv_svc_main:fbm phy addr = 1a170000, share mem addr = 400b6000, vir addr = 0, size = 0
{At00:00:2:485}<<<<
{At00:00:2:537}<<<<
SC_FCT_0:sched_getparam 708 error -1
SC_FCT_0:sched_getparam 711 error -1
drv_init as 0x39model
drv_init as EUmodel
MTDRVCUST_BootupCheck()fail, ret=-1
[MTCI0]MTCI_Init : 0
TVDMsgCtrl: NRL:60/40, PER:100/90
[1;31m TVOS first line [0m
x_drv_init end!!
{At00:00:3:808}<<<<
{At00:00:3:808}<<<<
{IOM} UARTthread inited.
gl_initMTAL_Init!
gl_initMTAL_Init complete!
gl_initMTGFX_GetBufferPartition complete!
gl_initgl_mem_manager_init complete!
gl_initMTOSD_RGN_LIST_Create complete!
gl_initMTOSD_RGN_Create complete!
[* GL DFB *]Create plane (ON window (Shared)) :101170f
{At00:00:4:247}<<<<
{CI_glue}:ci_eng_init
88888888888888PHYSICAL_Init() entered 888888888888888
88888888888888ITC_Init() entered 888888888888888
88888888888888PHYS_DRVOpen() entered 888888888888888
88888888888888STB_CIOpen() entered 888888888888888
[MTCI0]MTCI_Init : 0
88888888888888STB_CIOpen() ended 888888888888888
88888888888888PHYS_DRVOpen() entered 888888888888888
{At00:00:4:317}<<<<
{DT} Real TimeClock is available on this system.
MTDRVCUST_OptQuery()fail, ret=-1
{At00:00:4:321}<<<<
{At00:00:4:347}<<<<
wsfNotifyAutoDetSrc(u1CurrentDetSrcIdx=9, sts=1)
NotifyAutoDetSrc(av1(2),av2(1),ypbpr1(1),HDMI1(1),HDMI2(0),HDMI3(1),HDMI4(1)VGA(0))
======TypeProductIndex=TYPE_LED42C2000i=========
由於整篇打印信息太長,鑑於篇幅原因,後面的信息沒有貼上來。在現場培訓時講了兩篇打印,長虹MT5505芯片方案和樂視MSD6A938方案,實際上軟件架構基本一樣,只是引導部分順序有些差異,這並不影響我們去了解整篇打印信息的節點。
從整個軟件架構理解,加載完Linux 內核後,引導才會移交控制權,也就是說加載完內核後引導才會停止,實際上,引導程序指引啟動內核時,不管內核是否能正常啟動,作為引導程序它已經無能為力了,所以說,啟動內核的標誌,可以算是引導程序正常的一個標誌,也就是打印信息裡面的Starting kernel...標誌,目前幾大芯片廠家的標誌都比較統一,大家認這個標誌就可以。在維修中,看到這個標誌,就不要去輕易懷疑引導程序了。
如果看到Starting kernel...這個標誌後,出現卡LOGO,或者出現LOGO後黑屏等等,都屬於主程序運行失敗,維修智能機主板實際上也是排除法,先軟件後硬件,如果U盤升級不好,那就可能是Flash自身故障,或者軟件運行的硬件有故障(常見為DDR自身,DDR通訊,主芯片),iFix君建議用RT809H完全擦除Flash,再重新寫入,排除軟件問題後,再去檢修硬件。
引導程序的節點也是一樣,DDR初始化失敗就檢查DDR電路,EMMC初始化失敗就檢查EMMC電路,總線初始化失敗就檢查總線外掛相關電路,不能升級就檢查升級標誌有沒有出現,維修智能電視主板就是這麼簡單!
閱讀更多 iFix愛修 的文章