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.

[youtube=http://www.youtube.com/watch?v=cwN6eztHQSA&w=470]

[Thanks Dans34]

88 thoughts on “This Digital Picture Frame Runs Linux Better Than You Might Think

  1. 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!

  2. 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.

      1. 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.

  3. 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).

    1. 800×600 over DVI is at least 7 gigabits per second. Bluetooth 3.0 (which the frame doesn’t have) is 24 megabits per second. Bluetooth 2.0 bandwidth is negligible.

      Adapting wireless displays to a lower bandwidth requires a lot of processing on both the host side and client side.

      1. “800×600 over DVI is at least 7 gigabits per second”

        On what planet?

        1920X1080 = 148.5 Million pixels
        3 colors * 10 bits * 148.5 MPixels = 4.45Gbps

        Full color, uncompressed 1080i = 4.45 Giga bits per second.

        Please come back when you actually know what you are talking about. 800X600 is NOT at least 7Gbps, that is a completely ridiculous statement.

      2. And yes, I mistyped 1080p as 1080i. Autocorrect sucks on the iphone.

        I am basing off of the HDMI 1.3 spec, 30 bit color, so even the lower 18 bit color a cheap LCD like that could display would significantly reduce bandwidth.

      3. @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.

      4. No, actually the math is weird, not wrong.
        1920 * 1080 = 2.073.600 pixels (yes, 2 million pixels)

        Let’s make this 28 frames / sec :
        2073600 * 28 = 58.060.800 pixels

        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.

        This is still a lot more than the max. Bluetooth 3 bandwidth.

    2. 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.

      1. 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/

      2. lwatcdr: Exactly.

        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.

      3. @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.

      4. 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.

      5. @fartface –

        “lying?”

        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.

      6. @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.

        This device doesn’t appear to be available in the US, either.

      7. @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.

    3. A friend of mine has bought and done this. The install for it on the site even comes with SDLvncviewer; and you can just use the ethernet gadget to connect to it.

      At the moment, it’s connected to a Bifferboard running XVNC server, which connects to it and starts the vnc client.

      It only manages a few frames per second, but for a lot of uses (or for text), it’s absolutely fantastic for the price.

      If anyone’s got any questions or ideas about it, I’d be happy to pass them on!

  4. 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.

  5. Actually this would be perfect for adding digital gauges to a car. If someone can figure out how to get a rs232 port into the processor or even some GPIO so you can have analog or digital input.

    WEll, it depends on the LCD, it’s it’s not a wide temperature range LCD, then it will be useless in a car during the summer or winter.

    1. You have no less than 3 of them.
      From the back scan.
      “J5 is UART0 – Bluetooth.
      J4 Is UART2 — Console for u-boot and linux.
      J6 is UART 1 — it has a different pinouts than J5/J4l”

      And here are the GPIO
      GPIOs found:

      GPB7: usb Vbus detect
      GPB8: usb D+ pullup enable
      GPG4: SD write protect
      GPG9: orientation detect 1
      GPG10: orientation detect 2
      GPF0: BT BT_WAKE (?)
      GPF1: BT nRESET (?)
      GPF2: SW15 (inverted)
      GPF3: SW16 (inverted)
      GPF4: SW17 (inverted)
      GPF7: SD card detect

      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.

      1. “Now if this just had WIFI it would be really handy.”

        It involves more hardware (and power), but a quick hack would be to wire the serial port to a a openwrt router’s serial port, and use serial networking. Works fine for a lot of Arduino etc users.

        When the Raspberry pi materializes, hopefully it works with $5 USB-wifi dongles, and there’s our cheap platform.

    1. Some frames have a buzzer though. I have one that makes little beeps when you switch it on/off. :) Thanks for letting me know though.

      Also, I accidentally clicked Report when I meant to click Reply. Please ignore this, mods. :$

    2. 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.

  6. Really cool but is the TouchScreen of any use or does it just look nice? ^^

    I can’t see that it’s connected and he isn’t telling anything about it on his page :/

    With Touchscreen it would be a real awesome device!

    1. 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

  7. 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.

  8. hmmm wii mote+ this = easily portable emulator? would like to see if a gc or nes emu could be ported to this and use the wii mote as controller like used in idevice emus or droids

  9. 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.

  10. The default sample minifs linux firmware is configured to use usb-net and has a vnc client… You can easily use xvncserver on the host, and connect to that instance from the frame…

    On the host you can then run anything in that xorg instance, including opengl demos & screensavers (RSS etc), it get displayed very nicely on the frame..

    That’s how I use mines anyway :=)

    1. 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!

        1. 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?

          1. Ah, it shouldn’t be a file on the device. You don’t need to write a file system to it – the img file is the entire partition. The image file contains the file system and everything needed.

            Have a read of the ‘Toolchain/rootfs’ section – it needs to have just one partition and the img file has to be dd’d onto the drive, not copied as a file.

            Not sure how you’d do this on Windows, but a quick Google search says that something like https://launchpad.net/win32-image-writer may be able to do it!

            If not, it might be worth booting into Linux (even via a virtual machine) and just following the commands in that ‘Toolchain/rootfs’ section.

            Hope that helps!

          2. 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?

          3. I can’t check at the moment, but ext3 should be fine. Make sure it’s the first partition though, and that it’s the right size and it should be okay.

            This is all from memory! I’ll try and have a look later when I’m home and see if I can give you some more details!

  11. 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.

    cheers.

    1. 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.

  12. 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.

    Any suggestions people? Cheers in advance.

  13. 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.

  14. 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 !

  15. 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 ‘^]’.

    / #

      1. Okay, I tried it again with netmask 255.255.255.0 as per the site – I’ve tried that numerous times before I might add >__> – and now telnet seems to connect just fine. :T

        I must be doing something dodgy. I’ve just noticed that the cursor is flashing on the frame today. There wasn’t any movement previously…

  16. 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

  17. Indeed, I just noticed the screen saver :p

    A serial port successfully connected on JP4, I have console!

    Why is the demo shown in the video not included on the image?

    Can we start a repository of apps made for this frame now? Next step is setup the dev environment and compile the example app, then its onto making a game.

    Anybody care to make a guide on how you connected the wiimote and got input from it?

  18. @pyrofer good job on the console. I have a 4 pins header sticking out of a small hole on the side of the one I have on the bench, works really well P-)

    The demos are not all included because some of them are very big. I tried to keep the size reasonable, it’s still fairly easy to add them back…

    For bluetooth/wii, the minifs has the library to interface it compiled in, it’s a fairly standard install…

    If you feel like hacking, join us on #df3120 on freenode — but be patient, we’re not necessarily there/active/talkative so it’s can be a bit of a test ;-)

    1. 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.

  19. finally got some time off work to have a proper play tonight, only got the plasma demo and played about with the vnc client last night, cant thank you guys enough for the hard work!

  20. 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:

    //#define PHYS_SDRAM_1_SIZE 0×00800000 /* 8 MB */
    #define PHYS_SDRAM_1_SIZE 0×02000000 /* 32 MB */

    Could anybody please post a working 32MB ready .plf?

  21. I used the pre-build .plf to load u-boot on the device. When i start the Picture Frame while holding down the left+middle button i see this:

    Screenshot

    Its always the same wheter i have a SD card with the image on it plugged in or not.

    Any clues ?
    I used the pre-build image.

  22. 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 :(

    been following http://w.droidcloud.info/ParrotInstruct.html

    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

    1. I have no sorted my problem ;) and thought id share my soloution so if anyone is having the same problem they can try my solution.
      It seems that the image provided at https://sites.google.com/site/repurposelinux/home just refuesed to work for me, no matter what i did. I thought i was going to have to compile my own. but i tried with this image http://translate.google.com/translate?hl=cs&sl=auto&tl=en&u=http%3A%2F%2Fwww.sistemasorp.es%2F2012%2F01%2F19%2Fprobando-el-marco-digital-parrot-df3120-parte-1%2F and it seems to be working. Well i have tux so far :) hope it helps anyone.

      1. I wasn’t able to use the original image also, but Ollie’s version seems to work. I can connect through USB but there is no bnep0 device:

        # ifconfig bnep0 192.168.4.10
        ifconfig: SIOCSIFADDR: No such device
        Any idea?

        Thanks.
        George Fenyvesi

Leave a Reply to JakeCancel reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.