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.

DM8168启动设置的问题

   自制的DM8168板子,由于硬件设计的缺陷,没有预留启动方式的拨码开关,现在将bootm[0:4]引脚直接接出来,直接接地或者接vcc;

  目前DDR3,nand,串口都通过测试; 通过ccs已将u-boot.noxip.bin下载到flash中,但是上电,串口无任何输出信息,板电流也无任何变化;切换SD卡启动也是同样的现象。

   请问,我们设置启动方式的方法是否有问题, 是否是因为没接上拉下拉电阻而不起作用?u-boot为什么没有启动?

   感谢您的回答!

  •       另外,我发现  DM8168 TRM 文档中,列出的 ROM code 支持的NAND设备如图, 并没有我们使用的 

    device ID:CC, 容量4Gb,16位,pagesize 4KB的nand,  请问,是否不支持我们使用的nand?

  • Wang Bingjian,

    请问该NAND是否支持ONFI Read?

    如果不支持,由于nand支持表格里面device ID 0xCC对于的page size和你的不一致,这样启动是有问题的。

    下面的信息可以在DM8168的TRM里面找到:

    Device detection and parameters.
    The ROM Code first performs an initial wait for device auto
    initialization (with 250 ms timeout) with polling of the ready information. Then, it needs to identify the
    NAND type connected to the GPMC interface. The GPMC is initialized using 8 bits, asynchronous
    mode. The NAND device is reset (command FFh) and its status is polled until ready for operation (with
    100 ms timeout). The ONFI Read ID (command 90h / address 20h) is sent to the NAND device. If it
    replies with the ONFI signature (4 bytes), then a Read parameters page (command ECh) is sent. The
    information shown in Table 25-11 is then extracted: page size, spare area size, number of pages per
    block, and the addressing mode. The remaining data bytes from the parameters page stream are
    simply ignored.

    If the ONFI Read ID command fails (it will be the case with any device not supporting ONFI) then the
    device is reset again with polling for device to be ready (with 100ms timeout). Then, the standard Read ID
    (command 90h / address 00h) is sent. If the Device ID (2nd byte of the ID byte stream) is recognized as
    being a supported device, then the device parameters are extracted from an internal ROM Code table.

  • Chris Meng,

      您好。

      我们使用的nand支持 ONFIread, 使用nand-flash-writer程序过程中,会输出"The NAND flash is ONFI compatible, Revision(un-decoded hex value) =0x2"字样;

      曾经在您一篇帖子的回复中看到您的回复大意: 可以设置8168为 uart启动, 接串口助手,上电,会看到串口助手接收到字符 CCC, 这可以验证板子正常启动并运行了 ROM code... ...; 按此方法设置,我们试了下发现串口接收到的是 " ♬????? ",看到您说输出的波特率是32452,由于使用的串口助手没有这个波特率,我就用示波器看了下串口的输出,发现也不是正常的波形;

      这是否代表我们的板子没有正常启动ROM code ?     我用CCS 调试板子 ddr3,串口,nand等 都是正常的啊。。。

      期待您的回复。

  • Wang Bingjian,

    请问你使用的DM8168的芯片版本是多少?老版本的DM8168在UART启动上有波特率的问题。

    Advisory 1.1.21 UART Boot Generates Incorrect Baud Rate
    Revisions Affected: 1.1, 1.0
    Details: The UART boot mode is not functional on the device due to generating incorrect baud
    rate. This occurs because the ROM code puts the DDR PLL in bypass instead of locking
    it. As a result, the UART module gets an input clock of 13.5 MHz. Therefore, the UART
    operates at 32452 baud. The expected baud rate in 115200.
    Workaround: Use a host that can support the generated baud rate (32452 baud).

  • Chris Meng

      您好,我们使用的片子是tms320dm8168CCYGA2

  • Wang Binjian,

    CCYGA2应该是PG2.1的芯片,不应该有uart输出乱码的问题。请问你有尝试串口终端115200的波特率么?

    请问你使用的DM8168芯片输入时钟是多少?是27Mhz么?

  • 试过115200波特率,输出的是乱码。输入时钟是5338时钟生成芯片产生的27M时钟
  • Wang Bingjian,

    请问你们的DM8168芯片是通过正规的TI代理商购买的么?

  • Chris Meng, 是通过正规渠道买的。 8168启动时候需要一个复位信号,我们是断开它的复位引脚接线了,直接用单片机产生了一个600ms左右的电平来进行复位的。这会不会使8168工作不正常
  • bingjian wang 说:
    直接用单片机产生了一个600ms左右的电平来进行复位的。这会不会使8168工作不正常

    取决于POR的时序和整个电源上电时序是否和datasheet里面的一致。

    启动管脚请连上上下拉电阻,避免对芯片造成损害。 启动后连上仿真器,你可以检查一下CONTROL_STATUS.SYSBOO的值。

    更多信息,请参考:http://processors.wiki.ti.com/index.php/Debug_Tips_for_DM81xx_Boot_Fail。

  • Chris Meng,

           板子上电后,用CCS查看了CONTROL_STATUS.SYSBOOT寄存器的值,发现跟boot引脚设置的值是对应的;   也查看了 tracing vector的值,自己的板子跟开发板的值基本都一样;但是系统没启动,串口还是没有信息输出;    还可以从哪里找问题啊?

  • Wang Bingjian,

    bootmode管脚里面有一个是定义8-bit位宽和16-bit位宽的,请问你是否也配置正确?

  • Chris Meng,

         这个注意到了,用的NAND是16bit的,BW我们配置成了1,其他的 cs0mux1 =0, cs0mux0 =0, cs0wait =0 。

  • Wang Bingjian,

    你烧写的uboot里面的DDR配置是否根据DDR芯片的时序,以及SW leveling修改过?

  • Chris Meng,

        您好。

       uboot中更改了由DDR3时序决定的 emif接口参数,设定了796MHz频率,通过SW leveling 更改了最佳seed value到uboot中; 又重新编译了用于sd卡启动的MLO和u-boot.bin, 上电,串口就是一点输出没有。。。  单独测试串口是好使的。。。 从nand启动也是没有任何输出。

  • Wang Bingjian,

    你能否把nand启动和sd启动失败后的trace vector的值发给我看看?

  • Chris Meng,

        您好。

      设置成SD卡启动时,CONTROL_STATUS.BOOT=0x00050317;设置成nand启动时,CONTROL_STATUS.BOOT=0x00050314;

      nand是16位的,开发板是8片ddr,我们换成了4片512MB的。

      trace vector :

    地址                                     SD启动值                           NAND启动值

    0x4031D040                    0000009E                           0000103F

    0x4031D044                    00011000                           00001000

    0x4031D048                    00001000                           00400420

    0x4031D04C                    0                                                  0

    0x4031D050                    0                                                  0

    0x4031D054                    0                                                  0

    0x4031D058                    9                                                  9

    0x4031D05C                    0                                                 0

    0x 4031D060                E3A0BD89                             E3A2BD89

    0x 4031D064               7032D420                              7032D420 

    0x 4031D068               1C851F9A                              1C851F9A

    0x 4031D06C              4E520E3D                              4E520E3D

    0x 4031D070               45534944                               45534944

    0x 4031D074               52454854                               52454854

    0x 4031D078               0054454E                              0054454E

    0x 4031D07C               000032C0                             000032C0

    看了下TRM手册,没看懂trace vector,希望你给解释一下,谢谢

  • Wang Bingjian,

    对于nand启动,请配置CS0MUX0/1=0,你目前的配置01b. 请参考:http://processors.wiki.ti.com/index.php/TI81XX_PSP_UBOOT_User_Guide#EVM_Switch_Settings。

    下面的信息TRM里面可以找到。

    针对你的SD启动:

    Trace vector     Bit #    Group                Meaning
    1                       4         Memory Boot     Memory booting started
    1                       7         Boot                     Header found
    2                      12        Memory Boot      Memory booting trial 0
    2                      16        Memory Boot      Execute image

    看起来已经从sd卡启动,但是没有成功。我还是怀疑是DDR的部分,请问除了时序,你们还修改过什么?

  • Chris Meng,

        您好。

       我们修改了根据ddr 时序确定的在796MHz的 time register values :  SDRCR, SDRRCR, SDTIMER1, SDTIMR2, SDTIMR3, DDRPHYCR, 修改到了u-boot中对应的EMIF0/1接口参数中; 并根据板子 ddr trace length 确定的 seed value,输入到SW leveling过程程序中,程序得到 最佳 WR DQS,RD DQS, RD DQS GATE值, 并更改到了 u-boot中; include/configs/ti8168_etv.h 中,设定 #define CONFIG_TI8168_DDR3_796 。

  • Wang Bingjian,

    1. 你们是否有尝试配置DDR第一点频率,看是否有改善?

    2. 你们能否再排查一下DDR的原理图/布线,是否有问题。一个Byte之间的数据线在布线的时候是可以交换,但跨byte是不允许的,请检查一下pcb相关部分。

  • Chris Meng,

        您好。

       我们用官方的test 程序测试过DDR3,在675,796 频点下,读写是正常的,没有错数。 为什么到u-boot中,这部分就有问题了呢

  • Wang Bingjian,

    你可以在sd启动失败后,连上仿真器(去掉gel) ,看DDR能否正常访问么?并且对比一下DDR相关寄存器和gel初始化后的DDR寄存器是否完全一样。 DMM相关寄存器也可以对比一下。

  • Chris Meng,

         您好。

        按照您的方法,我们设置SD卡启动失败后,连接CCS,在memory browser访问0x8000 0000(emif0) 和 0xC000 0000(emif1) 都能访问,并能通过fill memory赋值;

        查看ddr控制寄存器的值与 用GEL启动的都是一样的,都是我们通过时序更改到u-boot的值;

        查看DMM寄存器,发现 DMM_LISA_MAP_0/1 都为0,DMM_LISA_MAP_2=0x80640300, DMM_LISA_MAP_3=0xC0640320, 这里与GEL的设置不一样,GEL的为  MAP_0=MAP_2,  MAP_1=MAP_3; 是否这里有问题?

        还查看了串口控制寄存器的值,发现0x4802 0000 寄存器不能访问,是???? ????; 这是否代表u-boot卡在了 串口初始化的前面?

       谢谢。

      

  • Chris Meng,

        我们也降频到675MHz,也不行。

  • bingjian wang 说:
    查看DMM寄存器,发现 DMM_LISA_MAP_0/1 都为0,DMM_LISA_MAP_2=0x80640300, DMM_LISA_MAP_3=0xC0640320, 这里与GEL的设置不一样,GEL的为  MAP_0=MAP_2,  MAP_1=MAP_3; 是否这里有问题?

    DMM_LISA_MAP_2=0x80640300 表示映射到系统地址的DDR起始地址是0x80000000,从这个地址开始有1GB的DDR,128-byte interleaving,Mapped on SDRC 0 and SDRC 1 (interleaved),映射到系统地址的DDR是DDR物理地址0x0开始的区域。

    DMM_LISA_MAP_3=0xC0640320表示映射到系统地址的DDR起始地址是0xC0000000,映射到系统地址的DDR是DDR物理地址0x20000000开始的区域。

    你们使用的是4片512MB的DDR,和上面的配置是一致的。

    bingjian wang 说:
    还查看了串口控制寄存器的值,发现0x4802 0000 寄存器不能访问,是???? ????; 这是否代表u-boot卡在了 串口初始化的前面?

    SD驱动失败后,去掉gel,连上仿真器,看看PC指针在DDR区域还是芯片内存?

  • Chris Meng,

    您好。

    1.sd卡启动失败后,不带gel的连接,显示suspended在0x0002 008c位置,看了手册,这应该是gpmc位置。

    2.看了您关于dmm的解释,有些疑问。dmm_lisa_map_2和3指示映射到系统地址ddr物理地址起始地址,这个不应该是4片都映射一下么?

      即dmm_lisa_map_0指示第一片0x0,dmm_lisa_map_1指示第二片0x20000000,      dmm_lisa_map_2指示第三片0x40000000,   

    dmm_lisa_map_3指示第4片0x60000000?  为什么0  1的值都为0?

        谢谢!

  • bingjian wang 说:
    1.sd卡启动失败后,不带gel的连接,显示suspended在0x0002 008c位置,看了手册,这应该是gpmc位置。

    这个地址是ROM区域,请参考TRM的25.3.1.3 Dead Loops。从解释看,是读取数据出错了。

    2008Ch Data abort exception default handler

    bingjian wang 说:
    2.看了您关于dmm的解释,有些疑问。dmm_lisa_map_2和3指示映射到系统地址ddr物理地址起始地址,这个不应该是4片都映射一下么?

    建议你再看看http://processors.wiki.ti.com/index.php/EZSDK_Memory_Map#Step_1:_Update_LISA_Registers

  • Chris Meng,

    您好。

    “ 这个地址是ROM区域,请参考TRM的25.3.1.3 Dead Loops。从解释看,是读取数据出错了  ”    请问一下,我们的ROM code执行完毕了么(SD卡中的MLO应该是执行了一部分了吧,因为DDR能访问了)?   大概有什么原因会导致读取数据出错呢?

  • Chris Meng,

        我们现在用ccs单步调试uboot,但是总是不定位置的就会掉入那个dead loop区域,能给我们解释一下这个dead loop区域及掉入其中的原因么?

    TRM上面讲的这块内容太少了。

  • Wang Bingjian,

    e2e上有个帖子也是DDR在CCS下可以访问,但启动失败。原因是DDR的row size配置错误,你能看看你的配置么?

    https://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/t/347482

  • Chris Meng,

       真的真的非常感谢您!!!  我们改了page size由2048word 11列,到1024 word 10列,  上电,启动,当看到串口输出信息一串串的冒出时,那种喜悦的心情!!!无以言表!!!  之前真没注意到这个参数!

       非常感谢您,也让我们积累了宝贵的调试经验!

       感谢!

  • Wang Bingjian,

    请问现在nand和sd启动都成功了么?

    请问nand启动是否有修改CS0MUX0/1=0?

  • Chris Meng,

       您好。

      抱歉这么久回复您。 现在 SD卡启动成功了; NAND启动还是有问题, CS0MUX0/1配置成0了。 通过nand-flash-writer能成功把 u-boot-noxip.bin烧写进去,并且再读出flash的数据, 对比也是正确的。   

  • bingjian wang 说:
    通过nand-flash-writer能成功把 u-boot-noxip.bin烧写进去,并且再读出flash的数据, 对比也是正确的。   

    sd卡启动后,在uboot下把uImage写入nand,然后断电。上电启动uboot读取nand 上的uImage,能正常启动kernel么?这是也是确认nand的烧写是否正确的一个方法。

  • Chris Meng,

      在SD卡启动后,u-boot下烧写uImage到nand会出现一些错误;但是通过CCS烧写能够成功却收不到串口信息。

  • bingjian wang 说:
    CS0MUX0/1配置成0了

    trace信息有变化么?

  • Chris Meng,

      你好。trace vector没变化,trace vector1是  0x0000 907F,我看未定义是应该就没检测到启动image吧。    是不是需要改u-boot中关于GPMC的配置?

  • Wang Bingjian,

    从nand启动trace信息看,我觉得rom没有发现有nand。你能换一个在我们列表里面支持的nand尝试一下么?这样可以排除是硬件问题(外部上下拉)还是nand的问题。

    NAND boot

    Trace vector     Bit #    Group                 Meaning

    1                       4         Memory Boot      Memory booting started

    1                       5         Peripheral Boot   Peripheral booting started

    1                      12        Peripheral Boot   Device initialized

    2                      12        Memory Boot      Memory booting trial 0

    3                      5          Memory Boot      Memory booting device MMCSD1

    3                     10         Memory Boot      Memory booting device EMIF LPDDR2-NVM

    3                      22       Peripheral Boot    Peripheral booting device NULL

  • Chris Meng,

      从sd卡启动进入内核,然后读nand信息是能够读取的也正确。也试了从u-boot命令行烧写u-boot.noxip.bin也是成功的。您的意思是内核跟u-boot能够识别nand不代表ROM能够识别nand?

  • bingjian wang 说:
    也试了从u-boot命令行烧写u-boot.noxip.bin也是成功的

    为什么烧写uboot没有错误,而烧写uImage有错误?

    bingjian wang 说:
    您的意思是内核跟u-boot能够识别nand不代表ROM能够识别nand?

    是的。

  • Chris Meng,

        是从SD卡进入Linux系统之后, 运行烧写nand启动的脚本 ./load.sh  时 出错。不知道为什么出现很多坏块信息,在ccs下烧写是没有提示坏块信息的。

    输出信息为 

     root@dm816x./opt/programming# ./load.sh

    Download the U-boot.bin

    flash eraseall: /dev/mtd0: Permission denied

    /dev/mtd0: Permission denied

    Download the U-boot environment

    Cannot read bad block mark: Invalid argument

    Cannot read bad block mark: Invalid argument

    Cannot read bad block mark: Invalid argument

    Cannot read bad block mark: Invalid argument

    Cannot read bad block mark: Invalid argument

    Cannot read bad block mark: Invalid argument

    Cannot read bad block mark: Invalid argument

    Downlaod the Kernel

    Skipping bad block at 0x00000000

    Skipping bad block at 0x00040000

    Skipping bad block at 0x00080000

    Skipping bad block at 0x000C0000

    Skipping bad block at 0x00100000

    Skipping bad block at 0x00140000

    Skipping bad block at 0x00180000

    Skipping bad block at 0x001C0000

    Skipping bad block at 0x00200000

    Skipping bad block at 0x00240000

    Skipping bad block at 0x00280000

    Skipping bad block at 0x002C0000

    Skipping bad block at 0x00300000

    Skipping bad block at 0x00340000

    Skipping bad block at 0x00380000

    Skipping bad block at 0x003C0000

    Skipping bad block at 0x00400000

    Erasing 256 Kibyte @ 400000 -- 94 % complete.

    Writing data to block 0 at offset 0x0

    Bad block at 0,1 block(s) from 0 will be skipped

    Writing data to block 1 at offset 0x40000

    Bad block at 40000,1 block(s) from 40000 will be skipped

    Writing data to block 2 at offset 0x80000

    Bad block at 80000,1 block(s) from 80000 will be skipped

    ...

    ...

     

  • Chris Meng,

         还有一个问题,本来用nand-flash-writer读出的nand 芯片ID是不正确的,我们用的nand  spare size是224B,读出的是64B; 查看代码,nand-flash-writer中是将片子的某个ID寄存器2,3位读出(实际第3位为0,第2位为1),然后执行32<<ID[3:2],得到64 ,而芯片手册指出的是spare size 只跟第2位有关(实际第2位为1), 由于实际读出的值(1)是正确的, 所以我把读spare size 这段注释掉了, 直接在程序中自己赋值 sparesize=224,这样处理后,nand-flash-writer得到的  NAND FLASH DETAILS没有问题;  

       请问,我这样处理是否合理? 224B spare size用的BCH8 是否正确?

  • Wang Bingjian,

    你有换一个我们列表里面支持的NAND尝试过么?

  • Chris Meng,

        好吧,让我们的硬件设计师换一个试试。

  • Chris Meng,

        看样子ROM bootloader 没有识别到我们的nand,    请问,有什么方法,比如说更改什么设置,能够让其识别么? 看e2e上讨论过sparesize=224B需要用 BCH16校验? 

        由于片子采购回来需要一定时间,我想利用这段时间试试别的方法。

  • Wang Bingjian,

    Rom代码是没有办法修改的。你们的板子上是否有I2C EEPROM,如果有,可以尝试NAND Geometry Information on I2C EEPROM。具体信息见TRM。

  • 你好!请问,如何用CCS查看了CONTROL_STATUS.SYSBOOT寄存器的值?

  • Chris Meng,

      您好,很抱歉这么久才回复;我们的问题解决了,更换了板子上的nand芯片,换成了列表里支持的就好了,还是因为nand不支持造成的。

  • 你可以从手册中查到CONTROL_STATUS.SYSBOOT对应的地址,然后在就可以在CCS中 memory查看了。

  • bingjian wang 说:

    Chris Meng,

      您好,很抱歉这么久才回复;我们的问题解决了,更换了板子上的nand芯片,换成了列表里支持的就好了,还是因为nand不支持造成的。

    还是很感谢你对的问题确认!