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.

关于AM335X的启动问题

Other Parts Discussed in Thread: AM3358

你好:

      我看了AM335X的TRM,有些疑问(第一次接触ARM):

        1.  通过设定SYSBOOT可以指定启动方式, 对于这个启动方式,是不是只是指MLO的存储地方,而不是指u-boot.img和ulmage的地方。

             例如,我设定AM335X从NOR启动,那么等AM335X从NOR启动后,那么我是否可以指定AM335X从SD卡,或是NAND FLASH,或是UART,或是从网口等地方获取u-boot.img.  对于ulmage也是类似的?(如果是这样的,是不是只要在编译U-BOOT的时候,指定一下U-BOOT需要从哪里启动就可以了?)

        2. 对于AM335X,之所以需要用到MLO,是因为内部的RAM不够大,那么如果我设定为XIP的模式,或是设定为外部快速启动的模式,是不是可以不用编译出MLO,而直接用u-boot.img引导内核?

       3 我想问下,对于XIP和快速外部启动,有什么不一样的吗?他们差别大吗?

        4. 对于编译出来的u-boot.bin和u-boot.img,两个文件,有什么不同?我看了就多了一个64字节的头(主要是写函数的load地址,入口地址,文件名等),那么什么时候用到u-boot.img,什么时候用到u-boot.bin?(我目前是从SD卡启动,用的是u-boot.img,但是看论坛上,有些烧入nor flash的,用的是u-boot.bin).

        5. 你们有没有专门介绍U-BOOT启动AM335X的文档?(有的话,麻烦给个链接)。

            谢谢。

  • 1.一般MLO和u-boot是放在一起的,之后的uImage启动方式,可以从u-boot参数进行配置。如果将MLO加载u-boot的方式修改得可变,理论上也是可以不用将二者放在一起的。

    2.上电后首先启动的是片上的RBL,RBL引导MLO上片上RAM,而片上RAM比较小,所以需要MLO引导u-boot到DDR,单独的u-boot文件太大,片上RAM放不下

    3.你已经说了区别了,一个在片上RAM,一个在DDR,结合第2条的引导方式,MLO和u-boot都会进行一些初始化的工作,两者初始化模块有区别,也有相同的地方,所以之前的很多平台SDK中MLO/x-loader/ubl和u-boot是分开在两个文件夹下各自编译的,后来整合到一个文件夹下编译出两个文件;如果希望快速从片上启动,而且只是利用IC部分模块功能,可以将这些模块的初始化放在MLO中,这样就不需要u-boot,也不需要uImage和系统了,启动速度最快,相对也会更稳定

    4.u-boot.bin是不能被MLO/UBL/X-Loader给BOOT起来的,因为u-boot.bin没带有文件头header,而u-boot.img是可以被MLO/UBL/X-Loade给BOOT起来;而很多平台的davinci_uboot.bin是经过u-boot自带的mkimage处理的,所以可以被MLO/UBL/X-Load boot起来,同时u-boot.bin可以被TI提供的uart_load.exe 和uartapp.bin 软件方式(soft boot)启动起来

    5.还有什么比TI的wiki更丰富的呢:

    http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User's_Guide

  • 1.一般都是放在一起的。但是不是必须的。TI自己的代码都是用的放在一起的方式。否则要改一下。

    2.可以的。不过更建议你省掉Uboot,而不是MLO

    3.NOR毕竟贵一些,容量也小点了吧。

    4烧程序都是读进去再写的,中间会转换,啥格式的都能见到。

    5sitara-linuxsdk-sdg-06.00.00.00.pdf这个文档里面有

  • kooking 说:

    1.一般MLO和u-boot是放在一起的,之后的uImage启动方式,可以从u-boot参数进行配置。如果将MLO加载u-boot的方式修改得可变,理论上也是可以不用将二者放在一起的。

    2.上电后首先启动的是片上的RBL,RBL引导MLO上片上RAM,而片上RAM比较小,所以需要MLO引导u-boot到DDR,单独的u-boot文件太大,片上RAM放不下

    3.你已经说了区别了,一个在片上RAM,一个在DDR,结合第2条的引导方式,MLO和u-boot都会进行一些初始化的工作,两者初始化模块有区别,也有相同的地方,所以之前的很多平台SDK中MLO/x-loader/ubl和u-boot是分开在两个文件夹下各自编译的,后来整合到一个文件夹下编译出两个文件;如果希望快速从片上启动,而且只是利用IC部分模块功能,可以将这些模块的初始化放在MLO中,这样就不需要u-boot,也不需要uImage和系统了,启动速度最快,相对也会更稳定

    4.u-boot.bin是不能被MLO/UBL/X-Loader给BOOT起来的,因为u-boot.bin没带有文件头header,而u-boot.img是可以被MLO/UBL/X-Loade给BOOT起来;而很多平台的davinci_uboot.bin是经过u-boot自带的mkimage处理的,所以可以被MLO/UBL/X-Load boot起来,同时u-boot.bin可以被TI提供的uart_load.exe 和uartapp.bin 软件方式(soft boot)启动起来

    5.还有什么比TI的wiki更丰富的呢:

    http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User's_Guide

    你好!

             ,很谢谢你的答复,但是,我还是不太明白:

            1. 对于第一个问题,我想也不太多人会把MLO和u-boot.img分开,我只是想确认一下,这样是否可行?

                因为我在看U-BOOT的时候,在/arch/arm/include/asm/arch-am33xx/spl.h的文件夹下面,有以下:

                #define BOOT_DEVICE_XIP        2
                #define BOOT_DEVICE_NAND 5
                #define BOOT_DEVICE_MMC1 8
                #define BOOT_DEVICE_MMC2 9 /* eMMC or daughter card */
                #define BOOT_DEVICE_SPI  11
                #define BOOT_DEVICE_UART 65
                #define BOOT_DEVICE_USBETH 68
                #define BOOT_DEVICE_CPGMAC 70
                #define BOOT_DEVICE_MMC2_2      0xFF

                我想知道,这是不是就是设定u-boot.img的引导设备,还是说,在MLO开始的时候,就把SYSBOOT的状态存储了起来,等到MLO执行完以后,在根据SYSBOOT之前保存的SYSBOOT状态,来决定从哪里寻找u-boot.img,也就是说,u-boot.img的引导设备其实也是按SYSBOOT的设定(同MLO的引导设备一样?)。

    2. 对于第二个问题,在TRM里面,有几个流程图对其进行了解析:

        a). 对于”Fast External Boot", 在4113页(Figure 26-7.)里面,只是说RBL只对GPMC进行了初始化,接着直接跳到了0x08000000执行。

        b).对于XIP,在第4114页(Figure 26-8.)里面,有个流程图,它指明了如果不是XIP,才把MLO拷贝到内部RAM里面,而对于是XIP的,就直接跳去执行。

       依据上面两点,我想,XIP和”Fast External Boot", 都不需要拷贝代码到内部RAM,那么是否可以省略掉MLO?

    3. 对于第三个问题,我有点不太清楚,对于XIP和”Fast External Boot"的执行,不是都是在GPMC上吗(地址0X0-0X1FFFFFFF),为什么一个在RAM,一个在DDR?

    4. 清楚了。

    5.清楚了。

    第一次接触ARM,有些问题可能比较奇葩,还请见谅。

  • 你好!

            很谢谢你的答复

    1. 对于第一个问题,我想我明白了,谢谢。

    2. 你的意思是说:我可以用MLO来引导ulmage,而可以不用u-boot.img.

    3. XIP和快速外部启动不是都是用到NOR flash吗?那么XIP和快速外部启动的区别是什么?

    4. 对于第四点,你意思是不是,不管你是u-boot.bin还是u-boot.img,在烧写的时候,他们都会被转化为一样的格式,都被转化为u-boot.bin?

  • 请问在MLO初始化阶段是如何检测到DDR3或者Nandflash处于失效状态的?如果检测到DDR3或者Nandflash处于失效状态请问处理器如何处理?这时可以作为单片机来使用吗?例如这时候如果采用片内RAM把CPU作为单片机来使用可以吗?

    如果DDR3或者Nandflash处于失效状态,把AM3358作为单片机来使用,为了充分利用处理器硬件资源,不至于整块板子废掉!有好的解决方案吗?

  • 1. DDR是可以配置的,可以查看下面两个连接:

       http://processors.wiki.ti.com/index.php/AM335x_DDR_PHY_register_configuration_for_DDR3_using_Software_Leveling

    http://processors.wiki.ti.com/index.php/AM335x_EMIF_Configuration_tips

    2. 怎么处理,取决于您所用的os。

  • os:linux

    请问在MLO初始化阶段是如何检测到DDR3或者Nandflash处于失效状态的?请问如果检测到DDR3失效了,如何处理?

    请问AM3358评估板(TMDSSK3358)只有4路LED GPIO,如果我需要多路GPIO如何处理?(包括压力传感器8个数字I/O GPIO输入;2路模拟输出led和激光灯;2路模拟输入)

  • 这个页面无法打开?如何解决啊?

    Initialization Sequence

    • The best source for proper initialization sequence is the SPL source code, which can be found from TI's Linux Software Development Kit forAM335x.
    • http://software-dl.ti.com/dsps/dsps_public_sw/am_bu/sdk/AM335xSDK/latest/index_FDS.html
    • Not Found

      The requested URL /dsps/dsps_public_sw/am_bu/sdk/AM335xSDK/latest/index_FDS.html was not found on this server.

  • sddsdssd ssdsd 说:

    os:linux

    请问在MLO初始化阶段是如何检测到DDR3或者Nandflash处于失效状态的?请问如果检测到DDR3失效了,如何处理?

    请问AM3358评估板(TMDSSK3358)只有4路LED GPIO,如果我需要多路GPIO如何处理?(包括压力传感器8个数字I/O GPIO输入;2路模拟输出led和激光灯;2路模拟输入)

    1. 没有机制去检查DDR是否正常工作,只是根据你设定的配置,配置DDR,然后用这个DDR,如果发现系统不稳定,很可能是DDR没有正常工作。

    2. GPIO 你看看是否有引出来的,如果没有,最好你自己做板子了,或者买个beaglebone black

  • MLO被搬运到OCMC的时候,u-boot,kernel还在SD卡里,所以和系统没有任何关系;当u-boot被搬运到DDR3的时候肯定会check是否加载成功,所以你所说的没有机制去检查DDR是否正常工作是错误的;扩展GPIO完全可以通过串口来解决的,请给出明确的解决方案。

  • 1. MLO不会去检查DDR是否正常,直接读取SD卡上的uboot,然后往DDR里面写,所以,如果DDR没有配置好,这里就会挂住

    2. 你可以配置pinmux,把串口配成GPIO,您说的明确方案,要怎么个明确法?

  • pinmux如何使用?如果在win7  64位系统下,可以列举一个如何通过pinmux来配置am3358 EVM SK下UART的例子吗?多谢~

    请问这个pinmux工具只是在它本身里面配置好了,可是kernel GPIO driver不知道啊?

  • 您的这些问题所表明的思路是很对的,我觉得您可以在ti.com搜下这个工具用用看,然后,看看kernel的board file看看怎么配置的,最好也看看technical reference manual 中的第九章。

  • 非常感谢您的及时回复,太给力了,可以把具体链接发下吗?多谢~

  • 搜索一下吧,这个不难。

  • flash有8位或者18位的,而MMC数据位数也有多种,那么请问RBL是如何知道SPL,uboot等的读取方式的呢?比如是按8位还是16位等?

  • 8位或者16位吧。

    这个也是通过读取SYSBOOT[15:0]的值来确定的。

    例如,SYSBOOT[8]在某些情况下可以用来指定是8bit或者16bit的设备。

    详细参考TRM中的Table26-7 SYSBOOT Configuration Pins 中的内容。

  • 但是配置为nand flash的SYSBOOT[8]都是Don't care for ROM code呀?那不是没有指定么?

  • 8bit或者16bit是针对XIP(Execute in place)设备,如NorFlash来说。

    对于NANDflash,RBL会在初始化的时候默认设置为16bit。然后读取NANDFlash的参数后,再确定是否要配置为8bit。

    详细信息请参考TRM中26.1.7.4.2 Initialization and Detection章节的描述,包括初始化过程,时序,支持的NANDFlash型号及对应参数等信息。

  • Ming Liu7 说:

    但是配置为nand flash的SYSBOOT[8]都是Don't care for ROM code呀?那不是没有指定么?

    可通过nand的id来判断,具体可以参考technical reference manual