| FORUM

FEDEVEL
Platform forum

PCB Stack Impedance issue

huypq6 , 03-30-2017, 03:53 AM
Hi there,
I am preparing to design an iMX6UL development kit.
My PCB stack is 4 layer.

L1 (signal)
L2 (GND)
L3 (POWER)
L4 (signal)

Should i have to control impedance on both of layer when routing DDR3? Assume that the track what has 50Ohm impedance in layer 1 is 0.12 mm width, but 0.12mm track is not 50Ohm impedance in layer 4. So that what will i have problem if i route 0.12mm track for DDR3 signal in layer 4?

Thank you for your help!
mairomaster , 03-30-2017, 07:46 AM
You definitely need impedance control on all layers where you are routing DDR3 signals. L4 will normally use the L3 power layer as a reference, so you should be having the same track parameters.

Despite the reference design for iMX6UL from NXP being done on 4 layers (if I remember correctly), this puts some limitations on what you can do on the board and will be quite challenging as well, if you don't have much experience designing such boards.
robertferanec , 03-30-2017, 11:28 AM
I agree with @mairomaster.

PS: This iMX6UL design confused a lot of people. If you would like to use POWER as a reference plane, be sure there are a lot of decoupling capacitors between the plane and GND and also be sure this plane is above all the memory tracks.
huypq6 , 03-30-2017, 09:24 PM
Thank you @mairomaster and @robertferanec,
Exactly, the reference layout is 4 layers. I checked reference layout and reference design and i did not find some decoupling capacitor such C101, C102. I guest that it was be removed.

This is my very first high speed design. So that i will try to route with 6 layers PCB. Base on @robertferanec 's guide in his course, I define my PCB stack like attachment.

Do you have any comment for my further work?
robertferanec , 03-31-2017, 12:45 PM
6 layers could help. Be sure you know track geometry on top and bottom layer for all the impedances you need. Double check the stackup and impedances with your PCB manufacturer.
huypq6 , 06-28-2017, 01:23 AM
@robertferanec Thank you, I worked with 8 layers.
huypq6 , 06-29-2017, 09:48 PM
i got the pcb.
Now, i have trouble while debug it. I used Mfg tool from NXP.
when i upload uboot into kit, i received error about initializing memory. Below is MFG log and config. Pls, give me some advice in this case.

