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 Board bring up

Hello,

We have made 4 DM8168 boards in sets of 2 each. The first 2 boards worked perfectly, we are having issues in bringing up the second set of 2 new boards. The build in boot code loader sequences through both NAND and SD card Image but the COM2 port does not come up.Our design is similar to EVM. where we have boot indicator LED (i.e. to L9(UART2_RTSN/GP1[23]) BGA pin of processor). So with SD/NAND boot modes LED is blinking and verified same with EVM board, But not able to see any data on UART2. And on UART0 (with 00001 boot mode switch setting) able to see continuously printing 'o' character with 115200 baud, 8-bits, even parity, 1 stop bit configuration. We are able to see mmc data/clock activity on SD card.
Suspecting DDR issues, via CCS we tried to fill memory from 0x80000000 to some locations with 0xFFFFFFFF data (we have 2 banks 0f DDR3). Here bit 13th is toggling to first 128 address locations (i.e. from 0x80000000h to 0x8000007Fh) and next 128 address it is fine (i.e. from 0x8000080h to 0x800000FFh) and it is continuously in loop.for more information attaching snap of memory browser.
We assumed it to be address data short (assembly issues) and tried memory 0xc0000000 too, same behaviour. Looks like its a timing issues. Played around a bit with RAS CAS timings...Nothing seems to help.

Please give us some pointers over this problem.

Thanks in advance!

Regards,

Pragnesh Virani

  • Are you loading a GEL file to correctly initialise software levelling etc? If the DDR isn't being set up correctly then you may see these issues.

  • Hi Ralph,

        We are loading evm816x.gel (Version 1.02) file.and it correctly initializing.we tried with different DDR frequency and with 'DM816x_C6A816x_AM389x_EMIF4_Register_Settings' file, We tried to change parameters like CL, CWL, IBANKPOS,SDRCR and Timing parameters etc but no change.

  • Hello,

       We are using DDR of micron (part no.MT41J256M8HX-15E:D) and design similar to EVM board. After loading GEL file, through memory browser, filling memory from 0X80000000 locatiion to  next 1000h location with FFFFFFFF value. In result it, from 0X80000000 to 0X8000007F it is writing as FFFFDFFF  and from 0X80000080 to 0X80000100 it is writing as FFFFFFFF and it's in continuous loop of 128 address. for more information attaching the snap of memory browser. so, here its looks like assembly issue. from this clue how can i find which address or data line short or it is causing due to some other issues ? 

    Thank You in Advance!

    the snap 

  • Bear in mind that the EMIF controller will interleave data writes between the 2 banks of memory (if you have 2) which explains the looping you are seeing every 128 bytes. I'm confused as to why the apparent open-circuited data line (from the "D" in FFFFDFFF) is only affecting certain addresses though. I would have thought this would affect all addresses.

    I think you need to fix your "assembly issue" first so that you can be sure the memory has been zeroed correctly before writing the 0xFFFFFFFF everywhere. Could you fill in a memset and a "for" loop in your C program and execute that over JTAG?

  • Dear Ralph,


      Thank You for your replay!

      Here one more thing is observed is that, In memory browser whenever i am filling or changing some value this "D" bit is toggling (D-->F or F-->D)which is affecting entire 128 byte of addresses (i.e. from 00 to 7F). So is there any possibilities of open adderess/data lines of DDR?

    And for DDR testing i have loadded "CCS Nand Flash Utility " which is  from spectrum digital.

    posting Utility log of  working and non-working devices:

    *************************log of WORKING DEVICE ***************************
    [CortexA8] Welcome to CCS Nand Flash Utility
    [CortexA8]
    [CortexA8]
    [CortexA8] Choose your operation
    [CortexA8] Enter 1 ---> To Flash an Image
    [CortexA8] Enter 2 ---> To ERASE the whole NAND
    [CortexA8] Enter 3 ---> To DDR Simple test
    [CortexA8] Enter 4 ---> To EXIT
    3
    [CortexA8]
    [CortexA8] DDR Simple test
    [CortexA8] Addr 0x80000000 is ok
    [CortexA8] Addr 0x81000000 is ok
    [CortexA8] Addr 0x82000000 is ok
    [CortexA8] Addr 0x83000000 is ok
    [CortexA8] Addr 0x84000000 is ok
    [CortexA8] Addr 0x85000000 is ok
    [CortexA8] Addr 0x86000000 is ok
    [CortexA8] Addr 0x87000000 is ok
    [CortexA8] Addr 0x88000000 is ok
    [CortexA8] Addr 0x89000000 is ok
    [CortexA8] Addr 0x8a000000 is ok
    [CortexA8] Addr 0x8b000000 is ok
    [CortexA8] Addr 0x8c000000 is ok
    [CortexA8] Addr 0x8d000000 is ok
    [CortexA8] Addr 0x8e000000 is ok
    [CortexA8] Addr 0x8f000000 is ok
    [CortexA8] Addr 0x90000000 is ok
    [CortexA8] Addr 0x91000000 is ok
    [CortexA8] Addr 0x92000000 is ok
    [CortexA8] Addr 0x93000000 is ok
    [CortexA8] Addr 0x94000000 is ok
    [CortexA8] Addr 0x95000000 is ok
    [CortexA8] Addr 0x96000000 is ok
    [CortexA8] Addr 0x97000000 is ok

    ...

    and so on..
    *************************log of Non-WORKING DEVICE ***************************
    [CortexA8] Welcome to CCS Nand Flash Utility
    [CortexA8]
    [CortexA8]
    [CortexA8] Choose your operation
    [CortexA8] Enter 1 ---> To Flash an Image
    [CortexA8] Enter 2 ---> To ERASE the whole NAND
    [CortexA8] Enter 3 ---> To DDR Simple test
    [CortexA8] Enter 4 ---> To EXIT
    3
    [CortexA8]
    [CortexA8] DDR Simple test
    [CortexA8] --- addr 0x80000018 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000020 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000028 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000038 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000058 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000070 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000118 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000120 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000128 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000148 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000150 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000168 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000208 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000228 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000230 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000248 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000250 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000260 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000278 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000308 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000318 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000328 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000338 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000340 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000368 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000378 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000380 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000408 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000410 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000428 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000430 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000448 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000468 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000480 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000508 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000518 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000528 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000538 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000540 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000550 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000568 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000580 (0xaaaa8aaa)
    [CortexA8] --- addr 0x80000610 (0xaaaa8aaa)
    .......

    Here, It is writing  0X55555555 and 0xAAAAAAAA continiously. in non working log from 0X80000080 to 0X80000100 it weriting properly so it is skips.

    Thanks & Regards,

    Pragnesh Virani

  • First of all, I would say that bit 21 of your data bus is broken. It's either floating or shorted to ground. This assumes your system is set up little endian.

    I'm less clear on issues with your address lines but maybe get someone to fix your data line first. Problems with address lines can be checked by firstly writing an incrementing number to address lines changing one address bit at a time. Once you have written to these 32 addresses (probably fewer depending on how much memory you have) then you read back the data at all the addresses in one go and check that the number you wrote to the addresses increments correctly. If it doesn't you can identify the problem.