jump to navigation

Beosound 9000 – IR receiver repair May 29, 2016

Posted by Florian in Audio, Devices, Repair, World.

I really like the design of most classic Bang & Olufsen stuff – but my favorite one is the Beosound 9000. Since I pretty much like to understand how all these technical devices we are surrounded with work, I usually take apart more or less everything in order to find out how it works and how to fix it… I decided to buy one to fix instead of getting a working one I might break. I did some “training” with other classic CD players before I bought an old and not working Beosound 9000 in order to see if I can fix it. I really admire the design, bit it did not take long till I started to admire the engineers even more… it must have been quite a tough job not only to make it work at all bit to make it possible to produce it in quantities.

First of all: There is a service manual for it which helps a lot with common issues and how to disassemble the device without breaking anything. B&O generally does a good job releasing service manuals for its devices. One important information from the manual is that without speakers or headphones connected the 9000 enters ‘mode 0’ which means that it does not take any input from the remote control. So I connected speakers and tried to enter service mode and change audio mode without success… from some forum posts I learned that the IR receiver PCB14 fails in some cases. Since I did not what to find a replacement I tried to fix it… and I had a lot of fun:

First I found out that PCB14 really does not supply any data to the controller board – it is connected with just three pins (ground, +5V and data) and there was no traffic on the data line at all. Unluckily the service manual does not contain a schematic of PCB14. So I started to find out how it is supposed to work… the receiver is built around a Vishay U2506B IR receiver – so I thought it would be easy to find out more using the data sheet of that one but even Vishay and its distributors do not seem to have one.  In the end I used a broken Beolink 5000 two-way infrared remote control to find out about the signals on the PCB. It uses a similar design and the same controller.

It turned out that it was only a single broken 22µF capacitor – it is marked in the image below.beosound-9000-ir-fix1


This shows the PCB with the replacement capacitor. It is a good idea to use a mechanically smaller replacement than I did because a long capacitor case has some potential to hit the CD drive sledge when entering position 6.

After replacing the capacitor the IR receiver started work again. It was necessary to change to mode 1 manually before I was able to enter service mode. The easiest way is to use a Beolink 1000 since it has a ‘Sound’ button for this purpose. Just press <Sound> <1> <Store>.

I have some more information about repairing this magnificent Beosound 9000… but that’s something for the next post.

Note to my readers: Please remind me to blog a little bit more frequently :-)


Fixing the NCDC 2015 0khz failure April 10, 2013

Posted by Florian in World.
Tags: , , , ,

It took me a while to find out, but it is possible to fix a Siemens NCDC 2015 car radio (ok they call it “entertainment system”) suffering from the “0khz” problem quite easy.

The story: I usually drive old cars… my current one is an Opel Omega from 2001 and that one came with the NCDC 2015. Actually its the kind of retro technology I like: No iPod connector, no USB and similar interfaces but two CD drives for five CDs in total and in combination with the Bose speaker system the sound is quite good… the usability has some limits: Using it I tend to ask myself questions like these: Why do I have a way to display the balance settings but not for the volume setting?

Anyway, one common failure of this device is that they have a problem with power loss (e.g. flat battery or removal from the car without removing fuses before. The symptoms in most cases are that you see “0 khz” in all station entries and no sound at all (neither from tuner, navigation or CD). I found a hint how to fix it in a Polish electronics forum (elektroda.pl). Obviously the device ends up with data in an 24LC16 EEPROM it is not able to handle and the firmware does not know how to recover from. I have seen some hints that the successor of the 2015 has a maintenance mode with an option to reset the EEPROM.

The most simple solution seems to be to replace the EEPROM with a new and empty one. Its quite easy to do and a replacement EEPROM is cheap, less than EUR 1 if you are lucky. I made a little bit more detailed description in the hope it might be useful for someone else.

So what do we need?

  • Tools for removing the device from the car
  • T8 Torx crewdriver
  • Soldering equipment
  • 24LC16 EEPROM (SMD, SO8 case)

The hardest part is to remove the device from the car… there is no way to do it without cursing ;) Important: Disconnect power before removing it, it is reported that removing these with the battery connected caused

