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.

关于dm8127中spi boot 启动问题



大家好,我们使用S25FL256S的spi flash。我通过串口启动后把u-boot的第一阶段和第二阶段下载到spi flash中,数据读写正常。可以手动把spi falsh中的数据读到ddr3中运行。但是设置spi boot模式后,复位后不能启动。

我的spi flash分区为:

+-------------+->0x00000000-> U-Boot 1st stage start
| |
| |-->0x0001FFFF-> U-Boot 1st stage end
| |-->0x00020000-> U-Boot 2nd stage Start
| |
| |-->0x0005FFFF-> U-Boot 2nd stage end
| |-->0x00060000-> ENV start
| |
| |
| |-->0x00061FFF-> ENV end
| |-->0x00062000-> Linux Kernel start
| |
| |
| |
| |
| |-->0x002E1FFF-> Linux Kernel end
| |-->0x002E2000-> Filesystem start
| |
| |
| |
+--------------+-->0x2000000-> Filesystem end

我的设置为:bootcmd=ipnc_ff_init 1;sf probe 0;sf read 0x81000000 0x20000 0x40000; bootm 0x81000000;

这可能是什么原因导致?我的bootcmd设置有问题吗?

  • 你好,

    你是串口没有任何打印还是linux起不来?

  • 你好,是串口没有打印。

  • 你好,

    先测量一下bootmd的管脚电平,确认启动模式是正确的。也可以通过仿真器查看CONTROL_STATUS.SYSBOOT来确认。

    如果有仿真器,也可以看看PC指针停在什么地址附近,是ROM区域还是DDR。

  • 使用万用表测量,电平是正确的,我们的板是参照appro的开发板来做的。由于我们做板的时候没有把jtag引出来,仿真的话比较麻烦了。

  • Hi,

    我看了下你的flash, 这颗是可选外接RESET管脚的。不知道在你的板子上是否采用了reset,接法又是什么样的?

    能不能先释放DSP的reset,再释放spi的reset看看?

  • 你好,我们的spi flash的reset没有接,处于空闲状态。

  • Hi,

    1.  大家好,我们使用S25FL256S的spi flash。我通过串口启动后把u-boot的第一阶段和第二阶段下载到spi flash中,数据读写正常。可以手动把spi falsh中的数据读到ddr3中运行。但是设置spi boot模式后,复位后不能启动。      请问,你提到的手动把spi falsh中的数据读到ddr3中运行, 具体是如何操作?也是值得从UART中导入uboot先在内存中运行起来,再用sf指令从spi flash去读取uboot到内存中运行吗?

    2.  设置spi bootmode后,是否在上电后检测到CS拉低,以及MISO,MOSI,CLK 上实际测量到数据和时钟?

    3.  如果有pin2pin的料可选,我会建议先用32Mbit及以下的spi flash测试一下。

  • 你好,

    1,手动把spi falsh中的数据读到ddr3中运行,具体操作是:

      一,首先把u-boot从串口下载到DDR中的0x81000000的位置,查看ddr中数据:

    md 0x81000000
    81000000: ea000012 e59ff014 e59ff014 e59ff014
    81000010: e59ff014 e59ff014 e59ff014 e59ff014
    81000020: 80700120 80700180 807001e0 80700240
    81000030: 807002a0 80700300 80700360 12345678
    81000040: 80700000 80700000 807342a4 8076cad4
    81000050: e10f0000 e3c0001f e38000d3 e129f000
    81000060: e24f0068 e51f102c e1500001 0a000007
    81000070: e51f2034 e51f3034 e0432002 e0802002
    81000080: e8b007f8 e8a107f8 e1500002 dafffffb
    81000090: e51f0058 e2400a0a e2400080 e240d00c
    810000a0: e3cdd007 e51f0064 e51f1064 e3a02000
    810000b0: e5802000 e1500001 e2800004 1afffffb
    810000c0: ee070f15 ee070f9a ee070f95 e51ff004
    810000d0: 807014e4 e3a00000 ee080f17 ee070f15
    810000e0: ee070fd5 ee070f9a ee070f95 ee110f10
    810000f0: e3c00a02 e3c00007 e3800002 e3800b02

    然后使用下面命令写到spi flash中.

    sf probe 0:0
    sf erase 0x20000 0x60000
    sf write 0x81000000 0x20000 0x60000

    二,把ddr中的内容置位FF,mw.b 0x81000000 0xFF 0x40000,读取数据为:

    md 0x81000000
    81000000: ffffffff ffffffff ffffffff ffffffff
    81000010: ffffffff ffffffff ffffffff ffffffff
    81000020: ffffffff ffffffff ffffffff ffffffff
    81000030: ffffffff ffffffff ffffffff ffffffff
    81000040: ffffffff ffffffff ffffffff ffffffff
    81000050: ffffffff ffffffff ffffffff ffffffff
    81000060: ffffffff ffffffff ffffffff ffffffff
    81000070: ffffffff ffffffff ffffffff ffffffff
    81000080: ffffffff ffffffff ffffffff ffffffff
    81000090: ffffffff ffffffff ffffffff ffffffff
    810000a0: ffffffff ffffffff ffffffff ffffffff
    810000b0: ffffffff ffffffff ffffffff ffffffff
    810000c0: ffffffff ffffffff ffffffff ffffffff
    810000d0: ffffffff ffffffff ffffffff ffffffff
    810000e0: ffffffff ffffffff ffffffff ffffffff
    810000f0: ffffffff ffffffff ffffffff ffffffff

    三,然后读取spi flash中的数据到ddr中,使用命令:

    sf probe 0:0

    sf read 0x81000000 0x20000 0x40000

    之后在查看ddr中的数据:

    md 0x81000000
    81000000: ea000012 e59ff014 e59ff014 e59ff014
    81000010: e59ff014 e59ff014 e59ff014 e59ff014
    81000020: 80700120 80700180 807001e0 80700240
    81000030: 807002a0 80700300 80700360 12345678
    81000040: 80700000 80700000 807342a4 8076cad4
    81000050: e10f0000 e3c0001f e38000d3 e129f000
    81000060: e24f0068 e51f102c e1500001 0a000007
    81000070: e51f2034 e51f3034 e0432002 e0802002
    81000080: e8b007f8 e8a107f8 e1500002 dafffffb
    81000090: e51f0058 e2400a0a e2400080 e240d00c
    810000a0: e3cdd007 e51f0064 e51f1064 e3a02000
    810000b0: e5802000 e1500001 e2800004 1afffffb
    810000c0: ee070f15 ee070f9a ee070f95 e51ff004
    810000d0: 807014e4 e3a00000 ee080f17 ee070f15
    810000e0: ee070fd5 ee070f9a ee070f95 ee110f10
    810000f0: e3c00a02 e3c00007 e3800002 e3800b02

    与之前的数据相同,验证了写入spi flash中的数据是正确的。

    四,执行go 0x81000000,u-boot启动。进一步验证了spi flash数据的完整性。

    2,设置spi bootmode后,使用示波器测量到,上电时在cs上有一段被拉低,CLK上有一段时钟,MOSI上有一段数据。

    3,如果有pin2pin的料可选,我会建议先用32Mbit及以下的spi flash测试一下。这个是考虑什么原因?


  • 请给予支持,谢谢

  • 是否能提供一下你烧写的SPI镜像?   或者先告诉我镜像有多大。我找个带SPI的板子测一下。

  • 你好,

         附件是u-boot的两个阶段的spi镜像,u-boot.min.spi有63k,u-boot.bin有210k。我是在DM8127_IPNC_3.80.00的软件的基础上修改了S25FL256S驱动,然后通过下面命令编译生成的

    make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm distclean
    make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm ti8148_ipnc_min_spi
    make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm u-boot.ti

    make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm distclean
    make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm ti8148_ipnc_config_spi
    make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm u-boot.ti


    你帮我试一下,谢谢!

    u-boot-spi.rar
  •  你好,Eason Wang 

          您找板帮我试了吗,情况怎么样?谢谢