Friday, 15 March 2013

LPC800-MAX for Arduino users: not all sweetness and light!

A few days ago we received our prototype LPC800-MAX direct from NXP.  Top marks to NXP for getting it to us, and I was quite excited about the possibilities that it would offer.  Of course, I wanted to get all our example code, using the CrossWorks Platform API, running on the board.



Initial excitement quickly turned to disappointment.  Although the LPC800-MAX board is advertised as Arduino compatible, it leaves you with rather a lot of problems if you want to use shields with it.  Let's go through the limitations now.

Missing pins

Well, first off, consulting the schematic to provide a pad to connector mapping for the API, I discovered that Arduino D5 and D6 are not connected to any LPC800 pin!  What does this mean?  Well, it means that a number of readily-available shields, including nearly all LCD shields, are not immediately controllable with the LPC800-MAX.  Add to that things like the SparkFun El Escudo, Spectrum Shield, the ModKit Modproto shield, and all the 16x2 LCD shields just for starters!

Of course, do some cut-and-shut surgery on your shield connections or use a Go-Between Shield to make your connections, but still, you're missing something a lowly AVR provides.

So, you're going to be a little disappointed if you've already invested in some shields.  The good news is that the SolderCore LCD and Arcade shields don't require D5 or D6, so they just work with the LPC800-MAX.

More shield woe!

It doesn't stop there.  The default for Arduino D2 is that it's unconnected as well. You can rescue the situation by moving the position of SJ2 to connect TARGET_TX-PIO0_6 to PIO0_6 and, in doing so, connect up D2. I'm beginning to think this isn't such a great advertisement for Arduino compatibility.

Analog, not digital

Now, the analog header is for analog input. And indeed, it has four analog inputs routed to an I2C ADC/DAC.  You can't use those for digital output, which means that your "compatible shield list" reduces even further.  Strike LCD touch shields, BlinkM breakout, liquidware InputShield, IteadStudio Colors Shield...  You get the picture.

Getting it to work...

Although there are serious deficiencies with the LPC800-MAX for Arduino users, it still has I2C and SPI routed to the headers, and they work. So, you can connect some digital sensors and some SPI-based LCDs to do serious work. And it also has a built-in CMSIS-DAP which works with development tools such as CrossWorks.

I got the LPC800-MAX up and running in no time, despite the Arduino pin headaches. But if you've invested in Arduino shields, the Freedom-KL25Z board has a better set of features and more pins to play with, and has more RAM and flash.  Sure, it doesn't have LPCXpresso/mbed format to its name, and if that's what you're wanting, perhaps the LPC800-MAX has its place.