Review: mbed NXP LPC1768 microcontroller

mbed is a next-generation 32-bit microcontroller platform. It’s a prototyping and teaching tool somewhat along the lines of Arduino. On steroids. With claws and fangs. Other contenders in this class include the MAKE Controller, STM32 Primer and Primer 2, Freescale Tower, and Microchip’s PIC32 Starter Kit. The mbed hardware has a number of advantages (and a few disadvantages) compared to these other platforms, but what really sets it apart is the development environment: the entire system — editor, compiler, libraries and reference materials — are completely web-based. There is no software to install or maintain on the host system.

The Hardware

The mbed board is sensibly priced at $60; about middle of the road among its peers. mbed’s size (or lack thereof) is among its greatest assets, measuring only about 1″ by 2″ (26 x 52mm) in a stout 40-pin DIP package that just barely manages to fit in a breadboard…a major win.

The top of the board is dominated by the microcontroller itself: a 60MHz NXP LPC1768 based on the eminently capable 32-bit ARM Cortex-M3 core, sporting 64K of RAM and 512K flash, and rounded out with an embarrassment of peripheral riches: Ethernet, USB (host, device, and to-go), CAN bus, multiple serial, I2C and SPI buses, 12-bit A/D and even a 10-bit D/A converter and realtime clock/calendar. Also on top is the USB connector (mini-B), some power regulation circuitry (operating on 4.5 to 9 volts DC, or USB power), several indicator LEDs, and the reset button (a plain vanilla tactile switch on our purchased unit, not the candy-like blue button seen in product shots).

The underside conceals an Ethernet transceiver chip (requiring only the addition of an RJ45 jack to get the board on a network) and a DiskOnChip-style component that provides a small (about 2MB) FAT filesystem when attached to a host system through USB, much like a thumb drive.

This latter feature — the FAT filesystem — is half of the key to mbed’s software-free, cross-platform magic. Getting new code onto the device is simply a matter of copying the compiled program (as a .bin file) to this drive. Press the reset button, and the new code is copied to the MCU’s internal flash and run. No special programming hardware dongle, no special bootloader software, just drag and drop. This has some serious implications. Pretty much any system these days can mount a FAT filesystem. We’re not just talking about getting Mac and Linux users into the fold alongside Windows…there’s also the impending wave of featherweight netbooks with ARM and VIA chips running peculiar, instant-on operating systems. Or the OLPC XO-1. Or older PowerPC Macs. The computers in the school’s lab that you’re not allowed to install any software on. Game consoles.

The Software

Cloud computing” is still the hot buzzword this week, and the mbed project has adopted the concept wholeheartedly, comprising the other half of their softwareless strategy. Everything with mbed — everything, even your own source code — resides on their servers and is accessed through a web browser. This carries with it all of the good and bad points of any other network-based service such as Google Docs. There’s the potential for this to be a fantastic tool for teaching and collaboration, and in fact they’ve created such an online community for mbed, with forums and publicly-shareable code libraries. One can move between home and office, or travel around the world, and resume editing code on any system with a solid ’net connection. No need to check for software updates; the server will always be current.

mbed programs are written in C++ (yes, thankfully it’s “programs” and “C++,” not “sketches” or “the mbed language”) using their JavaScript-based online editor. When ready, click the Compile button. The compiler and linker run on the back end, on the server at the other end of the network connection. Provided your code is all syntactically valid, a compiled .bin file will then be downloaded to your computer…save this to the mbed USB disk, press the reset button, and you’re good to go. In Arduino-like fashion, the mbed device also appears as a virtual COM port, so you can monitor a program’s serial output using any terminal program.

The Good

We were taught that you should always say something kind before criticizing, so we’ll point out that the above process does, in fact, work exceedingly well, and has proved to be both quick and reliable. Once you get into the groove, the sequence of operations is no more onerous than with Arduino or any other microcontroller-specific programmer dongle.

To their credit, unlike some microcontroller evaluation kits, there are no artificial limitations to the mbed compiler; the full code and memory space of the processor is available to your code. The editor has realtime syntax coloring and multiple undo levels. And double-clicking on an error message in the compiler output will take you directly to the offending line, as in any decent IDE. You can import existing code from your local system to the mbed “cloud,” or likewise export individual files or an entire project. All good stuff.