MFG log
Code:
DLL version: 2.6.2Friday, June 30, 2017 10:22:44   Start new loggingModuleID[2] LevelID[10]: CMyExceptionHandler thread is runningModuleID[2] LevelID[1]: new MxHidDeviceClassModuleID[2] LevelID[10]: new MxHidDevice[04718FB8]ModuleID[2] LevelID[1]: new MxHidDeviceClassModuleID[2] LevelID[10]: new MxHidDevice[04719488]ModuleID[2] LevelID[1]: new MxHidDeviceClassModuleID[2] LevelID[10]: new MxHidDevice[047BF6D8]ModuleID[2] LevelID[1]: new MxHidDeviceClassModuleID[2] LevelID[10]: new MxHidDevice[04819050]ModuleID[2] LevelID[1]: new MxHidDeviceClassModuleID[2] LevelID[10]: new MxHidDevice[04842A38]ModuleID[2] LevelID[1]: new MxHidDeviceClassModuleID[2] LevelID[10]: new MxHidDevice[0483D730]ModuleID[2] LevelID[10]: Device Manager thread is runningModuleID[2] LevelID[1]: Can't set m_hStopEvent before it initialized or it already stopModuleID[2] LevelID[10]: CmdOperation[0] device chagned and reset to state 0ModuleID[2] LevelID[10]: CmdOperation[0], skip current command, so SetEvent(hDevCanDeleteEvent)ModuleID[2] LevelID[10]: CmdOperation[0], skip current command, so SetEvent(hDevCanDeleteEvent)ModuleID[2] LevelID[10]: CmdOperation[0], skip current command, so SetEvent(hDevCanDeleteEvent)ModuleID[2] LevelID[10]: CmdOperation[0], skip current command, so SetEvent(hDevCanDeleteEvent)ModuleID[2] LevelID[10]: CmdOperation[0], skip current command, so SetEvent(hDevCanDeleteEvent)ModuleID[2] LevelID[10]: ExecuteCommand--Boot[WndIndex:0], File is C:\Users\Huypq6\Downloads\L4.1.15_1.0.0_ga-mfg-tools.tar\L4.1.15-1.0.0_ga-mfg-tools\mfgtools\Profiles\Linux\OS Firmware\firmware\u-boot-imx6ul14x14ddr3arm2_sd.imxModuleID[2] LevelID[1]: MxHidDevice::Write() Error writing to device 0x1f.ModuleID[2] LevelID[1]: Failed to initialize memory!ModuleID[2] LevelID[1]: PortMgrDlg(0)--MxHidDevice--Command Boot excute failedModuleID[2] LevelID[10]: CmdOperation[0], current command executed failed, so SetEvent(hDevCanDeleteEvent)ModuleID[2] LevelID[10]: ExecuteCommand--Boot[WndIndex:0], File is C:\Users\Huypq6\Downloads\L4.1.15_1.0.0_ga-mfg-tools.tar\L4.1.15-1.0.0_ga-mfg-tools\mfgtools\Profiles\Linux\OS Firmware\firmware\u-boot-imx6ul14x14ddr3arm2_sd.imxModuleID[2] LevelID[1]: MxHidDevice::Write() Error writing to device 0x1f.ModuleID[2] LevelID[1]: Failed to initialize memory!ModuleID[2] LevelID[1]: PortMgrDlg(0)--MxHidDevice--Command Boot excute failedModuleID[2] LevelID[10]: CmdOperation[0], current command executed failed, so SetEvent(hDevCanDeleteEvent)ModuleID[2] LevelID[10]: ExecuteCommand--Boot[WndIndex:0], File is C:\Users\Huypq6\Downloads\L4.1.15_1.0.0_ga-mfg-tools.tar\L4.1.15-1.0.0_ga-mfg-tools\mfgtools\Profiles\Linux\OS Firmware\firmware\u-boot-imx6ul14x14ddr3arm2_sd.imxModuleID[2] LevelID[1]: MxHidDevice::Write() Error writing to device 0x1f.ModuleID[2] LevelID[1]: Failed to initialize memory!ModuleID[2] LevelID[1]: PortMgrDlg(0)--MxHidDevice--Command Boot excute failedModuleID[2] LevelID[10]: CmdOperation[0], current command executed failed, so SetEvent(hDevCanDeleteEvent)ModuleID[2] LevelID[10]: ExecuteCommand--Boot[WndIndex:0], File is C:\Users\Huypq6\Downloads\L4.1.15_1.0.0_ga-mfg-tools.tar\L4.1.15-1.0.0_ga-mfg-tools\mfgtools\Profiles\Linux\OS Firmware\firmware\u-boot-imx6ul14x14ddr3arm2_sd.imxModuleID[2] LevelID[1]: MxHidDevice::Write() Error writing to device 0x1f.ModuleID[2] LevelID[1]: Failed to initialize memory!ModuleID[2] LevelID[1]: PortMgrDlg(0)--MxHidDevice--Command Boot excute failedModuleID[2] LevelID[10]: CmdOperation[0], current command executed failed, so SetEvent(hDevCanDeleteEvent)ModuleID[2] LevelID[10]: DeviceManager::DevChangeWnd::OnDeviceChange() - DEVICE_REMOVAL_EVT(\\?\USB#VID_15A2&PID_007D#6&106a4439&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed})ModuleID[2] LevelID[10]: DeviceManager::DevChangeWnd::OnDeviceChange() - endModuleID[2] LevelID[10]: DeviceManager::OnMsgDeviceEvent() - DEVICE_REMOVAL_EVT(\\?\USB#VID_15A2&PID_007D#6&106a4439&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed})ModuleID[2] LevelID[10]: DeviceClass::FindDeviceByUsbPath--DeviceListType_Current, _devices.size: 1ModuleID[2] LevelID[10]: DeviceClass::FindDeviceByUsbPath--DeviceListType_Current, devInstPathToFind: USB\VID_15A2&PID_007D\6&106A4439&0&2, _deviceInstanceID: USB\VID_15A2&PID_007D\6&106A4439&0&2ModuleID[2] LevelID[10]: DeviceClass::FindDeviceByUsbPath--DeviceListType_Current, Find the deviceModuleID[2] LevelID[10]: DeviceManager::OnMsgDeviceEvent() - DEVICE_REMOVAL_EVT,[MxHidDeviceClass] vid_15a2&pid_007d, Hub:6-Port:2ModuleID[2] LevelID[10]: DeviceManager::OnMsgDeviceEvent() - DEVICE_REMOVAL_EVT, NotifyModuleID[2] LevelID[10]: CmdOpreation[0]--OnDeviceChangeNotify, Volume Arrive/Remove or Device Arrive/RemoveModuleID[2] LevelID[10]: CmdOpreation[0]--OnDeviceChangeNotify, m_p_usb_port is not NULL, so only refreshModuleID[2] LevelID[10]: CmdOpreation[0]--OnDeviceChangeNotify, Volume/Device RemoveModuleID[2] LevelID[1]: CmdOpreation[0]--set m_hDeviceRemoveEvent.ModuleID[2] LevelID[10]: CmdOpreation[0]--WaitforEvents device remove1ModuleID[2] LevelID[10]: DeviceManager::OnMsgDeviceEvent()-DEVICE_REMOVAL_EVT, hDevCanDeleteEvent has been setModuleID[2] LevelID[10]: delete MxHidDevice[0483D730]
MFG config
Code:
[profiles]chip = Linux[platform]board = SabreSD[LIST]name = SDCard[variable]board = sabresdmmc = 0sxuboot=sabresdsxdtb=sdb7duboot=sabresd7ddtb=sdb6uluboot=14x14ddr3arm26uldtb=14x14-ddr3-arm2ldo=plus=initramfs=fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-bootseek = 1sxnor=qspi27dnor=qspi16ulnor=qspi1nor_part=0
robertferanec , 06-30-2017, 03:08 AM
I am not sure. I do not use latest MFG tools. I use this: http://www.imx6rex.com/open-rex/soft...setup-mfgtool/
Use our interactive Discord forum to reply or ask new questions.
Discord invite
Discord forum link (after invitation)

Didn't find what you were looking for?