srimech.com • Jim MacArthur
Robots, automata and electronics


HomeCVContact

Modified BigTrak

Zeon Tech have remade the BigTrak. I'd been wanting one of these for quite a while before the remake came around, so I decided I had to have one. They're pretty cheap - going for about 21 quid on Amazon at the moment - and a fairly big and sturdy platform to build an autonomous vehicle on. I wrote a blog entry about tearing down the BigTrak when I received it.

IGEP's V2 board fits neatly into the space where the keypad was. The IGEP is a board similar to the BeagleBoard, but quite a bit smaller and featuring onboard WiFi. Otherwise it's similar - a Cortex-A8 ARM processor running at 720MHz, C64 graphics, 512MB of RAM, DVI, sound, a real ethernet socket and USB. This is usable as a desktop PC if you load Ubuntu onto it. It's also pretty low power, drawing about 5W at full load, which is great for a mobile application. Unfortunately, I found getting an OS with all the features I wanted quite tricky.

IGEP Hardware

The only problem I had with the IGEP was that it didn't seem to power USB peripherals from the main USB socket. I needed to attach a powered hub to use my USB wireless keyboard. Apparently the OTG socket (the one with the smaller socket) does power devices, so you might want to try that one.

IGEP Software

There are a number of suggestions for operating system setups at IGEP's wiki but none of them quite fit my bill. The instrutcions for Ubuntu 9.04 worked and produced a nicely working desktop computer with WiFi, but lacked the cdc-acm module which was necessary to talk to the mbed controller. I couldn't get the Ubuntu 10.04 image to boot at all.

My best success was with the OpenBricks distribution, which is related to the Geexbox distribution mentioned on the wiki. OpenBricks will cross-compile a new linux distribution from scratch. It can specifically target the IGEPv2.


This is a list of the steps I took to get a bootable image with ttyACM and WiFi support. I've written this down from memory, and there may be steps missing - I will try and go through this from scratch to check it in future.

  • hg clone http://hg.openbricks.org/openbricks
  • cd openbricks
  • make menuconfig
  • Set the options you want for the image, ignoring kernel/module options. You can remove most of the networking services so save time, but enable Telnet and make it start on boot.
  • make
  • scripts/clean busybox; scripts/build busybox
  • cd packages/busybox
  • make menuconfig here; set it to build udhcpc as well as anything else you think you might need
  • cd ../.. back to the openbricks top level
  • make

  • Set up a microSD card with a FAT boot partition and an EXT2/3 root partition, using the script at http://www.sakoman.com/OMAP3/a-script-for-partitioningformatting-a-bootable-sdmicrosd-card.html
  • Now, you should have a good root image in binaries/binaries.>something>/
  • Copy this to the rootfs
  • Find the linux kernel and modules distribution on http://labs.igep.es/index.php/The_Linux_kernel. Extract the linux image as rootfs/boot/uImage and untar the modules tarball so it ends up in rootfs/var.
  • Copy rootfs/boot/uImage and rootfs/boot/boot.ini to bootfs.
  • Get the Marvell wireless drivers from http://extranet.marvell.com/drivers/driverDisplay.do?driverId=203. Read and accept the licence, then download the zip file. Unzip it and untar the tar file (not the tgz file) and you should have a FwImage directory. In that directory, rename helper_sd.bin to sd8686_helper.bin. Copy both .bin files to /firmware and /lib/firmware on your rootfs.
  • If you think you'll need any extra modules to start your board, add them to rootfs/etc/modules. I needed "ehd-ehci" to make my keyboard work. The board should always be accessible via telnet over wired ethernet, so you should always have a way in even if normal input devices don't work.
  • sync;sync and unmount both partitions, then put your microSD card into the IGEP and start it up.

Starting WiFi

The instructions at IGEP Labs are helpful here. You should already have the wireless drivers. You should have sd8686.bin and sd8686_helper.bin in /lib/firmware and /firmware (only one is necessary, but I don't know which one)

Create a wpa_supplicant.conf on your desktop with wpa_passphrase:

wpa_passphrase "your SSID" yourPassword > wpa_supplicant.conf

That creates the basic layout. You'll need to add "proto", "key mgmt" and "parwise"; the IGEP page suggests values for those, but I found I needed different settings and additionally the 'group' command. It will depend on your access point - trial and error got it for me.

This is my wpa_supplicant.conf:

network={
	ssid="ikaria"
	#psk=<passphrase>
	psk=<long string of hex digits>
	proto=WPA
	key_mgmt=WPA-PSK
	pairwise=TKIP
	group=TKIP
}

With that in /etc/wpa_supplicant, you should find that wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -d& will bring up wlan0. You'll then need to assign an IP address to it. Try udhcpc -iwlan0 to get an address and ifconfig wlan0 <ip address> to assign it to the adapter.

Since I want my card to start on boot, I chose a fixed IP address and put this into /etc/wifi:


wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -d&
sleep 60
ifconfig wlan0 192.168.80.216

You could write a script which parses the output of udhcpd to get the IP - but there's probably a better way to get DHCP working.

After that, it just remains to add something to /etc/init to get it started on boot. Create /etc/init/wifi.conf containing this:


author       "JimM"
start on started networking
script
sh /etc/wifi
end script

This is pretty dirty, but it works. Any suggestions on how to do this more neatly are welcome.

PSU

The other part I constructed is a switchmode power supply. This is based on a MIC4576-5 chip. There's a datasheet at http://pdf1.alldatasheet.com/datasheet-pdf/view/74603/MICREL/MIC4576-5.0BT.html (You'll need to click through a few links). I've just built the example application from that datasheet, on stripboard - the only slight oddity is having to drill slightly larger holes in the stripboard to fit the diode's leads through. I also attached a piece of sheet copper to the chip to act as heatsink, with some thermal transfer paste, and used that to mount the whole circuit. With the heatsink, this easily powers the IGEP, hub, mbed and motor controllers without getting warm, off a 7.2V NiCd racing pack.