While I might be a little late in getting it, I finally have it. The STM32F0-Discovery Kit. This little board is awesome! Besides having a ton of usable I/O pins, it has pads for your own crystal (PTH or SMT) and has a nice speed on it with no crystal. You can get 48Mhz with a internal 8MHz OSC. and a 6x PLL!
It sports the STM32F051R8, Here is what I think makes it stand out.
ARM 32-bit Cortex®-M0 CPU (48 MHz max)
64 Kbytes of Flash memory
8 Kbytes of SRAM with HW parity checking
Up to 55 fast I/Os (Up to 36 I/Os with 5 V tolerant capability)
Up to 11 timers
It also has 96-bit unique ID… perfect for security in reprogramming prevention.
5-channel DMA controller
1 × 12-bit, 1.0 μs ADC (up to 16 channels)
One 12-bit D/A converter (yes! a DAC ) I can see composite video in the future
As well as most other things you expect from a ARM type MCU. And its all packed on a nice PCB with a free Prototype PCB included! That should help a ton of people start off.
ST includes a on board programmer as usual. With the ability to use it as a standalone programmer. Which is awesome! Compared to the STM32F4-Discovery it’s a slight bit smaller but almost the same size.
Ok below you will see a video on how to go about using Narcissus to generate a image and u-boot stuff for our MicroSD card.
Ok I was going to write a whole thing on how to do this but it makes more sense to make a small video with captions. No sound sorry. I dont have one of those sexy over the internet voices 🙂
Also… I am usually listening to music when working on my PC its relaxing and helps me concentrate.
Some settings to know if you’re a pro already:
Create Partition #1: FILESYSTEM: FAT32 SIZE: 117.63MB (MAX) LABEL: BEAGLE FLAGS: BOOT, LBA Create Partition #2: FILESYSTEM: EXT3 SIZE: > 1GB LABEL: Angstrom FLAGS: Note: To install gparted - sudo apt-get install gparted
As you may know i got my hands on a Beagleboard-xM. This things seems so cool but is the most fustrating board i experienced. Perhaps that’s because im not that linux savvy.
From what can tell the most important first step in this stuff is booting the uSD(micro sd) card it came with. Which is simple… Make sure everything is plugged except power. The last thing you should plug is power… to avoid any voltage spikes.
Ok since i know my board works the next thing i wanted to do is create my own uSD card with linux and stuff. The way i see it is… YOU NEED LINUX… lets leave it at that. Without linux you will have headaches. I have linux installed in a VM and on a second PC/Laptop. I use the laptop for my work mainly because it has a built in SD reader which simplifies things a lot.
Ok from what i can tell the SD card has to have 2 partitions.
Partition #1. FAT32 (Should have BOOT & LBA flags) Should be at least 128MB to be safe.
Partition #2. EXT3 This should fill the rest of the card.
The FAT32 partition is what we would call the BOOT partition. It will hold the uImage (linux image) and some other files. Ill get into that when the time comes.
The EXT3 partition is what we would call the ROOTFS or Root Filesystem which will hold the actual linux filesystem and everything you ever do on this beast.
I would recommend getting a 4GB SD card for a good
performance amount of space. What i will be covering in the upcoming parts are:
1. How to Partition the SD card
2. Using Narcissus to build a test uImage and RootFS.
3. Loading SD card with our newly built uImage and RootFS.
4. Creating scripts for booting the board and placing them on SD card.
5. Testing our creation on live hardware.
Wish me luck. As this is something im learning on the fly and plan on explaining here to help others. There is documention online on this but nothing that good to get someone started up from nothing. I have had my board for about 2 days now and still have not been able to boot a custom linux file system. So as soon as i can… you can bet you all will be able to as well.
Copied from Putty:
Texas Instruments X-Loader 1.4.4ss (Aug 19 2010 - 02:49:27) Beagle xM Rev A Reading boot sector Loading u-boot.bin from mmc U-Boot 2010.03-dirty (Aug 20 2010 - 20:50:46) OMAP3630/3730-GP ES2.0, CPU-OPP2, L3-165MHz, OMAP3 Beagle board + LPDDR/NAND I2C: ready DRAM: 512 MB NAND: 0 MiB *** Warning - bad CRC or NAND, using default environment In: serial Out: serial Err: serial Probing for expansion boards, if none are connected you'll see a harmless I2C error. No EEPROM on expansion board Beagle xM Rev A Die ID #440000019ff80000015eeaa102011004 Hit any key to stop autoboot: 3 2 1 0 mmc1 is available The user button is currently PRESSED. reading user.scr 755 bytes read Running bootscript from mmc ... ## Executing script at 80200000 mmc1 is available reading ramdisk.gz 19960110 bytes read reading uImage 3190568 bytes read Booting from ramdisk ... ## Booting kernel from Legacy Image at 80200000 ... Image Name: Angstrom/2.6.32/beagleboard Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 3190504 Bytes = 3 MB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Uncompressing Linux................................................................................................................................................................................................................ done, booting the kernel. [ 0.000000] Linux version 2.6.32 (ubuntu@ip-10-204-115-71) (gcc version 4.3.3 (GCC) ) #3 PREEMPT Wed Aug 18 15:53:03 UTC 2010 [ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7f [ 0.000000] CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache [ 0.000000] Machine: OMAP3 Beagle Board [ 0.000000] Memory policy: ECC disabled, Data cache writeback [ 0.000000] OMAP3630/DM3730 ES1.0 (l2cache iva sgx neon isp 192mhz_clk ) [ 0.000000] SRAM: Mapped pa 0x40200000 to va 0xfe400000 size: 0x100000 [ 0.000000] Reserving 16777216 bytes SDRAM for VRAM [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 117760 [ 0.000000] Kernel command line: console=tty0 console=ttyS2,115200n8 mem=80M@0x80000000 mem=384M@0x88000000 mpurate=1000 buddy=none camera=lbcm3m1 vram=16M omapfb.vram=0:8M,1:4M,2:4M omapfb.mode=dvi:1024x768MR-16@60 omapdss.def_disp=dvi root=/dev/ram0 rw ramdisk_size=131072 initrd=0x88000000,128M rootfstype=ext2 [ 0.000000] Beagle expansionboard: none [ 0.000000] Beagle cameraboard: lbcm3m1 [ 0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes) [ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.000000] Memory: 80MB 384MB = 464MB total [ 0.000000] Memory: 316288KB available (5880K code, 671K data, 204K init, 0K highmem) [ 0.000000] Hierarchical RCU implementation. [ 0.000000] NR_IRQS:402 [ 0.000000] Clocking rate (Crystal/Core/MPU): 26.0/332/600 MHz [ 0.000000] Reprogramming SDRC clock to 332000000 Hz [ 0.000000] GPMC revision 5.0 [ 0.000000] IRQ: Found an INTC at 0xfa200000 (revision 4.0) with 96 interrupts [ 0.000000] Total of 96 interrupts on 1 active controller [ 0.000000] OMAP GPIO hardware version 2.5 [ 0.000000] OMAP clockevent source: GPTIMER12 at 32768 Hz [ 0.000000] Console: colour dummy device 80x30 [ 0.000000] console [tty0] enabled [ 0.000000] Calibrating delay loop... 498.87 BogoMIPS (lpj=1945600) [ 0.000000] Mount-cache hash table entries: 512 [ 0.000000] CPU: Testing write buffer coherency: ok [ 0.000000] tmpfs: No value for mount option 'mode' [ 0.000000] devtmpfs: initialized [ 0.000000] regulator: core version 0.5 [ 0.000000] NET: Registered protocol family 16 [ 0.000000] Beagle cameraboard: registering i2c2 bus for lbcm3m1 [ 0.000000] Found NAND on CS0 [ 0.000000] Registering NAND on CS0 [ 0.000000] Unable to get DVI reset GPIO [ 0.000000] omap_init_mbox: platform not supported [ 0.000000] Target VDD1 OPP = 4, VDD2 OPP = 2 [ 66.129547] OMAP DMA hardware revision 5.0 [ 66.135864] bio: create slab <bio-0> at 0 [ 66.137145] SCSI subsystem initialized [ 66.138519] usbcore: registered new interface driver usbfs [ 66.138671] usbcore: registered new interface driver hub [ 66.138854] usbcore: registered new device driver usb [ 66.139251] i2c_omap i2c_omap.1: bus 1 rev4.0 at 2600 kHz [ 66.141937] twl4030: PIH (irq 7) chaining IRQs 368..375 [ 66.141998] twl4030: power (irq 373) chaining IRQs 376..383 [ 66.142303] twl4030: gpio (irq 368) chaining IRQs 384..401 [ 66.144012] regulator: VUSB1V5: 1500 mV normal standby [ 66.144256] regulator: VUSB1V8: 1800 mV normal standby [ 66.144500] regulator: VUSB3V1: 3100 mV normal standby [ 66.148132] twl4030_usb twl4030_usb: Initialized TWL4030 USB module [ 66.148559] regulator: VMMC1: 1850 <--> 3150 mV normal standby [ 66.148834] regulator: VDAC: 1800 mV normal standby [ 66.149078] regulator: VPLL2: 1800 mV normal standby [ 66.149322] regulator: VSIM: 1800 <--> 3000 mV normal standby [ 66.149688] regulator: VAUX3: 1800 mV normal standby [ 66.150054] regulator: VAUX4: 1800 mV normal standby [ 66.150238] i2c_omap i2c_omap.2: bus 2 rev4.0 at 400 kHz [ 66.157714] i2c_omap i2c_omap.3: bus 3 rev4.0 at 100 kHz [ 66.158935] Switching to clocksource 32k_counter [ 66.167877] musb_hdrc: version 6.0, musb-dma, otg (peripheral+host), debug=0 [ 66.168212] musb_hdrc: USB OTG mode controller at fa0ab000 using DMA, IRQ 92 [ 66.168243] musb_hdrc musb_hdrc: MUSB HDRC host driver [ 66.168395] musb_hdrc musb_hdrc: new USB bus registered, assigned bus number 1 [ 66.168548] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 [ 66.168609] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 66.168640] usb usb1: Product: MUSB HDRC host driver [ 66.168670] usb usb1: Manufacturer: Linux 2.6.32 musb-hcd [ 66.168731] usb usb1: SerialNumber: musb_hdrc [ 66.169372] hub 1-0:1.0: USB hub found [ 66.169433] hub 1-0:1.0: 1 port detected [ 66.170501] NET: Registered protocol family 2 [ 66.170745] IP route cache hash table entries: 4096 (order: 2, 16384 bytes) [ 66.171325] TCP established hash table entries: 16384 (order: 5, 131072 bytes) [ 66.171722] TCP bind hash table entries: 16384 (order: 4, 65536 bytes) [ 66.171966] TCP: Hash tables configured (established 16384 bind 16384) [ 66.171997] TCP reno registered [ 66.172058] UDP hash table entries: 256 (order: 0, 4096 bytes) [ 66.172088] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) [ 66.172363] NET: Registered protocol family 1 [ 66.172790] RPC: Registered udp transport module. [ 66.172851] RPC: Registered tcp transport module. [ 66.172882] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 66.173187] Trying to unpack rootfs image as initramfs... [ 66.176055] rootfs image is not initramfs (no cpio magic); looks like an initrd [ 66.741271] Freeing initrd memory: 131072K [ 66.742065] omap-iommu omap-iommu.0: isp registered [ 66.743927] VFS: Disk quotas dquot_6.5.2 [ 66.744049] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 66.745239] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 66.746124] JFFS2 version 2.2. (NAND) (SUMMARY) Â© 2001-2006 Red Hat, Inc. [ 66.746948] msgmni has been set to 874 [ 66.750671] alg: No test for stdrng (krng) [ 66.750976] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254) [ 66.751037] io scheduler noop registered [ 66.751068] io scheduler deadline registered [ 66.751220] io scheduler cfq registered (default) [ 66.807617] OMAP DSS rev 2.0 [ 66.807678] OMAP DISPC rev 3.0 [ 66.807769] OMAP VENC rev 2 [ 66.808013] OMAP DSI rev 1.0 [ 67.144470] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 67.162353] serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654 [ 67.179565] serial8250.1: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654 [ 67.196746] serial8250.2: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654 [ 67.796722] console [ttyS2] enabled [ 67.806976] brd: module loaded [ 67.813385] loop: module loaded [ 67.817687] omap2-nand driver initializing [ 67.822113] No NAND device found!!! [ 67.825836] No NAND device found!!! [ 67.830352] usbcore: registered new interface driver catc [ 67.835876] catc: v2.8:CATC EL1210A NetMate USB Ethernet driver [ 67.841949] usbcore: registered new interface driver kaweth [ 67.847625] pegasus: v0.6.14 (2006/09/27), Pegasus/Pegasus II USB Ethernet driver [ 67.855285] usbcore: registered new interface driver pegasus [ 67.860992] rtl8150: v0.6.2 (2004/08/27):rtl8150 based usb-ethernet driver [ 67.868011] usbcore: registered new interface driver rtl8150 [ 67.873840] usbcore: registered new interface driver asix [ 67.879394] usbcore: registered new interface driver cdc_ether [ 67.885345] usbcore: registered new interface driver dm9601 [ 67.891113] usbcore: registered new interface driver smsc95xx [ 67.897003] usbcore: registered new interface driver gl620a [ 67.902740] usbcore: registered new interface driver net1080 [ 67.908538] usbcore: registered new interface driver plusb [ 67.914184] usbcore: registered new interface driver rndis_host [ 67.920257] usbcore: registered new interface driver cdc_subset [ 67.926330] usbcore: registered new interface driver zaurus [ 67.932037] usbcore: registered new interface driver MOSCHIP usb-ethernet driver [ 67.940124] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 67.947021] ehci-omap ehci-omap.0: OMAP-EHCI Host Controller [ 67.953094] ehci-omap ehci-omap.0: new USB bus registered, assigned bus number 2 [ 67.960754] ehci-omap ehci-omap.0: irq 77, io mem 0x48064800 [ 67.979400] ehci-omap ehci-omap.0: USB 2.0 started, EHCI 1.00 [ 67.985321] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002 [ 67.992218] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 67.999511] usb usb2: Product: OMAP-EHCI Host Controller [ 68.004913] usb usb2: Manufacturer: Linux 2.6.32 ehci_hcd [ 68.010375] usb usb2: SerialNumber: ehci-omap.0 [ 68.015655] hub 2-0:1.0: USB hub found [ 68.019531] hub 2-0:1.0: 3 ports detected [ 68.049804] Initializing USB Mass Storage driver... [ 68.054901] usbcore: registered new interface driver usb-storage [ 68.061004] USB Mass Storage support registered. [ 68.066040] mice: PS/2 mouse device common for all mice [ 68.071716] input: gpio-keys as /devices/platform/gpio-keys/input/input0 [ 68.079589] input: twl4030_pwrbutton as /devices/platform/i2c_omap.1/i2c-1/1-0049/twl4030_pwrbutton/input/input1 [ 68.090362] i2c /dev entries driver [ 68.094451] Linux video capture interface: v2.00 [ 68.099456] omap-iommu omap-iommu.0: isp: version 1.1 [ 68.105895] vpfe_init [ 68.108764] OMAP Watchdog Timer Rev 0x31: initial timeout 60 sec [ 68.221923] mmci-omap-hs mmci-omap-hs.1: err -16 configuring card detect [ 68.229003] Registered led device: beagleboard::usr0 [ 68.234191] Registered led device: beagleboard::usr1 [ 68.240814] Registered led device: beagleboard::pmu_stat [ 68.247924] usbcore: registered new interface driver usbhid [ 68.253601] usbhid: USB HID core driver [ 68.257659] Advanced Linux Sound Architecture Driver Version 1.0.21. [ 68.264587] usbcore: registered new interface driver snd-usb-audio [ 68.330627] No device for DAI omap-mcbsp-dai-0 [ 68.335174] No device for DAI omap-mcbsp-dai-1 [ 68.339691] No device for DAI omap-mcbsp-dai-2 [ 68.344177] No device for DAI omap-mcbsp-dai-3 [ 68.348693] No device for DAI omap-mcbsp-dai-4 [ 68.353179] OMAP3 Beagle SoC init [ 68.357360] asoc: twl4030 <-> omap-mcbsp-dai-0 mapping ok [ 68.368774] ALSA device list: [ 68.371856] #0: omap3beagle (twl4030) [ 68.375823] oprofile: using arm/armv7 [ 68.379821] TCP cubic registered [ 68.383087] NET: Registered protocol family 17 [ 68.387664] NET: Registered protocol family 15 [ 68.392211] lib80211: common routines for IEEE802.11 drivers [ 68.397979] ThumbEE CPU extension supported. [ 68.402343] Power Management for TI OMAP3. [ 68.406860] usb 2-2: new high speed USB device using ehci-omap and address 2 [ 68.414978] Unable to set L3 frequency (400000000) [ 68.419921] Switched to new clocking rate (Crystal/Core/MPU): 26.0/332/1000 MHz [ 68.427337] IVA2 clocking rate: 800 MHz [ 68.596557] SmartReflex driver initialized [ 68.600799] omap3beaglelmb: Driver registration complete [ 68.611511] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3 [ 68.619812] registered taskstats version 1 [ 68.624664] fbcvt: 1024x768@60: CVT Name - .786M3-R [ 68.722015] usb 2-2: New USB device found, idVendor=0424, idProduct=9514 [ 68.728790] usb 2-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [ 68.743133] Console: switching to colour frame buffer device 128x48 [ 68.756652] hub 2-2:1.0: USB hub found [ 68.762817] hub 2-2:1.0: 5 ports detected [ 68.766967] regulator_init_complete: incomplete constraints, leaving VAUX4 on [ 68.774353] regulator_init_complete: incomplete constraints, leaving VAUX3 on [ 68.782165] regulator_init_complete: incomplete constraints, leaving VDAC on [ 68.789550] omap_vout omap_vout: probed for an unknown device [ 68.796508] RAMDISK: gzip image found at block 0 [ 68.932678] mmc0: new high speed SDHC card at address 1234 [ 68.948272] mmcblk0: mmc0:1234 SA04G 3.67 GiB [ 68.953125] mmcblk0: p1 p2 [ 69.081817] usb 2-2.1: new high speed USB device using ehci-omap and address 3 [ 69.215911] usb 2-2.1: New USB device found, idVendor=0424, idProduct=ec00 [ 69.229614] usb 2-2.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [ 69.248626] smsc95xx v1.0.4 [ 69.343872] usb0: register 'smsc95xx' at usb-ehci-omap.0-2.1, smsc95xx USB 2.0 Ethernet, 22:44:84:e2:ca:f9 [ 71.429687] VFS: Mounted root (ext2 filesystem) on device 1:0. [ 71.438354] devtmpfs: mounted [ 71.443817] Freeing init memory: 204K INIT: version 2.86 booting Please wait: booting... Starting udev [ 73.628021] FAT: bogus number of reserved sectors [ 73.635284] VFS: Can't find a valid FAT filesystem on dev mmcblk0. [ 74.051391] FAT: bogus number of reserved sectors [ 74.058776] VFS: Can't find a valid FAT filesystem on dev mmcblk0p2. Remounting root file system... Caching udev devnodes Populating dev cache Configuring network interfaces... ifconfig: SIOCGIFFLAGS: No such device udhcpc (v1.13.2) started Sending discover... Sending discover... Sending discover... No lease, forking to background done. Setting up IP spoofing protection: rp_filter. hwclock: can't open '/dev/misc/rtc': No such file or directory Fri Aug 20 20:54:00 UTC 2010 hwclock: can't open '/dev/misc/rtc': No such file or directory Configuring update-modules. Configuring ti-dsplink-module. Configuring ti-lpm-module. Configuring util-linux-ng. update-alternatives: Linking //bin/dmesg to dmesg.util-linux-ng update-alternatives: Linking //bin/kill to kill.util-linux-ng update-alternatives: Linking //bin/more to more.util-linux-ng update-alternatives: Linking //sbin/mkswap to mkswap.util-linux-ng update-alternatives: Linking //sbin/pivot_root to pivot_root.util-linux-ng update-alternatives: Linking //sbin/sln to sln.util-linux-ng update-alternatives: Linking //sbin/mkfs.minix to mkfs.minix.util-linux-ng update-alternatives: Linking //sbin/fsck.minix to fsck.minix.util-linux-ng update-alternatives: Linking //usr/bin/hexdump to hexdump.util-linux-ng update-alternatives: Linking //usr/bin/last to last.sysvinit update-alternatives: Linking //usr/bin/logger to logger.util-linux-ng update-alternatives: Linking //usr/bin/mesg to mesg.sysvinit update-alternatives: Linking //usr/bin/renice to renice.util-linux-ng update-alternatives: Linking //usr/bin/wall to wall.sysvinit update-alternatives: Linking //usr/bin/chfn to chfn.util-linux-ng update-alternatives: Linking //usr/bin/newgrp to newgrp.util-linux-ng update-alternatives: Linking //usr/bin/chsh to chsh.util-linux-ng update-alternatives: Linking //bin/login to login.util-linux-ng update-alternatives: Error: not linking //sbin/vipw to vipw.util-linux-ng since //sbin/vipw exists and is not a link update-alternatives: Linking //sbin/vigr to vigr.util-linux-ng update-alternatives: Linking //usr/bin/reset to reset.util-linux-ng update-alternatives: Linking //usr/bin/setsid to setsid.util-linux-ng update-alternatives: Linking //usr/bin/chrt to chrt.util-linux-ng update-alternatives: Linking //sbin/hwclock to ../bin/busybox update-alternatives: Linking //sbin/shutdown to shutdown.sysvinit update-alternatives: Linking //sbin/reboot to reboot.sysvinit update-alternatives: Linking //sbin/halt to halt.sysvinit INIT: Entering runlevel: 5 Creating Dropbear SSH server RSA host key. Will output 1024 bit rsa secret key to '/etc/dropbear/dropbear_rsa_host_key' Generating key, this may take a while... Public key portion is: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgwCOCoZMwVprkTNHaNnmANYJZ7pwtScgwtL1yBqkXHuH3pbMhBgznK6MDYPMTeRXJRjJHtBvyfQu35Yepn3U0QzwkccAm2Kd++fo265yAe7LQTcI1nN1O+0jWArse401bU+I27Unb4RP2QnOanScVGiPxFhHgM9fqFb6IXhimEtLS+Pn root@beagleboard Fingerprint: md5 c3:d9:32:e3:94:2c:c1:43:66:9f:8e:ab:d1:28:12:a9 Starting Dropbear SSH server: dropbear. Starting syslogd/klogd: done .-------. | | .-. | | |-----.-----.-----.| | .----..-----.-----. | | | __ | ---'| '--.| .-'| | | | | | | | |--- || --'| | | ' | | | | '---'---'--'--'--. |-----''----''--' '-----'-'-'-' -' | '---' The Angstrom Distribution beagleboard ttyS2 Angstrom 2010.7-test-20100820 beagleboard ttyS2 beagleboard login: root root@beagleboard:~#
Ok i found some great info on this WonderMedia WM8505 part. Using my awesome google-ing skills i found some great stuff including a Data sheet for the WM8505… On a side note… Still not able to get into original U-Boot.bin 😦
I uploaded it to my site for all: http://atomsofttech.com/WM8505/
I havent completely checked out the files yet only the datasheet. So im off to investigate some more 😀
UPDATE: Looking at the PDF my worst fears have came true. It has a built in LCD controller which means i wont find a ton of info on the LCD. But im sure i can still get some INIT code and Pinouts if i look hard enough 🙂
Ok i have one of those tiny 7 inch laptops which has a ARM and WinCE/Android running on it..
While this is pretty cool to have i have no use for it. Unless i start learning how to program for android. Which i will not even get into. The cool thing i like about this laptop is the 7in LCD and the fact it has a mouse and keyboard built in. I would love to be able to use this for something other than what it has.
This so called PC uses a WM8505 Processor which in it self is quite hard to find good info on..
Here are some specs on my model:
Max Resolution: 800 x 480 px
OS Language: English
Operating System: Windows CE 6.0 or Android
CPU: ARM-WM8505 or VIA VT8505( ARM926EJ-S)
Memory: 128 MB
Flash Disk: 2GB Built-in
External Memory: SD/MMC card (16GB Max.)
LAN: RJ45, 10/100Mbps
WLAN: 802.11b/g Wifi / Wireless LAN
Speaker: Internal Speaker x 2
Keyboard: 80-key keyboard
2 * USB External
1 * USB Internal
1 * RJ45 LAN
1 * 3.5mm Microphone
1 * 3.5mm Headphone
1 * SD/MMC card slot
Now for the GOOD the BAD and the UGLY!
The Good… The main board has a UART port on it and i am able to get valuable information from it. I can even access a terminal on it.
Here is what i get on boot:
WonderMedia Technologies, Inc. W-Load Version : 0.17.00.00 ethaddr............found U-Boot 1.1.4 (Apr 1 2010 - 16:26:54) WonderMedia Technologies, Inc. WMT U-Boot Version : 0.12.01.00.14 U-Boot code: 03F80000 -> 03FB9294 BSS: -> 040076AC RAM Configuration: Bank #0: 00000000 128 MB boot from spi flash. flash: Bank1: FFF80000 -- FFFFFFFF Bank2: FF780000 -- FFF7FFFF Flash: 8.5 MB In: serial Out: serial Err: serial ### main_loop entered: bootdelay=1 bootcmd="nand read 3c00000 12f00000 100000;logo show;run text1" CE0: NAND FLASH ID: 0xECD514B6 CE0: NAND FLASH Name: SAMSUNG_K9XXG08UXM (2048 MB) block4095 tag=74624230 version =1 block4094 tag=62743142 version =1 g_nfinfo.id = 0xE, g_nfinfo.id = 0xFFFF Read finsih show logo ..... LCD param (setting): 1,30000,8,800,480,48,40,40,3,29,13 PWM param (setting): 0,4,599,599 LCD FrameBuffer = 0x07900000, BMP Address = 0x03C00000 Loading BMP ..... ok no string .... PWM0 input freq = 47916666 Hz, output freq = 19998 Hz PWM0 register setting: scalar = 3, period = 598, duty = 598 "V1.5.2" Execute register operation: reg op: 0xD8110064 | 0xC reg op: 0xD811008C | 0xC reg op: 0xD81100B4 & 0xFFFFFFFB reg op: 0xD81100B4 | 0x8 reg op: 0xD8130054 | 0x1 ### main_loop: bootcmd="nand read 0 0 300000;bootm 0" Hit any key to stop autoboot: 0 WMT #
When I type help this is what i get:
WMT # help ? - alias for 'help' autoscr - run script from memory base - print or set address offset bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cleanlcd - clean LCD screen cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation dhcp - invoke DHCP client to obtain IP/boot params diskboot- boot from IDE device dmacp - dma memory copy echo - echo args to console erase - erase FLASH memory fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) fatstore - store binary file to a dos filesystem flinfo - print FLASH memory information go - start application at address 'addr' help - print online help ide - IDE sub-system iminfo - print header information for application image imls - list all images found in flash itest - return true/false on integer compare lcdinit - initialize LCD loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line show - loop - infinite loop on address range md - memory display mii - MII utility commands mm - memory modify (auto-incrementing) mmcinit - init mmc card mtest - simple RAM test mw - memory write (fill) nand - NAND sub-system nfs - boot image via network using NFS protocol nm - memory modify (constant address) ping - send ICMP ECHO_REQUEST to network host printenv- print environment variables protect - enable or disable FLASH write protection randmac - generate a random MAC address and save to "ethaddr" environment variable rarpboot- boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage sdwaitins - wait sd card inserted or removed sdwaitins 0 -- waiting removed sdwaitins 1 -- waiting inserted setenv - set environment variables sleep - delay execution for some time textout - show text to the screen textout x y "str" color color is 24bit Hex, R[23:16], G[15:8], B[7:0] for example: textout 0 0 "hello world" FFFFFF tftpboot- boot image via network using TFTP protocol tmpt - execute Mass Production Tool uploadfile- Transfer the spi flash image to the server. version - print monitor version
While this maybe cool and usefull it will suck if i can not create my own code.
The BAD…. Since im mostly interested in the LCD and keyboard and could care less about the processor or anything else i am stuck.
As you might expect there is no datasheet for either and manually reverse engineering both is beyond me since i dont have the necessary tools.
The Ugly… Now what i am trying to figure out is how do i get into a U-Boot.bin file to get all the source. This is beyond me as well. The U-Boot.bin file has the bootloader and from what i can see some LCD init stuff and a ton more. To find out what can be expected in the file i used my Linux OS (debian) to search for strings in the file…
(this is from Cygwin tho easier to copy/paste)
Jason@Jason-PC ~/ARM8505/script $ strings u-boot.bin ... U-Boot 1.1.4 (Apr 1 2010 - 16:26:54) Bbt01tbB@x} Font 12x22 ... LCD_ENABLE CxScreen CyScreen LCD_ID LCD panel ID???? Un-Support LCD panel ID ( %d ) X_LTEXT Y_LTEXT LCDC_FB BMP_ADR LCD FrameBuffer = 0x%08X, BMP Address = 0x%08X .... lcdparam LCD param (default): 1,25000,8,800,480,48,40,40,3,29,13 LCD param (setting): %s LCD param Error: expected version 1, but get %d LCD param Error: need %d arg count, but get %d So use default LCD param: 1,25000,8,800,480,48,40,40,3,29,13 LCD param Error: the string length of extra register opreation length = %d, it is too long, it should be less than %d Not excute extra register operation for LCD ..... LCD already initialized Loading BMP ..... .... LCDC_FB2 failed LOGO_STRING no string .... Execute register operation for LCD:
Obviously there is more but i clipped out what wasnt relevant to save scroll space…
I know know there are quite a few things related to the LCD in there which is something i will need. I ran across a program called binwalk and tried it on the uboot bin file and got:
Scan Time: Jan 10, 2012 @ 22:04:41 Magic File: /usr/local/etc/binwalk/magic.binwalk Signatures: 75 Target File: u-boot.bin MD5 Checksum: d2c6f4e628ee5594caaccedb95fda7a6 DECIMAL HEX DESCRIPTION ------------------------------------------------------------------------------------------------------- 184350 0x2D01E LZMA compressed data, properties: 0x01, dictionary size: 8388608 bytes, uncompressed size: 128 bytes 185224 0x2D388 LZMA compressed data, properties: 0x03, dictionary size: 8388608 bytes, uncompressed size: 64 bytes 186634 0x2D90A LZMA compressed data, properties: 0x01, dictionary size: 8388608 bytes, uncompressed size: 4194432 bytes 231695 0x3890F LZMA compressed data, properties: 0xD8, dictionary size: 65011712 bytes, uncompressed size: 1 bytes
This leads me to believe that there is something i can extract and decompress … Look at address 186634 (0x2D90A) the uncompressed size is 4,194,432 bytes.
That is just about 4MB big… Also since there are strings easily readable in there it also leads me to think that there are most likely normal files i can open. (i hope)
The Only BIG problem im having is… getting the data out of the u-boot.bin which is the main goal. I made a simple program to extract data from a file at a specific offset for a specifiv length and output it to a file. All in binary. While it does the job it doesnt work . I think its because i dont know when the archive ends? Or when it starts really.
While the above binwalk gives me a address i doubt its to the actual compressed file. LZMA compressed file have a magic number which usually is something like :
0x5D, 0x00,0x00,0x08 or something similar. I know the 0x5D is correct. But the above binwalk points to the Properties of said location… like 186634 offset is a 0x01 and not a 0x5D…
So if anyone knows how to extract this stuff please help me out.