Go Back

LPC1xxx 1GHZ Wireless Board Preview

Thursday, March 14, 2013
It feels like I've been working on these boards forever -- and to be fair there's literally years of effort and >20K EUR in expenses here -- but I finally ordered a first batch of the USB stick and wireless node PCBs this week.  There's always something to improve, but overall I'm very happy with the HW and the related code base, and I think the boards are a significant improvements over any other project that I've posted here.

Admittedly there's nothing whatsoever exciting about yet ANOTHER wireless sensor node or platform, and it's probably more expensive than it needs to be if you went with an integrated MCU + radio, etc., but my goal was never to create a commercially viable board but something that was useful to me and met my own goals of having a rapid wireless prototyping platform based on an MCU family that I liked, and using fully open source stacks and toolchains.

RF1GHZUSB


RF1GHZUSB-REV-A PCB

  • LPC1347 (72MHz ARM Cortex M3, 64 KB Flash, 12KB SRAM, 4KB EEPROM, 12-Bit ADC)
  • Supports USB CDC, HID, and MSC out of the box
  • Easy to use CLI to send and receive data via USB CDC
  • Optionally supports USB HID command set
  • USB Bootloader for easy firmware updates (no extra HW required)
  • 4 layer PCB to keep reasonably clean routing and a clean RF section
  • Designed to fit in an inexpensive USB enclosure if desired (~$3 in single quantities)
  • RF section designed to work equally well at 868MHz (EU) or 915MHz (US), with excellent range and performance
  • SMA connector to attach various types of antennas (directional, small quarter-wave, half-wave, etc.)

I designed this small USB stick to be able to co-ordinate other sensor nodes from anything with a USB slot.  The main goal was to use a Raspberry Pi (Beagle Bone, etc.) as a cheap always-on network co-ordinator, but I also designed them with USB Host in mind.  My thinking was that with a single well-design USB stick I could plug different radios into mid-range MCUs with USB Host (LPC4357, etc.) and support various frequencies, modulation schemes, etc., without having to go through the FCC approval process more than once, and without locking myself into one choice on expensive HW.

RF1GHZNODE


RF1GHZNODE-REV-B PCB

  • LPC11U37 (50MHz ARM Cortex M0, 128KB Flash, 10KB SRAM, 4KB EEPROM, 10-bit ADC)
  • On board SD card with FAT32 file system support (USB MSC can enumerate as a mass storage device pointing to the SD card on the PC)
  • Built in LIPO charger (just plug in a USB cable and the board switches to USB power and charges the LIPO at the same time)
  • Supports USB CDC, HID and MSC, including HID Keyboard and Mouse emulation and auto config for multiple USB profiles (CDC + HID, etc.)
  • Easy to use and extended CLI
  • Out of the box support for many sensors available from Adafruit, including a unified sensor system to make adding new sensors as painless as possible
  • USB Bootloader for easy firmware updates
  • Easy to use radio framework (Chibi) that works out of the box
  • 4 layer PCB with dedicated GND and power planes, and an isolated RF section
  • Designed to fit inside an inexpensive IP65 (water resistant) enclosure (Adafruit Product 903)
  • RF section designed to work equally well at 868MHz (EU) or 915MHz (US), with excellent range and performance
  • SMA connector to attach various types of antennas (directional, small quarter-wave, half-wave, etc.)
  • Switch between 3.3V and 2.2V supplies on the fly (saves power), and board can be run as low as 1.8V

These were intended to be the workhorse, battery-powered sensor nodes. I spent a LOT of time and effort trying to get the lowest current level possible in sleep mode (currently ~20µA with SW wakeup, but this should in theory be able to go lower with more time and effort).

What's the point?

Both of these boards are really just a labour of love.  I love ARM, I love wireless, and I've spent so many years and so much time and money on these boards -- and earlier boards that made these ones possible -- that it just seems a shame to me that no one else was benefitting from all that work and effort.  I designed these boards purely for personal use and as a platform to make rapid prototypes myself ... and I definately have no illusions that there's big money to be made in yet another wireless sensor node platform.  But I'm convinced it's a pretty good bouncing board to test out some ideas, and while these boards and the library are far from perfect, they're a lot better than many of the closed source systems that currently exist.

What about the firmware?

