Has anyone had success utilizing application examples provided in the iMX6 Platform SDK on the Boundary Devices iMX6 SABRE Lite Hardware from an SD card?
I was successfully able to install and configure the arm-none-eabi GNU toolchain and build the complete SDK. Given that the SABRE Lite is not one of the specific boards supported in the SDK, I tried running a few of the sample applications (Ping, Power Modes Test) for different boards with no luck. No output on the console and no network traffic being sent. I tried using both the Linux dd example and the cfimager for programming the SD card.
I can confirm the device is booting successfully off the full size SD slot (using instructions provided here Boards/MX6QSabreLite - Linaro Wiki), as I was capable of running a Linaro Ubuntu Desktop image.
Thank you
Hi Tyler,
Sure. It's here in mxc_fec.c:
https://github.com/boundarydevices/u-boot-imx6/blob/production/drivers/net/fec_mxc.c
Yes, went through all that before. It looks like i'm semi-working now. One problem was the SDK test wasn't allowing enough time for the link to come up before checking status, so I'm actually having success with a straight cable right now. Not understanding why my loopback setup (as documented in Freescale's SDK unit test pdf) still fails. No link for him.
The problem turned out to be with the Micrel PHY - by design. Spoke with an FAE. It won't work with the loopback cable, so i've moved on. Now i'm having trouble with the iMX6 MAC. Can't get it to consistently send packets. It only occasionally (one out of ten times) will set the transmit buffer complete interrupt in the EIR when I send packet. This is true in both standard and loopback config of the PHY.
Hey, have you guys using the Sabre Lite had any issues with the USB OTG device test in the SDK? I'm trying to run that on my Nitrogen but having weird problems. Windows host doesn't recognize the device. The device is getting a setup packet but the fields are all zeroes. Also, seem to be failing on USB transmits from the device.
Hi Rafal,
If you look in the U-Boot sources, you'll see that there are two sets of pads for the ethernet PHY
(enet_pads1 and enet_pads2):
u-boot-imx6/board/boundary/nitrogen6x/nitrogen6x.c at staging · boundarydevices/u-boot-imx6 · G...
And if you look further into their use, you'll see that the first is used before the PHY reset line
is asserted and de-asserted:
u-boot-imx6/board/boundary/nitrogen6x/nitrogen6x.c at staging · boundarydevices/u-boot-imx6 · G...
This is because the PHY address is determined by the state of the pins when coming out of reset
(GP3:23 on SABRE Lite). If you're not doing this in your startup code, the PHY may be present at
a different address.
Hi Eric,
Thank you for your hints. I followed the path and successfully managed to run network on my SABRE Lite board.
The following changes to Li's modifications were required:
1. Fixes in ethernet PHY:
a. setting of PHY address and operation mode in KSZ9021RN required configuring RD0-3, RXC and RX_CTL pins as GPIOs, so initial pin muxing function is modified in enet_iomux_config.c file generated by IOMUXTool. Similar thing could be done in gpio*_iomux_config.c, but I made it 'by hand' and wanted to keep the enet interface in one place.
b. power-up and reset of KSZ9021RN on SABRE Lite is modified so that the phy_addr is correct (6 in this case). After setting of phy_addr, the RD0-3, RXC and RX_CTL are reconfigured as RGMII Rx interface. To do that a new function is added to enet_iomux_config.c
c. changes in enet unit test and in lwIP stack (used e.g. by httpd) related to KSZ9021RN initialization and ethernet connection checking
2. Sourcery cross toolchain paths set as were in original SDK provided by Freescale. The path is exported by user depending on the installation.
The patch is attached to this post, so feel free to test it :smileyhappy:
To use it, one should first apply Li's patch to the original SDK and then apply this one.
Best regards,
Rafal
Note for people wanting to apply these two patches:
Go to your SDK main directory where you issue the build command. For the first (Li's, above) use patch -p1 <patch file location>
For the next one adding ethernet, use patch -p2 <enet patch file location>
Going to check these out soon. I'm using a Nitrogen6x board but i'm hoping these patches fix some of my problems, since the boards are supposedly so similar.
Could you please post your patch for running platform sdk on sabre lite?
Thanks!
my steps:
1] use IOMux.exe generation board/sabre_lite/* files by sabre_lite_reva_iomux.xml
2] change HW_UART4 of ./common/hardware_modules.c:49 to HW_UART2
3] add a new file in ./board/sabre_lit/dcd.c
4] copy DCD-command data from flash-header.S of u-boot into the dcd.c
5] build : ./tools/build_sdk -t mx6dq -b sabre_lite -v a
6] select serial_downloader mode on board
7] plug the usb cable
8] run : imx_usb ./output/mx6dq/ping/sabre_lite_rev_a/ping.bin
but,,,,, the console cannot output any information.................
Will you please share this entire folder (sabre_lite)?
haha, the all apps in SDK can work on Sabre Lite
Hello Li,
did you build imx6_platform_sdk_v1.1.0 ? so it successfully booted on SABRELite
yes。
the key step is copy DCD-Items from u-boot。
Li Baizhang
在 2013-8-3,下午5:42,nehal omran <admin@community.freescale.com> 写道:
<https://community.freescale.com/>
<https://community.freescale.com/> i.MX6 Platform SDK w/ SABRE Lite
reply from nehal
omran<https://community.freescale.com/people/nehaly.omran?et=watches.email.thread>in
i.MX Community - View the full
discussion<https://community.freescale.com/message/343179?et=watches.email.thread#343179>
i have u-boot from boundary devices git repo.
i have DCD Commands in *.cfg files in U_BOOT_ROOT/board/boundary/nitrogen6x/*.cfg
i think,if you please, it would better to share your patch
Many thanks
Hi,
It looks like your build, and SD card programming are all fine.
Unfortunately, for any of the examples to run, you need to make major modifications to the code. Essentially, you have to completely remap all the hardware differences between the Sabre Lite and the Sabre SDB/SDP.
In particular, you need to redo the DDR initialization (unless you run some small examples from internal RAM).
Maybe someone has already done this, and can help. Another option would be to revert back to one of the (very) old versions of the SDK (called PLATLIB at the time), that supported the Sabre Lite.
Regards,
Rod.