The real saving grace of this setup is the libraries, both the official functions in what they call the “Handbook,” and community-contributed code in the “Cookbook.” A tremendous amount of functionality has been implemented in a concise and usually object-oriented manner. It’s almost comical sometimes, after having worked with other microcontrollers and girding for some expected coding nightmare, only to find that the corresponding library handles a task in a couple of lines (browse through the Handbook and Cookbook for examples). There’s a tendency also to follow stdlib or “UNIX-like” conventions for file access, character I/O, realtime clock access, etc., so existing systems programmers new to microcontrollers will feel right at home, no weird function names or syntaxes.

The mbed’s FAT filesystem is also accessible to the microcontroller, making it useful for more than just program storage. Web pages can be served from this space, or a data logging program can store results here. If the two megabyte capacity is too limiting for your needs, have a look at the SDCard library in the Cookbook — it’s almost trivial to wire up and use. Pretty much all of the libraries are like that!

The Bad and the Ugly

Hardware-wise, there are just a few minor nitpicks:

First is with the local FAT filesystem. Even though this is one of the device’s most unique features, and the very thing that enables its platform neutrality, the implementation just seems a bit anachronistic. The aforementioned SDCard library demonstrates how readily that format can be used. It’s faster, with the potential for far greater capacity, and cards could be easily swapped out for different code or data files. Not a major disappointment, just seems like an opportunity was missed to make this product even better.

Second is with the indicator LEDs on the board. Four of them, scant millimeters apart, all blue…making them pretty much worthless as status indicators from across the room, where they all blur into a singular blob. Ten years ago, blue LEDs were novel. Five years ago, they were mainstream, festooning every last USB hub, mouse, flash drive and imported piece of crap. Today they’re just tired, let’s get over it. Different colors would indicate status at a distant glance.

Finally, not a problem with the mbed board itself, but it would be nice to see one of the Cookbook projects, the “BoB2” breakout board, made into an available product. The blank board can be ordered through BatchPCB, but after postage and handling the price for just the empty board — no components — is $33. Have this populated and mass-produced, bundle it with the mbed in a $100 package, and it sounds like a winning setup, ready to go head-to-head with the MAKE Controller.

But really, those are just nitpicks. Our real beef is with the software…the code editor specifically. If you find the Arduino editor aggravating, the mbed editor will have you seeing red (or maybe purple if you factor in all those blue LEDs). Like Arduino, there’s no true tab formatting; everything’s expanded to spaces, like it or not. Auto-indent cannot be disabled, and there’s seemingly no command to increase or decrease the indentation of a block of code. If you’re accustomed to anything more than arrow keys to move and click-and-drag to highlight text, the editor disregards a lot of system-native editing behaviors that may be deeply ingrained in your muscle memory (such as shift-clicking to select a range of text, or triple-click-and-drag for multiple contiguous lines). What’s more, the quirky behaviors are a little different across each browser and operating system. Don’t even try that triple-click-and-drag in Firefox for Mac…you won’t get your text cursor back without a complete reboot (seriously, just restarting the browser isn’t sufficient). And at present, only the most common browsers are supported; all others are currently shut out.

The closed-source nature of the tools may also be off-putting to some. If one finds the Arduino editor distasteful, there are options: get in there and change the code, or simply use a different editor and link with the Arduino libraries manually…it’s all legal and encouraged. With mbed, there are no alternatives. Access to the compiler and libraries is “free as in beer,” but not “free as in speech.” There’s little recourse should the service ever be taken down, or if they should suddenly start charging a subscription fee (there’s no indication this is planned, just a hypothetical scenario).

The good news, at least with regard to the former, is that software is of course infinitely more malleable than hardware, and it’s almost certain the tools will improve with time. The site is under active development…new “Home” and “Notebook” features were added for registered users just yesterday. Perhaps, given time, they’ll get the Command key working properly on the Mac. The selection of user-submitted code will expand regardless, making it progressively easier to do more and different things with this board.

In Summary

The mbed Tour page is frank about what the platform is good for, and what it’s not. mbed was intended as a quick prototyping and educational tool, and at that it excels. A lack of features such as a debugger or offline compiler keep this from being a professional-strength development platform, which is okay. Think of it as Arduino: The Next Generation. Although the mbed board costs more up front than Arduino, there are capabilities here that would otherwise require costly “shields” and strain every last byte and CPU cycle of the 8-bit ATmega328 processor: Ethernet, USB, SD cards…mbed handles these tasks with aplomb.

