We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
How do I go about picking an architecture ? My first thoughts suggested Cortex M3 but the more I look into it the less sure I am.
Obviously I don't to go to the trouble of learning a new technology only to find that I've made a bad processor choice (ie nearly end of line). I've spent many hours looking at many websites and have yet to find any high-level stuff on choosing my first ARM device.
If there's one thing wrong with ARM its the almost infinite number of devices
I'm an embedded developer wanting to undertake my first ARM project, so I'm completely new to the ARM architecture. I want a low power device with serial, USB and some ADC channels.
I don't think Cortex or normal ARM kernel is too important.
Look for a reasonably recently release. Each new release tends to either be cheaper or add more goodies. And being new means the manufacturer (still) believes in it.
Having so huge number of choices, you must really make a list of your requirements. Besides the obvious (number of UART, ...) you should go a bit more into details.
Do you require FIFO or DMA for the UART? Do you require FIFO or DMA for SPI? Do you require battery-backed RAM? Do you require low-power sleep modes? Do you require the family to have big brothers with lots of flash or RAM, in case your code grows larger than planned? Do you require the family to have big brothers with more I/O pins, in case you want to later build a deluxe edition of your product? Does Keil simulate all the peripherials you need, or do they just simulate the core? If you call a distributor - what chips would they recommend? Is it 5V-compliant in case you need to mix 3.3V and 5V logic? Can it produce the low core voltage internally, or does it require dual voltage sources? Does the manufacturer (or someone else) have a good set of sample code that makes use of most of the peripherial functions of the chip? Do you have special needs for ISP and IAP? Speed of erasing flash sectors? Suitable sector sizes? Built-in boot loader, or requirement that you write one? Does it seem "popular" if you surf around a bit?
If all you want is to learn to use ARM chips, then you should probably give the biggest priorities to "popular", and good availability of sample code. Then go for the evaluation board that has the coolest surrounding electronics (display, USB connector, temperature sensor, ...) for a reasonable price.
Beware of "evaluation boards" that have loads of "goodies" on them.
Very often, these "goodies" can just get in the way of your own requirements.
And, these days, disabling the "goodies" is not just a question of fitting or removing jumpers - you have to fit or remove tiny, surface-mount zero-ohm resistors...
They can be great if you just want to "play" with what's there - but can be a real pain if you have an actual aapplication in mind...
This is general across the board - by no means specific to any kind of ARM.
Lots of goodies is nice, but should be completemented with lots of jumpers so that you can decide if they will consume processor pins or not. A board requiring (de)soldering to deactivate the goodies is lousy. It must be quick and easy to switch between the evaluation-board hardware and own hardware and then back again, in case the software (or the own hardware) doesn't work as expected.
But note that my recommendation to look for a evaluation board with lots of goodies was for someone interested in learning how to use a processor - not someone interested in designing their own products around an ARM chip. If the goal is to develop own products, then it is often better with a evaluation board with pin headers allowing the processor to be mated with prototype boards. A big prototyping area can be nice, but are best if you can afford to buy multiple evaluation boards.
I thoroughly agree.
It is, however, the trend these days.
:-(
And I do take your point about the distinction between learning/experimenting and actually trying to develop an application.