There are two screws that hold the upper cover which are easy to find. Just remove the cover and you will see something like this:


Now remove the four marked screws in order to remove the CD drive. Take care of the FCC cables below. Remove the cables after unlocking them by moving the black mount of the socket in the direction of the cables (not by lifting them!).

Now you can see the cause of the “brain damage”:Image

Unsoldering the EEPROM is a little bit tricky. If you have access to hot air soldering equimpment it is going to be easier. Take care about orientation and not to damage the pads replacing the IC.

Put the pieces together and the NCDC 2015 back to the car.

For me this procedure worked pretty well. I still see some strange effects like that the tuner did not fill the station list completely and maybe the sound has changed a little bit. Maybe some input sensitivity setting was hardcoded in the EEPROM. Is there any one out there who knows some details about what gets stored in there?

Computer startup aid using a LEGO train January 6, 2012

Posted by Florian in Devices, kernel concepts.

Some times it happens that I have to dig out some old piece of hardware and try to get it running again… I recently got a very geek present for my birthday – one that requires a working SGI Indigo next to it. Luckily nothing gets lost at kernel concepts and I was able to select from several Indigo gathering dust at the attic of our office. It looks like the machines survived quite some years not being used pretty well – including most of the harddisks. Unluckily all batteries which are supposed to supply the real-time clock chip were flat and these batteries are hard to get and soldered to the board. I did not have a replacement for the 3.6V Lithium battery but it was pretty easy to replace the battery with some cables to supply the board with 3.6V. The first thing to supply 3.6V I found was the electric LEGO locomotive the kids left lying around…

Indigo Lego Train

Indigo Lego Train

This one was powered by three 1.2V AA rechargeable batteries – perfect for some startup aid for this old machine. After applying power I was able to boot into IRIX 6.2 installed on this historic piece of hardware (100MHz MIPS R4000 CPU, 192MB of RAM, 2GB SCSI hard disk, ELAN graphics). I have to admit I somehow enjoyed the “time travel” experience playing around with such an old system for a while. Someone here still remembers the Netscape browser? Or Electropaint? One really scary experience was the network setup: IRIX 6.2 has the ability to configure a static IP through the GUI but obviously you have to edit the network startup script in order to set a default route on boot.

A lot more of information about these machines can be found here.

Android Lessions Part 1: Bluetooth Crash January 4, 2012

Posted by Florian in Android, Source.
add a comment

Finally – some free days for family and friends and to write a few lines which might be useful for someone else. Since Android started to become more and more interesting for industrial and business applications I got involved in some projects porting Android to several devices. It turned out that the documentation of the lower layers (hardware and driver adaptation) is very thin in contrast to the SDK and NDK documentation. But I took some notes working on these projects… this one might be useful for other people porting Android 2.3.x and experiencing issues with Bluetooth.

I ran into the issue that activating Bluetooth in the settings application resulted in a crash of the whole GUI. It seems that only ARMv5 core based devices are affected so that only a few people ran into this so far. (Not that it would be correct on more common cores used for Android devices such as ARMv7A, but it does not seem to cause the same effect.) The solution I found in the Android 4 commit log is quite simple for a problem causing that much of hassle:

--- a/core/jni/android_server_BluetoothEventLoop.cpp
+++ b/core/jni/android_server_BluetoothEventLoop.cpp
@@ -311,7 +311,7 @@ static int register_agent(native_data_t *nat,
DBusMessage *msg, *reply;
DBusError err;
- bool oob = TRUE;
+ dbus_bool_t oob = TRUE;

WebOS goes Open Source December 9, 2011

Posted by Florian in Linux, Source.

Amazing news! HP just announced that WebOS will become an Open Source project lead and supported by HP in future. The full annoncement can be found here.
HP has an official press release about this here. I’m really looking forward to work with it… It’s quite an interesting framework for a large number of devices. The really funny thing is that Nils asked them to do so in his blog some weeks ago :-)

