This digital picture frame runs Linux better than you might think

Ah, the beauty of spreading the guts of some hackable hardware across your workbench. This happens to be the circuit board and LCD screen from a Parrot DF3120 digital picture frame. The device is pretty powerful, considering you can still find them available for around $25. You’ll get a 3.5″ screen, ARM9 processor with 8MB or RAM, Bluetooth, a tilt sensor, and more. It seem that [BusError], [Sprite_tm], [Claude], and few others really went to town and spilled all of the secrets this device has to offer.

Their goal of the hack was to get their own Linux kernel running. It is possible to reprogram the processor using its JTAG interface. And if you really want to drill down to the good stuff, there’s access to all of the BGA pins on the bottom of the board thanks to a grid of micro vias. But the device can be tricked into flashing your own firmware just by altering a stock upgrade image.

You can get a pretty good idea of what there is to do once you’ve replaced the firmware from the video after the break. A RAM upgrade (using a chip from an old PC133 stick) lets the video run smoothly as it’s controlled via a Wii remote.

Post navigation

Oooo…considering how much the Chinese makers of these things outright steal other people’s designs (or the reference design, hehe) I’m hoping this means the same thing can be done to a lot of other cheap picture frames. I have two that I got for $15 each and have an 800×600 screen!

Things like this make me wonder why everything isn’t open source? If they took every little gadget out there, and showed the entire build process there could be some pretty powerful devices on the market.

I agree… It is not a printer where the company make money with cartridges, so they need avoid hackers.
In cases like this photo frame, the company make money selling hardware, make no sense hide IOs, headers or parts.

A good exemple is the Rigol DS1052 oscilloscope, go see how happy they are with the Increased of the sales after the hack announcement.

random idea: could you use this (with minimal software on both ends) as a tiny wireless display for a laptop/computer? Like, add a small second monitor via bluetooth? If so I may have to buy one, since I already have a few DS touchscreens :P

Oh and if you think it’s a good idea and would like to help me with it at all just send me a message on my FaceBook (should be linked).

@Fartface, your “advanced math” is only valid for 1 fps, as you only counted 10bits x the resolution x number of colors. that gives you the bandwidth for one frame. , so please come back when you know what you’re actually talking about, or when you start using screens capable of more than one fps.

Now, 30 bits for every pixel and we get :
58060800 * 30 = 1.741.824.000 bits / stream of fullHD, 28fps
This is ~ 1.6 Gbps

Let’s do this one more time for 800 x 600, shall we ?
800 * 600 = 480.000 pixels
For 28 frames we have : 480000 * 28 = 13.440.000 pixels
30 bits every frame and we get : 403.200.000 bits for the stream, about 376 Mbps.

As usual, in the rush to criticize something, fartface misses the point.

YES, OP, you could mod this to act as a remote display, of sorts.

… but that doesn’t mean you will get anywhere near the bandwidth to display it at the ridiculous bandwidth speeds anonymouse and fartface remark about. (Pointless posturing, as the device is 320×240, for anyone who didn’t read it).

It may be possible, but it seems unlikely you would get any “realtime” display speeds even at 240p and 8-bit color. Turning this into a remote display head would be quite a trick.

But I don’t think your question meant a remote display in the desktop sense. If you meant, can you use this to display useful “messages” or images (prepared on a host PC) then yes. You could probably do that and build the display into your PC case, showing alerts of some kind even when your main display is off.

That should actually work.
I can see this as a great front pannel for a media PC.
You could interface it through a serial port or USB and use the bluetooth with a WiMote as a remote for it. You could use it to stream audio without having the TV on or other functions like the ever pressant clock.
Maybe combine this with a PI to make a super low power media PC/Streamer http://www.raspberrypi.org/

there are already recipes how to do things like this – getting messages to another Linux PC.

I’d only consider this if it’s available cheaply in your area. Otherwise you could just grab a reconditioned Epson 320×240 screen off of ebay (or Sparkfun) and some hardware to drive it. Then again, full-blown USB display adapters are around $60, no hacks required.

@scottinNH True but you could possibly use one of the GPIO lines to work the power switch on the Media PC so that the picture frame could wake for you. Also the picture frame would use less power and could keep the clock running and such.
So lets say you want your media PC to shutdown to save power at midnight every night? Not a real issue you just have a cron job to shut it down. You could then have the picture frame power it up again at say 6:30 in the am so it is ready for when you wake up.
Slightly more flexible than the off the self ones. You could probably do most of what I am suggesting with a micro and that EPSON screen but that would take more hacking than this picture frame.
Frankly the Bluetooth combined with the screen really seems cool.

