Hello
I'm looking for suggestions for an embedded microcontroller (processor, module or SBC all under consideration). I don't necessarily expect to get everything on one chip or module, we will be supplying our own motherboard either way, but the more we can get from the cpu/module then the less we need on the motherboard. The ideal list of requirements are roughly:
- A fast 8-bitter, equivalent in performance to a theoretical 100MHz 8051 with hardware multiply/divide unit, or a medium sized 16-bitter or a low end 32-bitter.
- 5V technology, or 3V with 5V compliant inputs/outputs. Surface mount.
- 512KB code space. At least eprom, preferably ISP flash (serial onchip bootloader). Code estimate based on our current 8051 code which is 60000+ lines in around 150KB using Keil C51.
- 1MB battery backed up SRAM, although might consider 512KB SRAM if we can cost effectively also have an additional 512KB+ of flash, possibly compact flash.
- Preferably a flat address space, but paging would be acceptable if we can get a "nice" page layout such as 32KB fixed + 32KB paged, and providing the development environment's requirements didn't steal lots of common page memory from us.
- Ethernet. 10BaseT minimal, 100BaseT would be nice. Would consider a software solution or a single-chip solution, but either way, don't have time to write the TCP/IP stack.
- 50 to 60 general I/O pins.
- 4 external interrupts. Multi-priority interrupt system.
- 2 CPU driven PWM channels.
- 6 serial ports, one of which can run in synchronous mode. (Suspect we'll end up with 2 plus a quad UART or 4 plus a dual).
- SPI channel, although I'm happy to bit-bang that. Likewise I2C.
- 8x 10-bit ADC (multiplexing acceptable), although I suspect we'll probably need to add a chip for this.
- Enough CPU internal programmable timers that we have at least 2 free for our own private use after any other CPU components (e.g. serial + pwm) are driven from timers.
- Realtime Clock, preferably a real hardware clock with programmable minute interrupts and alarm times, and not a software based interrupt driven clock off a simple "realtime counter".
- Watchdog timer.
- Power supervisor for RTC/SRAM protection and early power fail detection.
- Low cost (of course!) at 100 off quantities (500/year max). Difficult to quantify given that our target is an overall price including our custom motherboard, the complexity of which depends on what the cpu/module/sbc gives us, but as a guide, a module with the processor/flash/sram should be under $50.
We are currently considering either a fast top of the range 8051, the C166/167, or the Rabbit 3000 modules, but all of which have "issues".
A top of the range 8051 seems to be prone to poor longevity. Not currently sure about the longevity of a C166 or the availability of non-royalty TCP/IP or how widely used the C166 is.
The rabbit, although nicely priced with ethernet, currently looks like it hasn't got the horsepower. Dynamic C seems to suggest (in several documents) around 50000 lines of C takes 1MB, which compared to our 8051 running 60000 lines in around 150KB makes it around 6 to 8 times less efficient. Even accounting for the move to softools compiler (which we would definitely be doing), we are assuming some of the inefficiency comes about due to the Z80 architecture. Not only does this force up the code size, but we wonder how much gain the 44MHz really is when the code is this inefficient.
Software-only based TCP/IP on a 8 bit is also a concern, not having done this before.
So, if anyone has any alternative suggestions we can look into, I'd greatly appreciate it. I accept we are probably trying to get more out of a small 8 bit micro than most others would attempt, hence we're now considering 16/32 bit too.
Stephen