Summer Holidays December 2, 2011

Posted by Florian in Uncategorized, World.
add a comment

Now that its autumn in Europe it is a good time to blog about the summer vacations :) The Chaos Communication Camp was a real highlight – just a perfect environment for Hacker’s and their fork()^h^h^h offsprings summer vacations. I do not want to write too much… saving some words for more technical posts, but maybe someone likes the photos I took:

Quadcopter Nightflight

Quadcopter Nightflight

Camp at Night

Camp at Night

Antonov AN-2

Antonov AN-2

This nice machine was parked next to our caravan… it’s a little bit larger than you might guess from the photo. I have placed some more photos here.

Mini6410 – Getting started with Free Software September 22, 2010

Posted by Florian in Devices, GPE, Linux, OpenEmbedded.

FriendlyARM is shipping the new Mini6410 for a little while now.  It is based on a 533MHz clocked Samsung S3C6410. I do not want  to repeat all the technical details here, an English description can be found here. Lets summarize the features in a simple sentence: It is fast enough for Qt and offers lots of ports for connectivity.

Mini6410 running an OpenEmbedded built GPE Image

Mini6410 running an OpenEmbedded built GPE Image

The image pretty much illustrates what we are up to do now – but lets take a look at the software shipped with the board first. Compared to the older Mini2440 the devices official support DVD offers several more options: We have pre-compiled images based on Android, XUbuntu and Qtopia and an advanced U-Boot which comes with a kind of menu for the basic tasks.  One major problem is that currently the documentation is available in Chinese only which makes it a little bit hard to handle. But translating single paragraphs of the more than 300 pages long PDF manual using Google Translator worked pretty well. The DVD contains important sources for Android, U-Boot and Linux. The Kernel is based on 2.6.28 for the SMDK 6410 reference design and heavily patched. Some parts are quite far from mainline Linux and should be updated to latest standards – apart from the fact the whole Linux support might want some rebase on 2.6.35.

Now we have a big pile eh… DVD with stuff that runs on the board already – what does OpenEmbedded help us with here? Well all the binary stuff serves some purpose but nothing is perfect – OE helps us with to become more flexible and consistent at the same time. XUbuntu is great with its large package repository to try out things – but it has quite some requirements about flash storage, RAM and screen size. With OE you have the choice to create a full featured desktop image or to build something that fits your particular need.

So lets take a brief look into OE setup for the Mini6410 and how to install an image built with OE.

If you are new to this topic you should get familiar with OpenEmbedded first. The official getting started document is a good thing to read first. The following section assumes you have your OE set up and cares about the Mini6410 specific bits only. Make sure to use a recent org.openembedded.dev or testing branch.

First set up your local.conf to build for the Mini6410 – if you are using multiple configuration files then make sure to distribute these bits over the files correctly:

MACHINE = "mini6410"
DISTRO = "angstrom-2008.1"
LIBC = "eglibc"

This will select the Mini6410 as a target device, Ångström distribution and eglibc – this is the combination I tested. The last line defines a limited set of libc locales to be generated.

Now let’s build a filesystem image. I built a simple GPE based filesystem image first:

bitbake x11-gpe-image

If everything is configured correctly, your harddisk is large enough and your Internet connection ok you should get filesystem and kernel image in $TMPDIR/deploy/eglibc/images/mini6410. For the impatient of you or the ones who get bored during a build (no I don not suffer from this) I have uploaded my results here.

Finally lets go ahead an install these files into the internal NAND flash. I’m using U-Boot on the boards – we want to stay open and do not rely on propitiatory software. Keep this in mind if you intend to make a product: Any component you are not able to influence has potential to cause trouble and in most cases it will do this – sooner or later.

There are several ways to install files and to configure U-Boot. Here we use a quite generic solution using TFTP to transfer the images and fixed addresses. Not the best solution but the simplest. First if you do not have a DHCP server you have to configure networking:

setenv ipaddr <some IP for the board>
setenv serverip <your server's IP>

