Recently, I had the opportunity to test the low cost USBWigger on a iMX51 EVK (Babbage Board). I was hoping to overcome the need to purchase/beg/borrow an ARM RealView system as it costs several thousands of dollars. The USBWiggler, on the other hand, retails at about $250. A faster version, called USB2Demon, offers faster data transfer at a slightly higher cost. Both units connect to the JTAG port of the EVK, and the other end connects to the host PC running Window. In my case, I am using Windows XP SP3.
So far, the device seems to work reasonably well. It has some limitations, as will be explained later on. I was able to connect and examine internal SRAM memory, view the ARM registers, single step, and run the code.
The software that comes with the device is called OCD Commander. It's written in Java. It's not a full-featured debugger, but it does allow you to upload code or macro commands, so it should be able to bring up a bare-metal system, set the clocks, power management, DDR registers, etc.
Sounds good, right? But there are some issues you need to be aware of before using this.
You need to short one of the resistors on the EVK to let the Wiggler firmware sense voltage correctly. The resistor is R341. It's located on the top of the PCB between the JTAG connector and the small button battery. I simply soldered a wire to short the resistor.
You need to boot up with Uboot or RedBoot. This is the limitation I spoke of earlier. With no bootloader present, the EVK will never "turn on". I suspect this is because the internal boot ROM is not enabling the PMIC or does not disable the WDT, or something. But whatever the bootloader is doing, it allows the burn to turn on and stay on. Hopefully, I find a way to allow JTAG connections without first running a bootloader.
You need to configure the OCDCommander to talk with the JTAG logic inside the ARM. In the case of the iMX51, you need to define "multiple devices." When the OCD Commander Setup window appears, click the check box Multiple Devices. then add the following three devices:
Index Vendor CPU IR Len Bypass Op DR Bypass Len
0 FREESCALE iMX51x - - -
1 OtherJtagDevice - 4 f 1
2 FREESCALE iMX_SJC - - -
If you look in the help file under OcdCommander Configuration, you'll see how to set up for other ARM processors (such as iMX23, etc).
NOTE: When you first apply power to the EVK or Wiggler, it won't boot. I think the reason is that the Wiggler is holding the reset line. To fix this, run one of the provided programs. You can use OCDCommander, but you'll have to run it again. I use USBDemon Finder. Once you do this, the Wiggler should connect.
When you first turn on the EVK, and with Uboot or RedBoot started, disable the booting of Linux by using Ctrl-C from the terminal program to get the bootloader prompt. Or change the bootloader script to stop at the prompt and not load the OS.
When you get the message, "Initialized target at speed1: 6 MHz", you are connected.
At this point, click on the Halt button. Once the processor is halted, you can view memory and registers.
For example, to view the first 100 16-bit values of internal SRAM, type the command,
half 0x1ffe0000 100
to run a ram test on the first 0x100 locations, issue the command:
ramtest 0x1ffe0000 0x100 2
Curisously, this test fails if you use a "4" instead of a "2", signifying that the test should run using 32-bit words. I guess internal SRAM is x16. Can anyone verify this?
If you have downloaded our hardware support package 9.1 from : http://www.macraigor.com/Eclipse/index.htm
you can find an example project with a simple board setup gdbinit file at :
/usr/local/macraigor/EclipseDemos/Helios/ARM/Freescale_iMX53_LOCO. (linux) or
c:\cygwin\usr\local\macraigor\EclipseDemos\Helios\ARM\Freescale_iMX53_LOCO (windows)
the readme in this directory goes through the build/download/run process step by step.
Hi Brad,
Thanks for your reply. I tried this as well for i.mx515. All these ways I tried.
Through USB OTG (Mini USB AB) also used to charge the battery. When we connect my laptop to board my laptop recoznizes i.MX as i.MX515TO2 in device driver information. So connectivity is fine I believe. Then by opening manufacturing tool I could see 4 USB section always monitoring for connection. But does not show any devices.
I am not sure how UART or JTAG is used with this manufacturing tool. UART is working fine and I could see some output of OBDS downloaded thru JTAG usbwiggler. Not really sure how I can program our NOR flash.
Brad Stewart said:
Try using the Manufacturing Tool, available on the download tab in the iMX515 page. This supercedes the ATK. It may support your Windbond SPI.
Yogesh said:Hi,
We have our custom i.MX515 board with all similar peripherals but from diferent vendors. One of them is NOR flash from Winbond. (EVK has from ATMEL). Can anyone guide me how to program or is it possible to program NOR flash thru SPI using usbWiggler. I tried using ATK but it says wrong flash or incorrect flash which is anticipated.
I believe uboot.bin should be same for all i.MX515 with NOR flash (SPI interfaced with i.MX515)
Try using the Manufacturing Tool, available on the download tab in the iMX515 page. This supercedes the ATK. It may support your Windbond SPI.
Yogesh said:
Hi,
We have our custom i.MX515 board with all similar peripherals but from diferent vendors. One of them is NOR flash from Winbond. (EVK has from ATMEL). Can anyone guide me how to program or is it possible to program NOR flash thru SPI using usbWiggler. I tried using ATK but it says wrong flash or incorrect flash which is anticipated.
I believe uboot.bin should be same for all i.MX515 with NOR flash (SPI interfaced with i.MX515)
Wow... fast reply... thanks.
I don't use cygwin but ubuntu. I have errors to install OCDremote...
include/linux/key.h:129: error: field 'sem' has incomplete type
make[4]: *** [/usr/local/macraigor/WinDriver/redist/wdusb_linux.o] Error 1
make[3]: *** [_module_/usr/local/macraigor/WinDriver/redist] Error 2
make[3]: Leaving directory `/usr/src/linux-headers-2.6.32-28-generic'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/usr/local/macraigor/WinDriver/redist'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/local/macraigor/WinDriver/redist'
make: *** [all] Error 2
dpkg: error processing mcgr-hwsupport (--install):
subprocess installed post-installation script returned error exit status 2
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Errors were encountered while processing:
mcgr-hwsupport
Verify that you have installed the linux source on your system (via apt-get) before runlning the dpkg.
See the "http://macraigor.com/Eclipse/eclipse_faq.htm#mcgr DEB on Ubuntu" Eclipse FAQ answer
on our Eclipse Helios web page for more information.
Hi,
We have our custom i.MX515 board with all similar peripherals but from diferent vendors. One of them is NOR flash from Winbond. (EVK has from ATMEL). Can anyone guide me how to program or is it possible to program NOR flash thru SPI using usbWiggler. I tried using ATK but it says wrong flash or incorrect flash which is anticipated.
I believe uboot.bin should be same for all i.MX515 with NOR flash (SPI interfaced with i.MX515)
Wow... fast reply... thanks.
I don't use cygwin but ubuntu. I have errors to install OCDremote...
include/linux/key.h:129: error: field 'sem' has incomplete type
make[4]: *** [/usr/local/macraigor/WinDriver/redist/wdusb_linux.o] Error 1
make[3]: *** [_module_/usr/local/macraigor/WinDriver/redist] Error 2
make[3]: Leaving directory `/usr/src/linux-headers-2.6.32-28-generic'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/usr/local/macraigor/WinDriver/redist'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/local/macraigor/WinDriver/redist'
make: *** [all] Error 2
dpkg: error processing mcgr-hwsupport (--install):
subprocess installed post-installation script returned error exit status 2
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Errors were encountered while processing:
mcgr-hwsupport
In response:
I'm now wondering what I can do for actually debugging.
If you don't want to use Eclipse, you can use arm-elf-gdb from the command line. The example iMX51_ADS
project readme goes though how to do this.
Then what kinds of settings I should do for eclipse?
After you install Ocdremote the director :
c:/cywin/usr/local/macraigor/EclipseDemos/ARM/Freescale_iMX515_ADS
contains an example Eclipse and/or gcc/gdb project with source, makefile, ldscript, readme, and gdbinit.
The readme will tell you how to build and run the project on the iMX515_ADS board. You can then modify the
example project Makefile, etc, to build and run your image.
Our Eclipse FAQ page has a question/answer on how to clone/rename one of our example
Eclipse/GNU projects to a new "your" Eclipse / gnu project.
Hi, I'm a newbie here and macraigor jtag tools.
Using OCD commander, I can download u-boot and run throughout your article. Thanks..
I'm now wondering what I can do for actually debugging.
macraigor website says to use eclipse. I actually hate eclipse as my machine is very slow and it often shouts java errors.
Anyway,. I don't know what I should start now...
I downloaded eclipse c/c++ ide and created workspaces... set up arm toolchains and built... ... and I have a binary and srec code.
With built srec code, I can download it and run thru again OCD Commander. Which means toolchains set up correctly.. :)
Then, what now? I wanna run it on eclipse so that I can break points and see reg status and etc.
I Downloaded Linux 32 OCDRemote v9.0 and trying to install it..
Then what kinds of settings I should do for eclipse?
Any instructions would be helpful for me..
Hi Brad, it is really a nice article to start the usbWiggler with i.MX51 Eval Kit.
I cannot boot the kit after using USBDemon Finder.
Could you please tell me more detail how to boot this kit with usbWiggler.
Thank you