1. Старт вторичного загрузчика SPL (Boot0)
При включении питания начальный загрузчик процессора BROM (встроенное загрузочное ПЗУ)
читает карту и ищет в её начале (по смещению 8 Kbyte = 16 блоков) сигнатуру eGON.BT0, которая является признаком начала загрузчика Boot0,
загружает его в память процессора и запускает.
Внимание ! Эта загрузка выполняется не в динамическую DRAM приставки, а во внутреннюю статическую
SRAM-память SoC H618, поскольку в первый момент DRAM (а она может быть разного типа и конфигурации) ещё не настроена
и пользоваться ей пока нельзя.
SRAM (Static Random Access Memory) - cтатическая оперативная память произвольного доступа.
В связи с тем, что в разных моделях приставок может использоваться RAM разного типа (DDR3,DDR4, LPDDR и пр.)
загрузчик boot0 также должен иметь несколько модификаций под каждый из типов памяти.
При этом конфигурационные параметры DRAM (тайминг и пр.), вероятно, прописаны в самом Bott0 и используются
для настройки памяти DRAM для загрузки в неё U-Boot и всех остальных компонентов прошивки.
Кстати, именно несоответствие содержащегося в образе прошивки загрузчика Boot0 имеющейся в приставке конкретной RAM
является главной причиной фатального исхода на самой ранней стадии загрузки прошивки.
Если сравнить строки лога dram_para с аналогичными параметрами в файле sys_config.fex,
который содержится в IMAGEWTY-образе прошивки, то мы обнаружим полное совпадение.
Из этого следует, что папраметры конфигурации памяти RAM (а также и другие параметры)
в процессе сборки блоба Boot0 извлекаются из файла sys_config.fex,
полный текст этого файла с перводом комментариев приведен по ссылке ниже ( для dram_para оставлены только значения для par=0).
Файл sys_config.fex
После установки параметров DRAM определяется емкость памяти и выполняется её тестирование.
DRAM CLK =648 MHZ
DRAM Type =3 (3:DDR3,4:DDR4,7:LPDDR3,8:LPDDR4)
Actual DRAM SIZE =2048 M
DRAM SIZE =2048 MBytes, para1 = 30fb, para2 = 8000000, dram_tpr13 = 6041
DRAM simple test OK.
Затем проверяется SD-карта:
***SD/MMC 0 init OK!!!***
И выполняется чтение с карты, распаковка пакета
boot-packаge
и переход к загрузке в DRAM и старту U-Boot, извлеченного из boot-packаge:
Loading boot-pkg Succeed(index=0).
[mmc]: b mmc 0 bias 4
Entry_name = u-boot
Entry_name = monitor
Entry_name = dtbo
Entry_name = optee
Entry_name = dtb
mmc not para
Jump to second Boot.
Лог: Старт вторичного загрузчика SPL (Boot0)
[76]HELLO! BOOT0 is starting!
[79]BOOT0 commit : 4b34f2890a
[82]set pll start
[84]periph0 has been enabled
[87]set pll end
[91]unknow PMU
[92]unknow PMU
[96]PMU: AXP1530
[100]vaild para:1 select dram para0
[104]dram_para[0]:0x288
[106]dram_para[1]:0x3
[108]dram_para[2]:0x3030303
[111]dram_para[3]:0xe0e0e0e
[114]dram_para[4]:0x1c12
[116]dram_para[5]:0x1
[119]dram_para[6]:0x30fb
[121]dram_para[7]:0x0
[123]dram_para[8]:0x840
[126]dram_para[9]:0x4
[128]dram_para[10]:0x8
[130]dram_para[11]:0x0
[132]dram_para[12]:0x0
[135]dram_para[13]:0x0
[137]dram_para[14]:0x0
[139]dram_para[15]:0x0
[142]dram_para[16]:0x0
[144]dram_para[17]:0x0
[146]dram_para[18]:0x0
[148]dram_para[19]:0x0
[151]dram_para[20]:0x0
[153]dram_para[21]:0x0
[155]dram_para[22]:0xc0000c05
[158]dram_para[23]:0x0
[161]dram_para[24]:0x0
[163]dram_para[25]:0x0
[165]dram_para[26]:0x33808080
[168]dram_para[27]:0x2f0007
[171]dram_para[28]:0xffffdddd
[174]dram_para[29]:0xfedf7557
[177]dram_para[30]:0x40
[179]dram_para[31]:0x0
[181]board init ok
[183]enable_jtag
[185]DRAM BOOT DRIVE INFO: V0.651
[188]the chip id is 0x2000
[191]chip id check OK
[214]DRAM_VCC set to 1500 mv
[220]read_calibration error
[226]read_calibration error
[232]read_calibration error
[238]read_calibration error
[244]read_calibration error
[250]read_calibration error
[256]read_calibration error
[263]read_calibration error
[269]read_calibration error
[275]read_calibration error
[278]retraining final error
[286][AUTO DEBUG]32bit,1 ranks training success!
[298]DRAM CLK =648 MHZ
[300]DRAM Type =3 (3:DDR3,4:DDR4,7:LPDDR3,8:LPDDR4)
[308]Actual DRAM SIZE =2048 M
[311]DRAM SIZE =2048 MBytes, para1 = 30fb, para2 = 8000000, dram_tpr13 = 6041
[324]DRAM simple test OK.
[327]rtc standby flag is 0x0, super standby flag is 0x0
[332]dram size =2048
[335]Use rtc to store dram tuning para
[339]card no is 0
[341]sdcard 0 line count 4
[343][mmc]: mmc driver ver 2021-10-12 13:56
[348][mmc]: b mmc 0 bias 4
[356][mmc]: Wrong media type 0x0
[359][mmc]: ***Try SD card 0***
[372][mmc]: HSSDR52/SDR25 4 bit
[375][mmc]: 50000000 Hz
[377][mmc]: 30448 MB
[379][mmc]: ***SD/MMC 0 init OK!!!***
[479]Loading boot-pkg Succeed(index=0).
[483][mmc]: b mmc 0 bias 4
[485]Entry_name = u-boot
[494]Entry_name = monitor
[497]Entry_name = dtbo
[500]Entry_name = optee
[504]Entry_name = dtb
[508]mmc not para
[509]Jump to second Boot.