If you have a DHCP server you can skip this step and write “dhcp” instead of “tftp” in the commands below. These will download the files and install them into the internal NAND flash:

tftp 0xc0008000 uImage-mini6410.ubi
nand erase 0x80000 0x500000
nand write 0xc0008000 0x80000 0x500000

tftp 0xc0008000 x11-gpe-image-mini6410.ubi
nand erase 0x580000
nand write 0xc0008000 0x580000 ${filesize}

Finally we configure the boot parameters to match the installed kernel + filesystem and save these:

setenv bootargs console=ttySAC0,115200 ubi.mtd=2
   root=ubi0:rootfs-mini6410 rootfstype=ubifs

(note that the first command needs to be entered in a single line)

We do not have to pass information about the MTD partition layout to the kernel since we follow the kernel’s built-in default in this configuration. Just reset your board and check if it boots into your shiny new filesystem. If something is wrong then please drop me a mail providing information (e.g. bootlog, screenshot, configuration files…). This could help to improve this little text and OpenEmbedded support for the Mini6410.

What now?

Try more useful targets with OpenEmbedded. If you like to build an installable cross toolchain matching your filesystem you could build the meta-toolchain-gpe target for example.


Sim.One Images with OpenEmbedded September 3, 2010

Posted by Florian in Devices, Linux, OpenEmbedded.

It took me a while to get started with the blog again… so let’s start with something tiny: OpenEmbedded images for the Sim.One. So far we had quite some documentation about filesystems on external media but what about the internal flash? We have 8MB which is enough for a tiny filesystem we can build with OpenEmbedded.

Sim.One (OpenEmbedded booth at LinuxTag)

OE has support for the Sim.One already and I just added the parameters to build jffs2 filesystems for the internal NOR flash. In order to build jffs2 images for the Sim.One use the current org.openembedded.dev branch.

OpenEmbedded Setup
I just want to introduce the basic ideas and useful settings for these images. More generic information about how to get started with OE can be found here. For my tests I used the minimal distribution definintion in OE and built a very small image. The relevant settings for your build configuration (local.conf) are as follows:

MACHINE = "simone"
DISTRO = "minimal"
LIBC = "eglibc"
IMAGE_FSTYPES = "tar.gz jffs2"

The minimal-image is a good starting point for the internal flash. The image does not include much of functionality but leaves some free space for additional software. OE does not build the filesystem only, it builds the kernel for us as well so that we can start with a consistent set of files. Let’s give it a try and install the built results – I assume you have a U-Boot shell and network+tftp server configured already.

Install Kernel

erase 0x60080000 0x6027ffff
tftp  0x60080000 uImage-simone.bin

Install Filesystem

erase 0x602c0000 0x60800000
tftp 0x602c0000 simone.jffs2

We need to tell the kernel where to find the patitions. The actual layout we are going to use is as follows:

Device    size        name
mtd0:     000c0000 "Firmware"
mtd1: 00200000     "Kernel"
mtd2: 00540000    "Root-FS"

I have set up the configuration of U-Boot in order to minimize te effort booting from some other medium.
setenv bootargs console=ttyAM0 root=/dev/mtdblock2 rootfstype=jffs2 video=ep93xxfb
setenv bootcmd_nor 'setenv bootargs ${bootargs} ${mtdparts} ; bootm 60080000'
setenv bootcmd run bootcmd_nor
setenv mtdparts mtdparts=physmap-flash.0:768k@0(Firmware),

It works… what can I do now?
Make the filesystem functional: Add useful things to the filesystem – a good candidate might be busybox httpd. Another useful target in OE is meta-toolchain which creates a cross compilation SDK for your device.

Now that you have read the whole text: If you do not want to build yourself you can take a look at my build results.


MeeGo – some feedback and thoughts February 15, 2010

Posted by Florian in Devices, Linux, Maemo, MeeGo, OpenEmbedded, Source.