Hmm okay that makes sense, ScottInNH. No, I was actually thinking like a legit screen (second monitor) but I guessed since it was so small it might be able to run. Would dropping the framerate work? I mean, if it was, say, standard color, 240×320, and ~6fps, would that work? Anything really slow (<1fps) wouldn't be that useful but I think I could manage with more than one or two frames.

All Anonymouse was saying was, at the core, was even latest Bluetooth spec has insufficient bandwidth for HD video. He assumed a different definition of “display” than I, but we are both 100% correct.

Your track record here is to belittle and “talk down” folks. Even your nym suggests you want to annoy.

Please, fartface, stop poisoning HAD with remarks like ‘lying’ and ‘foxnews’. Indeed, on ANY political website, you are more likely to get the attention you starve for. Here, you’ll only get pity. I bid you good day, sir.

@Jordan – Well the short answer (and the one I’m most qualified to give ) is that this would never be suited as a second physical display.

Longer answer – there have been a few demos/prototypes of wireless displays… but as far as I know, none exist in the wild. Doubtful none of these prototypes use Bluetooth for video transport (I tried to Google it, doesn’t look promising). I’m not sure there’s even a “Bluetooth profile” for video, so that’s a barrier right there.

What this IS is an autonomous Linux box in small form factor, hackable, and cheap. So cheap in fact that it does make sense to use it purely as a display device (the basis of your question). But given the limits, I’d be curious to use it as a way to present data at regular intervals (ie, continuously upload a new image every 60 seconds, with data embedded in the image.. new email, weather map, etc). A desktop computer would be really good at making images which are densely packed with useful information. I’ve been thinking about doing this with my Nokia N800, as Nokia pretty much killed the Maemo ecosystem.

@Jordan Bluetooth is too slow for this but you could possibly use USB for it. Even then you would want to do compression and lower the frame rate.
Another option would be to use it as a console device over bluetooth.

Love this little hack, I wonder if the pinout is compatible with a larger screen, something in the 5-7″ range for use a a simple little remote/Home Automation system. but as is it would work for that purpose obviously. What’s the CPU clocked at? I would imagine sub 100MHz.
Great work guys.

Depending on how much hacking one wants to do I would suggest using J4 as your serial interface to a micro controller of some kind to add GPIO to this device.
Now if this just had WIFI it would be really handy.

No audio but you could add it using the UART on J4. Just hook up a small micro and send the audio data over the UART. It supports over 115200 baud. You could get okay sound out of that. Not great but you could get something.

Yes you are right , in the video the touchscreen isn’t connected. But it is perfectly useable. A atmega 8 is sampling the touchscreen and sends its values over to the df3120 serial port, emulating a “Gunze” touchscreen controller. tslib has build in support for these controllers. If you want I can post the atmega code on the site..but nothing too fancy maybe 20 or 30 lines of code

I’m wondering if any of you have actually read the page(s) to discover what you can actually do with this photoframe.

We don’t need to figure out how to get an rs232 port onto the device, it has one already, all you have to do is solder a header or the appropriate wires to the board (Tx,Rx,GND), if you need true rs232 then use a max2322 chip to translate the voltages.

Why not get one of those used android phones with Wifi. Seen them on craigslist.org, or ebay from $30-$50, many have CPUs from 535Mhz-600Mhz, 256MB RAM, 512MB ROM. If you can compile a custom ROM image for it, you can get your own VNC viewer, or simple text terminal, all via Wifi.

I can’t get the provided image to work. I installed the bootloader and have an ext2 SD with the provided image on it, but it just sits at a black screen.
The USB port seems to be a usb/serial bootloader at this point. After a while it appears to reboot into factory firmware.
What did you do to the provided image on the site to make it boot!

It seems to read the bootloader (and YES, I am holding the buttons) as the USB port is recognised as the uboot serial device (which I can’t use in Windows as no driver) so I know it gets that far.
I have an ext2 SD card with the provided image on it, in the primary partition (only partition).
is the image linked on that site compressed or ready to use? on one page they talk about decompressing a .img.bz file, but I downloaded a .img file only.
Does it have to be the only file on the SD?

Ahh. Ok, used that tool and it made the SD with all the right files and directories etc…
It shows up as being ext3 not ext2 though? Is that set inside the image or by the tool that writes it, because it still doesnt boot!
ie, does the uboot on the frame require ext2 or will it work with ext3?

