31-iFix團隊10月26號現場培訓課程分享(五)

31-iFix團隊10月26號現場培訓課程分享(五)

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、復位模式選擇,復位模式分別有外部復位模式和內部復位模式兩種。

31-iFix團隊10月26號現場培訓課程分享(五)

上圖為比較常見的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印製板點位圖,供大家維修時參考。

31-iFix團隊10月26號現場培訓課程分享(五)

以上為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電路,總線初始化失敗就檢查總線外掛相關電路,不能升級就檢查升級標誌有沒有出現,維修智能電視主板就是這麼簡單!


分享到:


相關文章: