Я новичок в u-boot, и у меня есть специальная плата на основе платы Waveshare CoreH7. частота моего кристалла (HSE) составляет 8 МГц, и я хочу иметь частоту ядра 400 МГц с использованием PLL1. согласно этой документации, я должен добавить приведенный ниже код в мой файл board.dts.
rcc {
vco1@58024430 {
#clock-cells = <0>;
compatible = "stm32,pll";
reg = <0>;
st,clock-div = <4>; // 8MHz divided by 4 = 2MHz
st,clock-mult = <400>; // (2MHz * 400)/2 = 400MHz
st,frac-status = <0>;
st,frac = <0>;
//st,vcosel = <1>;
st,pllrge = <1>;
};
};
Итак, теперь моя частота должна быть 400 МГц. но это не так!
Я установил уровень ведения журнала uboot на 8, чтобы просмотреть все журналы. и после проверки журналов вывода на последовательном терминале я понял, что u-boot даже не заботится об этих параметрах "vco1" в моем дереве устройств. поэтому я решил взглянуть на драйвер r cc, и когда я увидел код, я понял, что параметры pll определены в самом драйвере, и драйвер даже не заботится о тех параметрах, в которые я их написал мое дерево устройств. это часть драйвера stm32h7 в 329-й строке:
/*
* OSC_HSE = 25 MHz
* VCO = 500MHz
* pll1_p = 250MHz / pll1_q = 250MHz pll1_r = 250Mhz
*/
struct pll_psc sys_pll_psc = {
.divm = 4,
.divn = 80,
.divp = 2,
.divq = 2,
.divr = 2,
};
Я не могу понять, что здесь происходит! Насколько я знаю, драйвер должен читать эти параметры из дерева устройств. Итак, если пользователь должен записать эти параметры в дереве устройств, почему драйвер имеет эти значения в нем, когда он может читать их из дерева устройств?