Got my frame today, threw the example root FS onto a card and it booted up. brought up the ethernet over usb adapter and tried to ssh into it and was prompeted for a password. no idea what it is lol .. am i missing something or should i try make my own rootfs from scratch?

incidently i tried to use the usb-ethernet thing in windows7 and also tried to burn the img to the sd card in windows, couldnt get either to work. so doing it all through a headerless crunch bang box as seems to work faultlessly, if that helps Pyrofer.

to add, the example fs on the site was not compressed, does the (i assume) earlier compressed file have no root password? . did also try to telnet in rather than ssh in but no joy.(read some stuff on the bifferboard site that you first telnet in to set the passwd then ssh from then on.

Got mine to boot using the example minifs from the site but it doesn’t seem to want to play ball. It’s showing Tux and what I assume is a text cursor but I can’t get Ethernet over USB to do anything.

Trying to set it up in Ubuntu 11.10 without any luck – setting the addr and netmask as suggested just causes the network icon to flash a bit then the it just disconnects. No Rx packets, all Tx packets vanish into the ether.

Haven’t had any luck with Windows (7) either. Generic RNDIS drivers don’t like it and changing the PID & VID of a gumstix ethernet gadget driver just gives me ‘The device cannot start’ :T Won’t even go as far as showing up in Network Devices.

Finally got mine to boot! just writing the image directly to my SD didn’t work. I had to archive off the files and manualy partition the card as ext2 then put the files back on. After that it booted.
I now have a penguin and a USB device I can’t install a driver for, I too have tried the RNDIS drivers with no luck using windows.
I wonder if its possible to modify the image in a way that boots with the bluetooth serial port profile linked to the console so I can connect over bluetooth instead of requiring the usb device.
I saw that it has a console on J4 (uart2) so will solder some connections to that next.

Got mine running, was being special,has to be on a preformatted ext2 drive, also the frame comes up on the USB network as 172.16.61.1 so you bring the pc up on 172.16.71.3 and telnet to 172.16.61.1 and got a prompt! Reason I was getting a password was I was trying to ssh to 172.6.61.3 I.e.i was just topping back to my Linux box !

I’m sorry guys I don’t use windows at all so I have no clue what driver to use. The image doesn’t need a password if you telnet into it:
# ifconfig usb0 172.16.61.2/24 up
$ telnet 172.16.61.1
Trying 172.16.61.1…
Connected to 172.16.61.1.
Escape character is ‘^]’.

Oh forgot to say, the screen will turn off after a few minutes, because that’s what linux does… The frame is actually not off but you will/would have to have a process opening the console for it to reactivate, or disable the blankout in /sys

I tried the plasma demo, cool!
Then I put the example code for writing to the display on and sent some text to the screen.
Because I formatted a 128meg SD in Ext2 then dumped the files onto it I have loads of space free.

It’s fun to cat random to fd0 and watch the pretty pixels :)

Going to try making some apps for it now. I wanted to link it to my Bluetooth OBDII adaptor in the car and display random Car diag info via bluetooth.

These are well known!
You can edit the config to busybox to add chmod ( I did) and you have to edit the version of libtool it downloads to fix the vnc errors.
Hang out in the irc channel for more help.

I have tried the 32MB upgrade without success. I soldered a MT32LC16M16AP2-75 chip. The frame boots and Linux works perfect when using the u-boot for 8MB. But when I modify u-boot to make it use 32MB, Linux doesn’t boot, I only get a black screen (even without backlight).

I have only modified two lines of u-boot, maybe the modification needed isn’t this. The lines modified are:

hey I decided to have a play with one of these whilst I wait for the raspberry pi to arrive back in stock having spent some time crawling through all the information I can find on them, ive got the modified bootloader on the Parrot, and I think ive got minifs-full-ext.img populating the ext2 linux filesystem on the SD card using the dd comand. I try then to boot the parrot and it flashes the four squares quickly then some ‘noise’ of pixels to the screen but then seems to hang on a black screen no TUX at all :(

and one thing I did notice was that when they run dd if=./minifs-full-ext.img of=/dev/sdc1 terminal returns

45720+0 records in

45720+0 records out

23408640 bytes (23 MB) copied, 8.59778 s, 2.7 MB/s

im getting
39965+1 records in
39965+1 records out
20462509 bytes (20 MB) copied, 12.7574 s, 1.6 MB/s less records in and out and less actually copied throws up a confused face, could anyone point me in the right direction or offer advice.
cheers
ollie
Parrot DF3120 v1.20