I've signed off on a new combined LPC11U24/LPC11U37/LPC1347 code base that allows you to switch between any of the three MCUs with just a small change in the config file.  I'm just waiting for the (I hope) final PCBs to come in in two weeks time, get a small batch assembled, and then get them into the hands of testers for some feedback.  Once I can work out the major bugs from the first batch, I'll release the board files and code base into the wild ... but I'm extremely happy with the code base as is, and I really think it's an excellent starting point for anyone interested in doing anything serious with ARM and 802.15.4 wireless connectivity.

When will it be ready?

I can't make any promises here.  Again, this is really just a labour of love not a commercial endeavour ... but I hope to assemble a first batch of 100 or so boards in a few weeks, and to send them to some friends and colleagues, then make some quick changes based on that feedback.  I also need to spend some time working on some SW on the Raspberry Pi, etc., to manage the sensor network, and haven't had 5 minutes to do that yet.  Hopefully in 6-8 weeks, though, I can have something ready for a wider audience.

Full story  | Comments (7)

LPC1347/LPC11U37 Update

Sunday, January 20, 2013
LPC 1347/LPC11U37 Wireless Test Boards

I finally found a few minutes to test the latest PCBs for the LPC11U37/LPC1347 and I'm pretty happy with both the test HW and the code base itself.  I think it's a significant improvement over any of the previous code bases posted here, and I think it should be a good starting point for projects moving forward.

Overall, I'm extremely happy with the flexibility offered by the (essentially) pin and register compatible LPC11U24, LPC11U37 and LPC1347.  This trio leaves a lot of room to maneuver optimizing for flash size, performance, price or package size with almost no extra SW development effort.  Making a code base that makes that as painless as possible took a bit of effort, but at least it's a one time expenditure.

I don't want to post many details until the code base is ready to go live, but I think it's all come together pretty well so far, and I hope it will be a decent starting point for a lot of people.  It'll definitely make things easier here to get prototypes off the ground in days or weeks rather than weeks or months.

Full story  | Comments (7)

LPC800 Low Power Options

Friday, January 18, 2013
I spent a bit of time looking at the low power features on the new ARM Cortex M0+ based LPC800, keeping in mind several years of (positive) experience with the M0-based LPC1100. Similar to the way that the LPC1347 impressed me as being everything I wish the LPC1343 had been, NXP seems to have learned from some of the low-power shortcomings on the LPC1100 on their latest low power 32-bit M0 chip.

One of the biggest shortcomings of the LPC1100 (and it's cousin the LPC1343) was that fact that if you wanted the lowest possible power consumption you were limited to using the +/-40% WDT oscillator for SW-based wakeup from sleep or deep-sleep modes, and SW-based wakeup wasn't possible at all from the lowest 'power down' mode.  Having SW-based wakeup is nice, but with tolerances like that you really have no control over the wakeup timing without using external HW so it's really a 'ballpark estimate' for timing.

The biggest low-power improvement in the LPC81x in my opinion is the inclusion of the new wakeup timer (WKT) that exists in the 'always on' power domain, and can perform a timer-based wakeup in any power mode, including the lowest 'deep power down' mode.  You have the flexibility to choose between the 1% IRC as a clock source (except in deep power down where the IRC is disabled), or a low power +/-40% dedicated oscillator available in any power mode.  It's still +/-40% in the lowest power mode, but given the longer wakeup times I tend to use the 'power down' mode most of the time (equivalent to deep sleep on the LPC1100), and I can choose between 1% for quicker wakeup and more accurate timing, or 40% but the lowest possible power when timing is less critical and I can accept longer wakeup times.  

The key here is that NXP has put more options on your plate, and you get to decide which tradeoffs to make, and clearly low power is all about tradeoffs.

If you're curious about my thoughts and a quick survey of the key low power features on the LPC800, feel free to have a look at my blog post over at lpcnow.com: LPC800 Low Power Features.

I've started playing with the LPC812 a bit and working on a simple project structure for it, and it will take me some time to really build up an informed opinion on the chip in practice, but I can definitely see it filling a gap on the low end when I just need to do some basic I/O like reading some sensors and logging some data or some basic motor control logic, etc., and while it's not a replacement for the LPC1100 series, it does compliment it nicely in the right situation and extra options are always welcome.

Full story  | Comments (81)

Efficient Coding for ARM Platforms

Monday, December 10, 2012


Interesting new series of articles from Chris Shore (ARM): Efficient Coding for ARM Platforms - Part One.

Full story  | Comments (0)

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. Next page