This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM4378:从SPI闪存引导时发生AM4378错误

Guru**** 1478875 points
Other Parts Discussed in Thread: AM4372, SEGGER, AM4378
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1066862/am4378-am4378-error-in-booting-from-spi-flash

部件号:AM4378
线程中讨论的其他部件:TPS6.5218万AM4372TPS6.2362万SEGGER

您好,

  我的目标是从SPI闪存引导,但我收到此错误-->>  

=> SF探头
总线0无效(err=-19)
无法初始化0:0处的SPI闪存(错误-19)
=>  

SPI闪存: AT45DB161E

无法在代码中找到驱动程序,您能否也提供AT45DB161E芯片的驱动程序?

请帮我解决这个问题,我是这方面的新发展。 主板从SD卡成功启动。

我正在尝试访问此链接-  SPI. U-Boot—用于3.1 引导的处理器SDKLinux文档。 在开始使用此链接之前是否有任何其他前提条件。 BuildRoot用作基本代码。

Thx,

Kiran。

e2e.ti.com/.../output_5F00_2022_2D00_01_2D00_05_5F00_22_2D00_41_2D00_34.log

DTS 快照:


&spi0{
pinctrl-names ="default";
pinctrl-0 =<&spi0_pins>;
状态="正常";
TI,SPI-num-cs =<3>;
/* D0表示MOSI,D1表示Miso */
TI,windir-d0-out d1-in =<1>;

/* 2MiB闪存。 包含U-boot。 */
at45db161e@0{
兼容="Atmel,at45","Atmel,DataFlash";
reg =<0>;
/* OMAP SPI控制器的最大速度为48MHz。 闪存可以处理70MHz。 */
SPI-max-frequency =<100万>;

分区{
兼容="固定分区";
#address-cells =<1>;
#size-cells =<1>;

SPL{
REG =<0x0 0x2万>;//128KiB
只读;
};

uBoot{
REG =<0x2万 0x8万>;//512KiB
只读;
};

环境{
REG =<0x0A0000 0x0.2万>;//8KiB
};

额外{
REG =<0x0A2000 0x15e000>;//1400KiB
};

};
};

};

Dtsi 快照:


目标模块@3万{/* 0x4803万,ap 65 08.0 */
兼容="ti,sysc-omap2","ti,sysc";
ti,hwmods ="spi0";
REG =<0x3万 0x4>,
<0x3.011万 0x4>,
<0x3.0114万 0x4>;
reg-names ="rev","sysc","syss";
TI,sysc-mask =<(SYSC_OMAP2_CLOCKACTIVITY |)
SYSC_OMAP2_SOFTRESET |
SYSC_OMAP2_AUTOIDLE)>;
TI,sysc-sidle =<SYSC_IDE_FORT>,
<SYSC_IDLE_NO>,
<SYSC_IDLE_SMART>;
TI,syss-mask =<1>;
/*域(P, C):ppwrdm, l4ls_clkdm */
Clocks =<&l4ls_clkctrl AM4_L4LS_SPI0_CLKCTRL 0>;
Clock-names ="fck";
#address-cells =<1>;
#size-cells =<1>;
范围=<0x0 0x3万 0x1000>;

spi0:SPI@0{
兼容="ti,am4372-mcspi","ti,omAP4-mcspi";
REG =<0x0 0x400>;
中断=<GIC_SPI 65 IRQ_TYPE_LEVE_HIGH >;
#address-cells =<1>;
#size-cells =<0>;
状态="已禁用";
};
};

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Kiran,
    给定SYSBOOT[4:0]=0.001万 =>按顺序的引导列表:SPI USB_MS MMC0 USB_CL。
    在bootrom跟踪向量中记录SPI/USB_MS/MMC0/USB_CL执行标志是正常的。
    在SPL由bootrom从SPI复制到SRAM后,bootrom将执行移交给SPL。 从SPL条目到在board_init_f()中添加的旋转循环,有代码执行窗口T_WINDOW。 如果由于某种未知原因,SPL代码在T_Window期间崩溃,则会出现bootrom重新启动并通过引导列表继续搜索过程的情况... 当您连接JTAG并停止SoC时,代码将位于bootrom内存空间中。

    为了帮助缩小方案的范围,我想将自旋循环移动到第一个SPL指令。
    即使手动修改SPL二进制代码也是可行的(请参阅我的早期答复)。

    最佳,
    -洪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Hong:

    在您的案例中,代码执行 将持续到0x402F0400。

    您的修改类似于:0x402F0400 b 0x402F0400

    在我的案例中,代码执行 无法达到 ( AM4378) 0x402F4000,因此我想一些 修改 (如0x402F4000 b 402F4000)也没有帮助。

    此外,请告诉您从何处编辑垃圾箱,因为当我在编辑器中打开时,它会显示一些编码符号,即使在CCS中,我也无法编辑它。

    Thx,

    Kiran。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Kiran,
    在我之前的答复中,我在生成SPL二进制文件后手动修改了SPL二进制文件。
    “402F0400 EA0万F b 0x402F0444”=>“402F0400 EAFFFFFFFE b 0x402F0400”
    或者,您可以修改下面列出的一行汇编代码,然后尝试。

    "$u-boot/arch/arm/lib/vectors.S"
            .macro ARM_VECTORS
    #ifdef CONFIG_ARCH_K3
    	ldr     pc, _reset
    #else
    	b	reset					/* change the line to "b	_start"	*/
    #endif

    最佳,

    -洪