mbed is not without its flaws, and the “cloud” development approach may never sit right with some. For a product that’s just weeks out of beta testing, the results thus far are extremely encouraging. There’s immense potential here: a seriously powerful chip, easy to interface and to program. If the online tools can be improved, or if open source alternatives become available, mbed could be a major player. We expect to be seeing a lot more of this device in future hacks.

Comments

  1. bencoder says:

    Nice review, thank you. It sounds like it would be a good idea for mbed to eventually release a command line compiler so that those of us who like to actually use capable editors can do so on our system of choice. Keep the web based model as well, but there’s no reason why it should be all one way or the other.

  2. Kyle says:

    I agree with bencoder, I was rather excited by the specs on this thing but turned off by the “cloud computing” catch phrase.

  3. MS3FGX says:

    I agree, while reading this review it just kept sounding better and better…until the compiler part. It’s a great idea to put all that online, many beginers can have problems getting their computer setup as a build environment (especially if their OS doesn’t come ready for that sort of thing out of the box…) but there are many users who would rather have it locally. What if I have my laptop but no Internet connection? I can’t work on my code, or even access it?

    The review brings up a good point about discontinuation of service too. What happens if this company goes under? We are all stuck with little blinky bricks?

    The hardware really sounds amazing, especially the USB mass storage upload, program access to the flash, and built in Ethernet controller. But personally I would hesitate to buy it with the software situation as it is.

  4. jan says:

    this sounds really good and the article is well writen, thx 4 that! i actually enjoyed reading a long article a lot, missed that the last weeks!

    the chip sounds really good, imagine a uav or other robotic plattform with that on board! you could do a lot of things with that power, maybee even video recognition.

    but the online only approach makes this a no go for any serious dev. its like web site development on the server… everybody started like this and then quickly moved on to a local setup. lags are too bad sometimes and i assume that on older pcs the browser would consume too much cpu and ram.

  5. BronzeG3 says:

    The problem I see with this system is the lack of in-circuit debugging. Debugging by LEDs is a giant pain for anything but the simplest of programs.

  6. amk says:

    It definitely needs a command line compiler. Let’s say you’re testing a project in the field, with no internet connection, and you need to make changes to the code. What then?

  7. amishx64 says:

    I agree with the other commenters (and the review) that the online-based programming and compiling is most likely a hindrance to most users. Sure it has its obvious benefits, but the disadvantages in this case seem to outweigh the benefits. This little system seems like it could be a great product but it definitely needs a standalone programmer. Maybe a portable app for flash drives with libraries included?

    If they release a (stable) standalone programmer, I’d really consider purchasing one.

    Very nice review BTW Phil. I appreciate the effort. :)

  8. Hugo says:

    THERE IS THE OPTION TO USE A COMMAND-LINE COMPILER, (or even a GUI environment like Eclipse with some configuration) it’s just not very well documented.

    I’ve used arm-gcc to build code for my (early prototype) version of mbed. You can still use the drag-and-drop programming, but may have more difficulty using some of the library code.

  9. Greg says:

    +1 Hardware
    -100000 online dev only

    Hopefully mbed folks will see what the users here think and offer a downloadable build tools feature. The lack of this will keep their platform in the category of – “neat, wish I could use it but no offline tools, next platform of the week please”

  10. jason says:

    I hope they reconsider and make a packaged header, libs, utilities, and docs download. Then we can use the cross arm gcc tool to make the bin. Web development tool is great for educational, but why limit ourselves here? Thank you for the review and coverage on this one. It is something that I will have to keep tabs on for progress on local gcc compiling.

  11. Phil Burgess says:

    @Hugo: that’s encouraging news! I’d downloaded CodeSourcery’s G++ Lite for ARM, and what I *hope* is a full set of mbed libraries through Subversion, but haven’t yet followed through with the daunting task of tying the two together. This gives me renewed hope…I’ll have to start poking at it again!

  12. SImon Faulkner says:

    Yeah yeah, but does it run Linux?

  13. James says:

    Wonderfully written review.

    I’m currently using the vinculum + arduino to do some USB host stuff and although workable, it’s somewhat painful.

    This chip sounded like a god send, until the software was mentioned. If the libraries are open source and compile with gcc, I’ll get one. Good luck @Phil! @Hugo, any chance you could provide a link to the documentation about it? Even if it’s bad, anything is better than nothing.

  14. Awesomenesser says:

    I got my mbed last weekend and it is the best thing microcontroller I have ever worked with. Yes the online programming environment was a little annoying at first but when I spent 10 hours on it writing a class for the 4D systems oled screen I got pretty used to it. Just a point about the leds if you don’t like the blue there is this thing called a soldering iron and you can replace them. For debugging I found that the best options are the usb serial terminal or you could just write to the onboard filesystem. Another plus is that you do not have to disconnect the mbed while running the board and the usb keeps its connection the whole time. And a correction the board is going to be $99 but the preorder is $60, so get them when it’s cheap.

  15. nave.notnilc says:

    seems neat, except for the cloud crap. I’m wondering what sort of uses one would have for this mcu?

  16. mj says:

    I’m not too crazy about it’s lack of onboard digital output pins. Sure, you could use the I2C and a breakout for more addressable pins, but I’d much rather have had those 4 blue useless LED’s turned into 4 more digital pins. A lot of pins are eaten up by the extra serial connections, I guess those can be reconfigured for digital out pins?

  17. Stu says:

    Indeed, the cloud based model definitely seems a bit gimicky.
    Also, there are lots of concerns with cloud computing in general, as well as the mbed platform – how about code privacy and ownership – what if you were developing confidential code for a major product release? Who ‘OWNS’ the code at the end of the day if its written and stored on their online solution?
    The guys at mbed could be peering into everybodys developments even without consent, anybody looked carefuly over their terms & conditions?
    What about security – with a simple brute force password cracking effort spread over the course of weeks or months, would you even know if you’re code was being compromised by a third party?
    What about server breakdown and backups – various companies have also publically revealed they lost thousands of customers data and can’t restore it, in some cases even when previously claimed they backed up the data (most popularly email systems).
    No matter how paranoid you might think these things seem, these things ARE happening right now, there are black markets trading in hacking techniques and CC lists, VXers, DDoS zombie networks, etc etc.
    You’re not safe people, we’re all doomed!! ;-)

  18. Stu says:

    Oh by the way – are the GPIO pins 5v compatible?
    LOL.

  19. Awesomenesser says:

    @mj
    The leds are 4 of the pwm pins that are already broken out. To solve the fact that their arn’t enough i/o’s I am using a pcf8575c which is a 16bit I2C to i/o controller (up to eight devices can be hooked together). Because I need more adc’s I am using a MAX11617 (12 channel 12bit I2C adc) which can be hooked up on the same I2C as the i/o controller.

    @Stu
    Almost all of the brokenout pins are 5v tolerant. The LPC1768 datasheet labels the pins that are not (The important ones are like serial/SPI/I2C/CAN).

  20. therian says:

    It smells fishy, online dev, no debugging .

  21. Hugo says:

    The header files and libraries (to use with offline command-line compilers) are here:

    http://mbed.org/projects/libraries/svn/mbed/trunk

    Note they only provide pre-compiled binaries plus header files for the libraries, but the architecture of the device means you could (if sufficiently motivated) rewrite them all from scratch yourself. I haven’t used it for a while (actually over a year… sorry Simon!) but as I recall, I was able to link the libraries using a fairly standard build of arm-elf-gcc/ld without much hassle.

  22. therian says:

    @Awesomenesser
    “For debugging I found that the best options are the usb serial terminal or you could just write to the onboard filesystem. Another plus is that you do not have to disconnect the mbed while running the board and the usb keeps its connection the whole time.”

    haven’t you heard of ICSP (In-Circuit Serial Programming) also true for debugging, this things was here for a while like for 20 years and almost every uC support it or similar means

  23. Mike M says:

    I wonder if they would ever offer just the chip for integration into other designs.

    My main interest is in the http server combined with the ease of using an SD card for memory, but is seems its still pretty early in development…it will only serve files off the drive.. what if you want dynamic content? Also it looks like the http server polls the port instead of being interrupt driven. My application is time critical. I don’t have time to poll when nothing is there.

    The specs of the chip sound great, couple it with a professional low level dev kit for a couple hundred bucks and I’d be in.

  24. Kenny G says:

    Yay for the History Eraser Button.

  25. Sdlion says:

    @MS3FGX
    “What happens if this company goes under? We are all stuck with little blinky bricks?”

    Knowing the history of the Linux like developments and the lot of articles in this blog… some people would hack it and make it work.

    For professionals bothered about blue leds, like Awesomenesser said… if it’s so troublesome, sure they can replace them.

    And about the code-in-the-clouds paranoia… its original reason, is quick prototyping and an effective educational method. But still, if this is so good hardware-wise, then a hero with a keyboard in his arm, 1’s and 0’s in his mind and with H-K-R written on his back, will make us the day eventually.

  26. riazap says:

    I’m actually in complete agreement with therian here. This seems fishy. What are you supposed to do if you’re out in the field and you want to try out something new on the fly and there’s no internet access? (I’m thinking UAV experimenting here). Being tethered to the internet (or The Cloud) as a requirement is most certainly a hinderance.

  27. therian says:

    Cloud development is not a problem today, it just make me suspicious that they hiding something, like they did not intend this platform for serious development, why? Is there other more serious reasons for such assumption?

  28. Brian says:

    @Mike M

    The chip is made by NXP, and it’s available here: http://search.digikey.com/scripts/DkSearch/dksus.dll?Cat=2556109&k=LPC1768

    This seems like a neat little development board with some extra hardware on it. There’s nothing preventing one from simply not using the libraries and development tools that they provide, and rolling one’s own cross-compiler toolchain. They even provide schematics so you wouldn’t have to reverse-engineer anything.

    @mj

    Usually on a chip like this, all of the GPIO pins have special functions, but any should be usable as normal GPIO. The pins that are wired to the ethernet PHY are obviously unusable as GPIO, but it looks like everything else that’s not power should be fair game.

  29. Queeg says:

    Cloud compiler?

    Sounds like “All your code are belong to us.”

    Glad to hear there’s at least some command-line ability.

  30. tim says:

    what external hardware ?
    4 led and a switch !
    60$ for an 8$ chip, no thanks, not for me.
    You can have a real dev board with tft lcd and ethernet for less than this.

  31. teck monkey says:

    could be useful…cant wait till a 64bit comes out.

  32. Andrew says:

    I believe they are licensing some commercial arm compiler. I had asked about licenses for the s/w they provide, and I think they said it was a modified BSD license – they posted that question/answer on one of their forums.

    They also don’t guarantee the version of the compiler that is available. If an upgrade breaks your code, you’re SOL.

  33. therian says:

    “60$ for an 8$ chip, no thanks”
    they should name it something like __duino and people will not notice price difference and buy it, solid fact by now ;)

    Just sugestion, maybe hack a day should develop break out board for 32 bit uC, nothing extra just easy asses to pins and maybe headers on top for ICSP or JTAG

  34. Frogz says:

    NOT A HACK UNTIL SOMONE ATTACHES IT TO A ARDUINO!!!!
    haha
    i want 1!!
    think i can program it with microsoft vbscript?

  35. Drone says:

    $99 in the end – ouch. A Beagle Board is $149, an Alix board is even less and IAx86 compatible. Go look what you get for that!

  36. Akoi Meexx says:

    Excellent review, was glad to see the pros and cons like that. While having SD access would be nice, I like to think that limiting the space to 2 MB FAT gives developers a challenge to write efficient programs. I’m sure there will be revisions to the hardware later on though, there always are.

    @Hugo:

    Got the steps documented? This would really be a great board to start development with, but I’m just so very put off by cloud computing.

  37. pppd says:

    All those complaining about the price must remember this product is mainly targeted at customers who are either not capable of soldering SMD or simply do not have time for making their own circuits and getting all tools/hw together.

    I just hope we won’t see many posts about lighting up a led with a 32bit ARM uC :)

  38. Andrew Young says:

    Great Review. I’ve been playing with an mbed since May last year and I have nothing but praise for the sweet little device. I predate the 6502 and have messed with many but nothing comes close to the ease of using the mbed. It is meant as a quick and easy development tool and it does that so easily you wonder why nobody has done it before. It has an amazing set of capabilities, most of which are beyond what I want. I don’t think that it is intended for folk who are scared of the cloud and they don’t have to use it, they can use the old fashioned clunky stuff that used to blow my brain! After all, it is just an ARM processor but with a lot of bells and whistles.

    As for going bust, I suspect that is unlikely as it comes directly from ARM, Cambridge – hardly a fly by night company!

    The support guys are great, too. Quick response and nothing seems to throw them.

    p.s. The LEDs on mine are yellow!

  39. ericwertz says:

    I’ve tried to like this twice since it came out and I can’t because of the tethered fail.

    $60 offline, yes. $100 offline or $60 online, nope.
    Both Cortino and Maple are better fits for most non-noobs, and for the rest, Arduino is just fine.

  40. Doktor Jeep says:

    The realm of programmable controllers seems vast and complicated and most of what is already in place escapes me.
    So at times I wonder if just latching onto one product and learning it inside out would be the way into this realm.

    Would this product be good for that?

  41. adam.fred says:

    I think the online IDE+cross compiler is the way of the future. There will open source projects that do this also one day. For little devices that can be remotely programmed it makes sense. I am a noob and I bought an mbed for $60. The MCU is the cheap part anyway, everything else = $$$.

  42. UltraMagnus says:

    @Doktor Jeep

    once you get used to one controller, they all tend to work quite similarly, sure you may have to learn a new set of libraries, and how the hardware works. but 90% of it is still the same programming no matter what uC

  43. Sebastian says:

    Review error…
    The schematics diagrams aren’t complete, and that’s a real shame…

  44. cantrip says:

    “Everything with mbed — everything, even your own source code — resides on their servers”

    That’s the part that gets me, just like it seems to get a lot of others. Stability, reliability, ease of access… Online tethered adds another level of possible trouble to the mix. My circa 1994 “laptop” I use with my basic stamp won’t like this, I wager. Not being able to keep all your software at an unchanged, stable version is another pitfall. Even if everything works today, it doesn’t guarantee that the people that take over from the developers won’t mess something up, and there’s no version rollback the user can get at.

    BUT, negatives aside, it’s a $60-100 chip with a host of cool things to do. And it’s tiny. And it looks like they’re gunning for a good support system so people can piece code together lego style rather than writing it all out new every time. Another contender to replace my stamp, but the cloud’s user experience control makes me want to sit back and see what happens in the months after launch.

  45. ross says:

    Espardino is a similar product as mbed, but you can download the SDK, and the library is open-source. The size is small, and the price is only about €26.00. One thing that attracts me is that, it has microSD slot included, since I would like to do some data logging.
    I think I will try it instead of mbed, since I am not comfortable with the clouds approach too.

  46. Ron says:

    Great product except for the online cloud editor/compiler. Maybe there are issues with my internet connection, but now that I am working with a large project, i.e., 30 files ported from AVR project, it seems like everytime I turn around I am waiting 5 seconds to jump from one file to another. That ticks me off — like going back in time 30 fricken years.

  47. Matt C says:

    It turns out that you don’t need to use their on-line compiler. Any binary that will run on an LPC1768 can be copied to the device and it will load it into the controller and run it.

    The interface chip is actually another ARM processor that talks USB and provides a file system and serial port to the host, and also knows how to load code into the LPC1768 from the FAT file system. Very clever, actually, and in practice pretty handy.

  48. darkore says:

    The trunk version of eLua compiles for mbed using an “off-line toolchain” (CodeSourcery for example). You can copy the binary to the mbsed file system and use the USB UART as the eLua console. Also, eLua uses the mbed file system itself, so you can simply copy a file on the PC and have it instantly available in eLua.

  49. Cagdas says:

    Hi,

    I need help for buying a new development board. I have several question about NXP ARM Cortex-M3 LPC1768 Development Board. Ebay link is here:

    http://cgi.ebay.com/NXP-ARM-Cortex-M3-LPC1768-Development-Board-3-2-LCD-/190501274320?pt=LH_DefaultDomain_0&hash=item2c5ac2c2d0#ht_4993wt_907

    How can I load my programs in lpc1768?
    Can I use USB for programming?
    Is a JTAG connection required for programming and debugging?
    My laptop have not jtag and parallel port.

    I have some PIC programming experience. I want to study on arm cortex cpu. Have you any suggestion for arm cortex development boards?

  50. Stanley says:

    The following link points to a post on the mbed forum discussing how to use an offline GCC to compile projects that link with the mbed libraries

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 96,756 other followers