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.

请教下TI的工程师,am335x,先通过串口加载 SPL,然后在SPL中修改代码让板子从 MMC接口上读取 uboot 并继续启动。这样的启动流程可行吗?



如题,由于板子的硬件出了点问题。使得现在需要先 用串口启动 SPL, 然后在 SPL 的 board_init_r 中直接做如下赋值:


//boot_device = spl_boot_device();
boot_device = BOOT_DEVICE_MMC1;

让板子执行 下面这个分支:

case BOOT_DEVICE_MMC1:
spl_mmc_load_image();
break;

这样的修改可以实现上面提到的启动流程吗? 现在我在 Beaglebone Black 上试了下,好像不行,有如下打印说 MMC device not found:

USB Host mode controller at 47401800 using PIO, IRQ 0
11 boot device - 8
MMC Device 0 not found
spl: mmc device not found!!

请问下 TI 的工程师,如果想实现上面说的启动流程,还需如何修改 SPL 的代码?

  • 理论上说,如果代码部分修改OK了的话,应该是可以这样做的。

    先确认一下,如果直接使用mmc卡启动,你能启动起来吗?

    如果可以这样做,那很可能的问题,是你在spl部分里面修改的代码并没有初始化MMC的相关引脚。能否先打印一下相关的pinmux信息,确认mmc的引脚配置正常吗

  • 直接使用 MMC 卡启动不了,所以才要这么做。我们是想用 MMC1 启动,管脚用了 pinmuxTools 中 IO set 4.

    不过,我现在已经调通我开始提到的启动流程了。之前那样修改不行,需要修改下面这两函数:

    spl_boot_device 和 spl_boot_mode

  • 有点好奇的是为啥你的mmc启动不了?看你的消息是说,你现在可以使用MMC1启动,并且成功了是么?方法是修改两个函数,为啥不用boot模式的定义管脚进行相关设置,而需要直接改函数呢?MMC0也是可以启动的。如果不需要追这个问题了,就结贴吧。

  • 其实你好奇的问题正式我这边想极力解决的。

    我们用了 MMC1 接口来接 SD 卡;使用了 pinMuxTools 上 mmc1 接口的 IO SET 4; 然后 SYSBOOT 设置如下:

    SYSBOOT[4:0]
       11100b   
    这个配置的启动顺序是 :MMC1   --> MMC0 --> UART0 --> USB0

    用仿真器看了,对应的 control status 寄存器后五位确实是 11100b;但板子就是无法从 MMC1 启动;用示波器量板子上电时 SD 卡的时钟信号,搞了十几次才有一两次采集到信号。而同样的方法去量 MMC0 的 CLK ,很容易就得到一个波形规整的时钟。
    所以 我们怀疑,是不是如果使用 MMC1 启动,对其 IO SET 的选择有要求?
    已经发邮件给你们的 fae 确认,目前还没给答复呢。
    Liu 工如果可以的话,帮我们尽快确认下也行,多谢了。
  • 你如果是用的是MMC1接口的IO SET4是没法满足mmc1启动的;必须使用的是IO SET1组内的几根线。

    你可以参考一下TRM的26.1.7.5.8章节--pins used,如果是MMC1 boot,使用的都是set1内的这些信息。同时也可以参考一下,我们Beagleboneblack的设计,就是使用了mmc1作为启动方式。

    Table 26-29. Pins Used for MMC1 Boot

    Signal name Pin Used in Device
    clk gpmc_csn1
    cmd gpmc_csn2
    dat0 gpmc_ad0
    dat1 gpmc_ad1
    dat2 gpmc_ad2
    dat3 gpmc_ad3

  • 多谢liu工的确认。 我们板子之前是参考BBB的,只是我们还要用到 GMPC 的管脚来连接 fpga,所以才用了 IO set4. 看来要重新规划板子的管脚使用了。

    顺便问下 Liu 工;SDK 6.0 支持BBB 了吗? 我现在是拿 SDK 7.0 中的uboot 作为基线来调我们的板子,貌似在启动内核的时候用到了 device tree;是个新玩意,不是很熟悉,需要花些时间来搞下,进度上可能来不及了。如果 SDK 6.0 也支持 BBB ,打算用作调试的基线。

  • 看来下 sdk6.0 的uboot ;貌似是支持的。

  • SDK6.0是支持BBB的,这些信息一般可以在release notes里面找到。

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