Announcement
Collapse
No announcement yet.
Flashing A Custom Imx6Q Board for First Time
Collapse
X
-
Hi Robert,
found the issue, the LVDS 2.5V supply was not provided to the custom board as I didn't intend to use LVDS. But found out that DDR3 shares LVDS power rails.
Thanks alot for your helps and suggestions.
Anuradha
- Likes 1
Leave a comment:
-
ranaya, try to run the memory calibration on your iMX6 Rex module. I do not have iMX6 Rex module with me. You can see an example of the calibration log output here: http://www.imx6rex.com/software/how-...ation-on-imx6/
Leave a comment:
-
Hi, one more thing, do you remember the delays reported for DQS and Data signals ? I'm trying to update MMDC_MPWLDECTRL0 register values to see whether I can make pass through ZDQ calibration.
Anuradha
Leave a comment:
-
Hi, I am sure I put the correct memory information to the aid xsl, so the script file should be okay. Moreover I was able to run this on OpenRex board without any trouble. In our custom board, every time the calibration screwed up in DQS gating stage. Can't do stress test either. So would this be due to a layout issue ? The only change we made from Rex layout was adding an additional copper area to layer 3 and 10 (kindly take a look at pg1 and 2 attachments). Differential impedance was 100 ohm.
Moreover voltages levels seem to be correct and exactly what I expected (1.5V and 0.75 Vref).
What else we could count for our check list ?
Thanks in Advance
Leave a comment:
-
I simply used the SD Sabre script file, run it on iMX6 Rex module and adjusted the values based on calibration results. That is what you can try too - it should give you some results and then you can continue by adjusting the script file.
1) using / not using A15 depends on what is the memory chip size which you fit on the board. Memory size is setup in the inc file - one of the registers. if your memory size is same as in the script file, you do not need to worry about it.
2) read the document included with the test tool. I think they explain it somewhere - I think the real frequency is 528
3) it doesn't influence the script file.
Leave a comment:
-
Hi, tried V1.0.2 version too. Same result found, except the V2.6 is bit more informative. Anyway I'm looking forward to hear from......................
Leave a comment:
-
Thanks very much Robert, I appreciate your help. I'll give it a try with V1.0.2 ! I still have few confusions, now in our RAM chip,
1. We have 15 Row addresses (A[0:14]) and in schematic and layout DRAM_A14 (Pin T7) however is connected to processor DRAM_A14 (even A15 is available in schematic, I guess this is to easily extend different RAM chips ?). So should this be specifically mentioned in .inc file ? Or just mentioning 15 row addresses in aid.xlxs generates sufficient information for .inc file.
2. In the DQL aid xsls, we have only 400 and 528MHz frequencies. Why it has become 533MHz in your script ? Can you also point out the aid xslx you used for this RAM ?
3. I found a descrepncy in pin arrangement between SabreSD and OpenRex RAM connections. Specifically DQMx pins and Data pins were swapped. So If I can get your xsls aid script, that would give me correct script for RAMLast edited by ranaya; 03-23-2017, 10:12 PM.
Leave a comment:
-
I do not use V2.6. The log output looks weird to me. This is what we used in DDR Stress Tester V1.0.2 (2GB iMX6 Rex module - but I am not sure if this is the final file, this is what I found in my directory):
Code://============================================================================= //init script for i.MX6Q DDR3 //============================================================================= // Revision History // v01 //============================================================================= wait = on //============================================================================= // Disable WDOG //============================================================================= //setmem /16 0x020bc000 = 0x30 //============================================================================= // Enable all clocks (they are disabled by ROM code) //============================================================================= setmem /32 0x020c4068 = 0xffffffff setmem /32 0x020c406c = 0xffffffff setmem /32 0x020c4070 = 0xffffffff setmem /32 0x020c4074 = 0xffffffff setmem /32 0x020c4078 = 0xffffffff setmem /32 0x020c407c = 0xffffffff setmem /32 0x020c4080 = 0xffffffff setmem /32 0x020c4084 = 0xffffffff //============================================================================= // IOMUX //============================================================================= //DDR IO TYPE: setmem /32 0x020e0798 = 0x000C0000 // IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE setmem /32 0x020e0758 = 0x00000000 // IOMUXC_SW_PAD_CTL_GRP_DDRPKE //CLOCK: setmem /32 0x020e0588 = 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 setmem /32 0x020e0594 = 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1 //ADDRESS: setmem /32 0x020e056c = 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS setmem /32 0x020e0578 = 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS setmem /32 0x020e074c = 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_ADDDS //CONTROL: setmem /32 0x020e057c = 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET setmem /32 0x020e058c = 0x00000000 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured using Group Control Register: IOMUXC_SW_PAD_CTL_GRP_CTLDS setmem /32 0x020e059c = 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0 setmem /32 0x020e05a0 = 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1 setmem /32 0x020e078c = 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_CTLDS //DATA STROBE: setmem /32 0x020e0750 = 0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL setmem /32 0x020e05a8 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 setmem /32 0x020e05b0 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 setmem /32 0x020e0524 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2 setmem /32 0x020e051c = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3 setmem /32 0x020e0518 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS4 setmem /32 0x020e050c = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS5 setmem /32 0x020e05b8 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS6 setmem /32 0x020e05c0 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS7 //DATA: setmem /32 0x020e0774 = 0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE setmem /32 0x020e0784 = 0x00000028 //* IOMUXC_SW_PAD_CTL_GRP_B0DS setmem /32 0x020e0788 = 0x00000028 //* IOMUXC_SW_PAD_CTL_GRP_B1DS setmem /32 0x020e0794 = 0x00000028 //* IOMUXC_SW_PAD_CTL_GRP_B2DS setmem /32 0x020e079c = 0x00000028 //* IOMUXC_SW_PAD_CTL_GRP_B3DS setmem /32 0x020e07a0 = 0x00000028 //* IOMUXC_SW_PAD_CTL_GRP_B4DS setmem /32 0x020e07a4 = 0x00000028 //* IOMUXC_SW_PAD_CTL_GRP_B5DS setmem /32 0x020e07a8 = 0x00000028 //* IOMUXC_SW_PAD_CTL_GRP_B6DS setmem /32 0x020e0748 = 0x00000028 //* IOMUXC_SW_PAD_CTL_GRP_B7DS setmem /32 0x020e05ac = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 setmem /32 0x020e05b4 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 setmem /32 0x020e0528 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2 setmem /32 0x020e0520 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3 setmem /32 0x020e0514 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM4 setmem /32 0x020e0510 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM5 setmem /32 0x020e05bc = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM6 setmem /32 0x020e05c4 = 0x00000028 //* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM7 //============================================================================= // DDR Controller Registers //============================================================================= // Manufacturer: Micron // Device Part Number: MT41J128M16HA-15E // Clock Freq.: 533MHz // Density per CS in Gb: 8 // Chip Selects used: 1 // Number of Banks: 8 // Row address: 14 // Column address: 10 // Data bus width 64 //============================================================================= setmem /32 0x021b0800 = 0xa1390003 // DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic HW ZQ calibration. // write leveling, based on Freescale board layout and T topology // For target board, may need to run write leveling calibration // to fine tune these settings // If target board does not use T topology, then these registers // should either be cleared or write leveling calibration can be run setmem /32 0x021b080c = 0x0013001F setmem /32 0x021b0810 = 0x00230011 setmem /32 0x021b480c = 0x0017001F setmem /32 0x021b4810 = 0x000E001D //###################################################### //calibration values based on calibration compare of 0x00ffff00: //Note, these calibration values are based on Freescale's board //May need to run calibration on target board to fine tune these //###################################################### //Read DQS Gating calibration setmem /32 0x021b083c = 0x432C0328 // MPDGCTRL0 PHY0 setmem /32 0x021b0840 = 0x03240328 // MPDGCTRL1 PHY0 setmem /32 0x021b483c = 0x432C033C // MPDGCTRL0 PHY1 setmem /32 0x021b4840 = 0x03200268 // MPDGCTRL1 PHY1 //Read calibration setmem /32 0x021b0848 = 0x3A2E3234 // MPRDDLCTL PHY0 setmem /32 0x021b4848 = 0x34322A3A // MPRDDLCTL PHY1 //Write calibration setmem /32 0x021b0850 = 0x3C3C4242 // MPWRDLCTL PHY0 setmem /32 0x021b4850 = 0x42344438 // MPWRDLCTL PHY1 //read data bit delay: (3 is the reccommended default value, although out of reset value is 0): setmem /32 0x021b081c = 0x33333333 // DDR_PHY_P0_MPREDQBY0DL3 setmem /32 0x021b0820 = 0x33333333 // DDR_PHY_P0_MPREDQBY1DL3 setmem /32 0x021b0824 = 0x33333333 // DDR_PHY_P0_MPREDQBY2DL3 setmem /32 0x021b0828 = 0x33333333 // DDR_PHY_P0_MPREDQBY3DL3 setmem /32 0x021b481c = 0x33333333 // DDR_PHY_P1_MPREDQBY0DL3 setmem /32 0x021b4820 = 0x33333333 // DDR_PHY_P1_MPREDQBY1DL3 setmem /32 0x021b4824 = 0x33333333 // DDR_PHY_P1_MPREDQBY2DL3 setmem /32 0x021b4828 = 0x33333333 // DDR_PHY_P1_MPREDQBY3DL3 //For i.mx6qd parts of versions A & B (v1.0, v1.1), uncomment the following lines. For version C (v1.2), keep commented //setmem /32 0x021b08c0 = 0x24911492 // fine tune SDCLK duty cyc to low - seen to improve measured duty cycle of i.mx6 //setmem /32 0x021b48c0 = 0x24911492 // Complete calibration by forced measurement: setmem /32 0x021b08b8 = 0x00000800 // DDR_PHY_P0_MPMUR0, frc_msr setmem /32 0x021b48b8 = 0x00000800 // DDR_PHY_P0_MPMUR0, frc_msr //MMDC init: setmem /32 0x021b0004 = 0x00020036 // MMDC0_MDPDC setmem /32 0x021b0008 = 0x09444040 // MMDC0_MDOTC setmem /32 0x021b000c = 0x8A8F7955 // MMDC0_MDCFG0 setmem /32 0x021b0010 = 0xFF328F64 // MMDC0_MDCFG1 setmem /32 0x021b0014 = 0x01FF00DB // MMDC0_MDCFG2 setmem /32 0x021b0018 = 0x00001740 // MMDC0_MDMISC //NOTE about MDMISC RALAT: //MDMISC: RALAT kept to the high level of 5 to ensure stable operation at 528MHz. //MDMISC: consider reducing RALAT if your 528MHz board design allow that. Lower RALAT benefits: //a. better operation at low frequency //b. Small performence improvment setmem /32 0x021b001c = 0x00008000 // MMDC0_MDSCR, set the Configuration request bit during MMDC set up setmem /32 0x021b002c = 0x000026d2 // MMDC0_MDRWD; recommend to maintain the default values setmem /32 0x021b0030 = 0x008F1023 // MMDC0_MDOR setmem /32 0x021b0040 = 0x00000047 // CS0_END setmem /32 0x021b0000 = 0x841A0000 // MMDC0_MDCTL // Mode register writes setmem /32 0x021b001c = 0x04088032 // MMDC0_MDSCR, MR2 write, CS0 setmem /32 0x021b001c = 0x00008033 // MMDC0_MDSCR, MR3 write, CS0 setmem /32 0x021b001c = 0x00048031 // MMDC0_MDSCR, MR1 write, CS0 setmem /32 0x021b001c = 0x09408030 // MMDC0_MDSCR, MR0 write, CS0 setmem /32 0x021b001c = 0x04008040 // MMDC0_MDSCR, ZQ calibration command sent to device on CS0 //setmem /32 0x021b001c = 0x0408803A // MMDC0_MDSCR, MR2 write, CS1 //setmem /32 0x021b001c = 0x0000803B // MMDC0_MDSCR, MR3 write, CS1 //setmem /32 0x021b001c = 0x00048039 // MMDC0_MDSCR, MR1 write, CS1 //setmem /32 0x021b001c = 0x09408038 // MMDC0_MDSCR, MR0 write, CS1 //setmem /32 0x021b001c = 0x04008048 // MMDC0_MDSCR, ZQ calibration command sent to device on CS1 setmem /32 0x021b0020 = 0x00005800 // MMDC0_MDREF // It is recommended for new board designs and for customer boards // to program these registers to a value of "0x00011117" // The DRAM ODT remains enabled and it is required to leave the DRAM ODT enabled setmem /32 0x021b0818 = 0x00011117 // DDR_PHY_P0_MPODTCTRL setmem /32 0x021b4818 = 0x00011117 // DDR_PHY_P1_MPODTCTRL setmem /32 0x021b0004 = 0x00025576 // MMDC0_MDPDC with PWDT bits set setmem /32 0x021b0404 = 0x00011006 // MMDC0_MAPSR ADOPT power down enabled, MMDC will enter automatically to self-refresh while the number of idle cycle reached. setmem /32 0x021b001c = 0x00000000 // MMDC0_MDSCR, clear this register (especially the configuration bit as initialization is complete)
Leave a comment:
-
I am using imx6 rex board layout in my custom board and I am getting following error message in stress tester V2.6 :
The Ram chip I am using is :
http://www.alliancememory.com/pdf/dd...016%20v1.0.pdf
Any idea what causes this error ?
============================================
DDR Stress Test (2.6.0)
Build: Nov 18 2016, 23:40:32
NXP Semiconductors.
============================================
============================================
Chip ID
CHIP ID = i.MX6 Dual/Quad (0x63)
Internal Revision = TO1.2
============================================
============================================
Boot Configuration
SRC_SBMR1(0x020d8004) = 0x00000000
SRC_SBMR2(0x020d801c) = 0x21000001
============================================
ARM Clock set to 1GHz
============================================
DDR configuration
BOOT_CFG3[5-4]: 0x00, Single DDR channel.
DDR type is DDR3
Data width: 64, bank num: 8
Row size: 15, col size: 10
Chip select CSD0 is used
Density per chip select: 2048MB
============================================
Current Temperature: 51
============================================
DDR Freq: 528 MHz
ddr_mr1=0x00000000
Start write leveling calibration...
running Write level HW calibration
Write leveling calibration completed, update the following registers in your initialization script
MMDC_MPWLDECTRL0 ch0 (0x021b080c) = 0x001F001F
MMDC_MPWLDECTRL1 ch0 (0x021b0810) = 0x001F001F
MMDC_MPWLDECTRL0 ch1 (0x021b480c) = 0x001F001F
MMDC_MPWLDECTRL1 ch1 (0x021b4810) = 0x001F001F
Write DQS delay result:
Write DQS0 delay: 31/256 CK
Write DQS1 delay: 31/256 CK
Write DQS2 delay: 31/256 CK
Write DQS3 delay: 31/256 CK
Write DQS4 delay: 31/256 CK
Write DQS5 delay: 31/256 CK
Write DQS6 delay: 31/256 CK
Write DQS7 delay: 31/256 CK
Starting DQS gating calibration
. HC_DEL=0x00000000 result[00]=0x11111111
. HC_DEL=0x00000001 result[01]=0x11111111
. HC_DEL=0x00000002 result[02]=0x11111111
. HC_DEL=0x00000003 result[03]=0x11111111
. HC_DEL=0x00000004 result[04]=0x11111111
. HC_DEL=0x00000005 result[05]=0x11111111
. HC_DEL=0x00000006 result[06]=0x11111111
. HC_DEL=0x00000007 result[07]=0x11111111
. HC_DEL=0x00000008 result[08]=0x11111111
. HC_DEL=0x00000009 result[09]=0x11111111
. HC_DEL=0x0000000A result[0A]=0x11111111
. HC_DEL=0x0000000B result[0B]=0x11111111
. HC_DEL=0x0000000C result[0C]=0x11111111
. HC_DEL=0x0000000D result[0D]=0x11111111
ERROR FOUND, we can't get suitable value !!!!
dram test fails for all values.
Error: failed during ddr calibrationLast edited by ranaya; 03-23-2017, 04:19 AM.
Leave a comment:
-
Hi Robert,
Can you please kindly share the NXP DDR Test tool parameters and .inc file content with me ?
Leave a comment:
-
In order to get the Uboot console output, should I need to feed correct RAM configurations to Uboot sources ?
Why it has only two frequencies 400 and 528MHz ?
Leave a comment:
-
Hi, I have one question about DRAM clock frequency field of the aid xsl. Why it has only two frequencies 400 and 528MHz ? Does it mean that although my RAM has 800MHz rate, it has to somehow operate at one of those two frequencies ?1 Photo
Leave a comment:
-
Hi Robert,
thanks for your reply. One thing I need to understand. In order to get the Uboot console output, should I need to feed correct RAM configurations to Uboot sources ?
Leave a comment:
-
ranaya, you can find a lot of info on the imx6rex.com. This is for OpenRex, but it is very similar for iMX6Rex Module:
- You need to run calibration to get the values: http://www.imx6rex.com/software/how-...ation-on-imx6/
- Web: http://www.imx6rex.com/open-rex/soft...-custom-board/
- The file with memory controller values: mx6q_4x_mt41j256.cfg
Possibly, this could help you - it's an online course which I created for people to help to start with software for Rex projects:
Leave a comment:
Leave a comment: