When I published my last post about ARM boards there were many questions and suggestions with interesting devices. Thank You all for it.
But there were also suggestions about ARM9 or ARM11 based devices. So I decided that it is good time to write what interest me now in ARM world.
But first some inventory. I had/used/have several devices with ARM cpu:
StrongARM (armv4) one:
- Sharp Zaurus SL-5500 (which took me to ARM world)
ARM920 (armv4t) ones:
- Openmoko GTA01 bv3, bv4 (s3c2410)
- EDB9301 (EP9301 cpu)
- Sim-One (EP9307)
ARM926 (armv5te) ones:
- Sharp Zaurus sl-5600 (pxa250)
- Sharp Zaurus c760/sl-6000 (pxa255)
- Sharp Zaurus sl-c3000 (pxa272)
- Sheevaplug (kirkwood)
- Atmel devboards (at91sam9263, at91sam9m10)
- ST-Microelectronics/ST-Ericsson NDK-15, NHK-15 (st88n15)
- Nokia 770 (omap1710)
- Linksys NSLU2 (ixp425 iirc)
ARM1136 (armv6) ones:
- Nokia N810 (omap2430)
- Bug r1.0, r1.2 (i.mx31)
Cortex-A8 (armv7a) ones:
- Beagleboard B7, B7, C3 (omap3430)
- Nokia N900 (omap3430)
- Nexus S (exynos3)
- Genesi Efika MX Smartbook (i.mx51)
- Freescale Quickstart (i.mx53)
Cortex-A9 (armv7a) ones:
- Pandaboard EA1, A1 (omap4430)
- Archos G9 80 (omap4430)
All of that during last 8 years. Most of my ARM live so far was around ARM926 based devices (some of them still can not be listed here) and I do not want to go there again. Kirkwood core was fastest one with 1.2GHz clock and 512MB of RAM it was really fast machine. I only missed Serial ATA in my Sheevaplug (rev 1.0) but even with hard drive on USB it was nice improvement.
Then I played a bit with ARM11 processors. Ok, they were faster than most of ARM9 cpus but I already had experience with Sheevaplug. And after few months first Cortex-a8 board landed on my desk — I got Beagleboard B7 from Bug labs as test platform for their new device. This was improvement!
I still remember my reaction when connected it to normal LCD monitor and saw it used at 720p resolution (1680×1050 was a bit hard for omap3). Moved to Nokia N900 few months later and found that fast cpu means nothing when paired with slow storage and not enough memory for system.
So today I prefer to not look below Cortex-A9 (or comparable cores like ones from Qualcomm or Marvell). Hope to play one day with Cortex-A5 (which should replace ARM926 one day) just to see how low-end armv7a cpu behave.
And wait for ARMv8 to hit market.
I have few different devices on my desk. Some has big community (BeagleBoards), some has forums with users (AT91SAM9263-EK), some have forums and irc channels (BUG) and I try to be present in most of them to help people, learn from mistakes etc.
The common problem which is shown there is “how to get XYZ working on my board”. People tries to use random toolchains without checking are they compatible with distribution running on board (usually it is CoreSourcery toolchain when board runs Ångström) to build software. Most of time they hang on irc to find some help about how to use configure, make, how to handle build time dependencies etc. Why they add themself so much trouble I have no idea…
Solution is mostly easier: provide some kind of network access for device and use package manager which came with root filesystem. For Ångström it will be “opkg” which is really easy to use. Basically user needs to know about few commands only:
opkg update to fetch repositories data
opkg upgrade to upgrade to newest available software
opkg list | grep NAME to check does NAME is available in repositories
opkg install NAME to install package (with dependencies)
For BUG commands are basically the same but “ipkg” is installed instead of “opkg”.
What it gives for users? More software available, less time spent on getting required applications and less problems. OK, not everything is available in repositories — but why not ask developers can it be provided?
Recently I got my AT91SAM9263-EK board back (it was not booting due to problem with backup battery) and decided to upgrade it to 2.6.30 Linux kernel.
But I got problem which was UBI subsystem not able to initialize. This looked strange but after checking what is going on I found reason. Before I was using 2.6.28-at91-exp kernel build with OpenEmbedded and at91-exp patch added “Bootstrap” flash partition so I had three of them in NAND and just two under 2.6.30 release. Changing “bootargs” in U-Boot solved problem.
I also enabled several things in kernel:
- I²c with eeprom support
- keyboard (which is just two keys: “left button” and “right button”)
- leds (all 3 of them)
To get sound working I updated linux-2.6.28-exp.patch to newer version and also removed most of code from it (which supported newer boards). I did not yet tested too much how resulting kernel works but at least it boots properly and supports most of components.
Other AT91 boards should work fine with 2.6.30 but I lack access to hardware so no plans for update currently.
Some days ago I exchanged my MOS9835 based I/O card with newer version based on MOS9845. Old one had one parallel port (which I never used) and two serial ports. New one do not have parallel port but has 6 serial ports instead. Why so much?
The answer is simple — more devices on desk require more ports. I could go into USB-serial adapters and buy bunch of them and create set of udev rules to make them stick with device node names. But I read too many stories when such adapters works when 2 of them are used but adding 3rd breaks config. So I bought PCI card.
Is it useful? Yes, it is. Does it add new problems? Few, but simple ones.
First problem is to get proper numbering of ports. As mainboard used in desktop has one serial port already I wanted it to be /dev/ttyS0 and additional ones to be /dev/ttyS[1-6]. But fun starts in kernel config…
There are few options which controls amount of serial ports in total (named
CONFIG_SERIAL_8250_NR_UARTS) and amount of runtime registered ports (named
CONFIG_SERIAL_8250_RUNTIME_UARTS). To get sane numbering I had to play with those values a bit. I set
NR_UARTS to “10” (just in case) and then
RUNTIME_UARTS to “7” so ports works like I wanted.
Next thing is guessing which port is which ttySx node. I did that by connecting devices and checking with “picocom” which one is which. Now connectors are signed with number on one side :D
Last thing was adding names to device nodes as it is easier to use /dev/ttyALIX then remember that Alix is connected to /dev/ttyS2 port. So currently I have this config:
||not used yet
I use also serial cable with BUG but as it has female connector I use USB adapter with it. Have to buy female->male cable for it so it will use ttyS3…
This is how it looks on desktop side:
And one more thing — few readers suggested to use cards which adds 8 serial ports. I have to admit that I was thinking about it but decided against it. I already have lot of cables under desk and adding such hydra (card connector -> 8 cables with DB9 connector) would make it even harder to organize.
Next cables to organize would be network — each device on desk wants at least one Ethernet cable…
On my desk I have lot of things which require power. USB hubs, developer boards, customer devices etc. So far I counted 3x12V (ngw100, at91sam9263ek, edb9301) and 4x5V (usb hubs, beagleboard, bug). I do not count under desk devices because there is more space so extra cables from power supplies are not a problem (voltage is more problem as they use 6V, 9V or other less popular ones).
How to power all of them? So far I use few 5V power adapters (originally made for Sharp Zaurus, HP iPaq or usb hubs) and one 12V one (so only one 12V devboard at time). This has to end as it occupy too much space and power sockets.
So I bought old 200W ATX power supply in local computer shop specialised in old devices and parts from them. It is small but works. Now I need to buy few meters of cables (two colours — one for 12V and other for 5V) and do soldering job. The good thing is that ATX PSU require shorting just two cables to power up (PS ON with GND).
My desktop has few RS232 ports:
- one FTDI RS232-USB converter
- one connected to mainboard
- two on additional PCI card (which also gives me parallel port)
When I got BeagleBoard I had to remove the one connected to mainboard — connected that cable to BB itself. But today I got new package from Atmel: NGW100. And it means need for serial port too…
What for I use all those ports? Developer boards of course :)
- At91sam9263-ek from Atmel
- NGW100 from Atmel
To end that crazy situation I am planning to buy extended version of card which I use now but with 6 rs232 ports instead of just two. Will lose parallel port but I never used it and if will ever need it there will be a card with it somewhere in drawer/box.
I never thought that will need so many serial ports…