I only had a very few free minutes today I was able to spend following the discussions and reading released information about MeeGo. For some reason the most intensively discussed fact among the community members  seems to be decision to use the RPM package system. This one is followed by the Qt vs. GTK+ discussion I cannot remember when it started but I still remember it even started before I wrote the first line of open source code :-)  I have seen a lot of questions about currently existing devices (N900 mostly) and software –  if they are likely to become supported in future MeeGo releases – at least for the N900 and Maemo 6 there is a statement by Ari Jaaksi already. The other technical questions… well, in an ideal world these should not even be relevant for the developers because there would be the perfect tools that create the packages you want and assist you to create user interfaces without thinking much about the toolkits you  use. Again – this is the theory – we all know that the real life for development is quite different. But in the end or customers / users will decide which platform and with this which applications they are going to use. Users will not care about the package format used in the platform or the toolkit that is used by some application. In fact many (mostly Linux/Unix based) platforms do not expose the software package file format to an average user any more while some quite popular ones still do (e.g. Symbian and Windows). For users the availability of a consistent and widely used software platform with a high amount of available applications is likely to be the most important criterion. Ok, I admit that the availability of sexy hardware is quite important too :-)

Way more interesting than technical details is to look at the landscape of mobile device software stacks and to place MeeGo in it. So how does this landscape look like now?

  • There is Apple with the iPhone – pretty much closed but many developers and sexy hardware but quite limited amount of devices and only one manufacturer.
  • Symbian – well established with a large community but it feels like it hits its limits with modern smartphones.
  • Samsung just launched Bada which looks quite interesting but does not yet seem to have a large community of developers and users.
  • Microsoft Windows Mobile is available for many years now but seems to have lost attraction over the years.
  • Palm WebOS is interesting from both developer and user point of view but I think it will be hard for it to compete with all the major players in this area.
  • Google developed Android which enjoys a fast growing user- and developer base. It’s easy to get started with Android and there is a wide range of interesting devices available already. It is quite portable since most of the lowlevel components are open source.

Among these the most likely candidate to play the dominating role in the mobile handset market might be Android. At least this is how things look like right now… we all know this market changes pretty fast and you never know what happens next. I think Nils asked the question quite a few of us asked themselves: Will MeeGo become a kind of “Android killer”?

No way I will comment on this but in order to become a more generic platform MeeGo needs to focus on different things Maemo did so far. So far Maemo was focused on supporting a very few devices and contained quite some specialized bits that only worked for the Maemo specific devices and its distribution. I still remember that getting basic support for building the Maemo software stack with OpenEmbedded caused some headaches and sleepless nights. (I was mentor of a GSoC project working on this – just take a look at Kirtika’s blog to find out some details.)  It is good to see that it is quite obvious that MeeGo folks understand that these things will have to change. A good example is the process how to get some hardware supported. For someone like me supporting various device makers the really interesting part will follow: How will the device makers adopt MeeGo and how many of them will ‘jump onto the MeeGo boat’? Having more hardware vendors supporting MeeGo means more users and meant to make the platform more interesting for developers. And gaining interest from developers and users is absolutely vital for any software platform that is going to play a major role in future.

In my opinion there is a lot of potential in MeeGo – the most important one is the fact that the key components are going to be open and portable. The project joins two (comparably small) developer and user communities and combines this new community with the support by two very successful companies. I can imagine that this base is able to attract quite some more valuable contributors like smaller device makers, software companies and open source projects.

I’m pretty sure that ‘The Big Merge’ is going to cause quite some movement in the mobile device landscape…

MeeGo or Maemo grown up February 15, 2010

Posted by Florian in kernel concepts, Linux, LinuxToGo, Maemo, MeeGo.

Wee..! Big news – Intel and Nokia joining their open source software platforms Maemo and Moblin into a single one: Meego

So what does this mean for developers and device manufacturers? One thing is for sure: The new platform will become the “grown up” version of Maemo and Moblin. Especially for the Maemo part this means that the focus will change from targeting a very few devices and a quite well-defined software stack to a more generic way to support multiple hard- and software environments. And this is good – only a portable and easy to support platform is attractive for the device makers while the availability of multiple devices is important for its attractively among software developers.

It looks like we have interesting times ahead…