3

I an new to using micro controllers .Recently, I have seen the ARM being talked about.

How different is ARM -Cortex development than normal Arduinos?

I have used a PSOC recently, which does use an ARM Cortex. But How can I start learning development of ARM based Mobile & small systems?

The options out there, are really big, and do not look like the ones to go inside mobiles/other appliances.

cheeky
  • 483
  • 1
  • 9
  • 16
  • ARM are a manufacturer, they make a range of stuff from tiny 8-bit micros to screaming multimedia system-on-chips etc. There is quite a difference in approach for this range, and quite a difference between developing low-level embedded code that goes into a mobile phone etc. versus the shiny app that runs within the OS running on that mobile phone. – John U Nov 22 '13 at 09:23
  • 4
    @John U: ARM is NOT a manufacturer, it is a company that sells IP (= processor designs). All their products are 32-bit processor designs. Lots of companies make ARM chips, including some 8-pin chips (LPC810). Apart from these corrections I agree that ARM/Cortex is much to broad to sweep in one bucket. Cheeky: first narrow your field of interest, then state what you want to achieve, then we might be able to give some suggestions. As it is now, your question is both to broad (ARM/Cortex without further narrowing) and asking for opinions instead of facts (do state what you want to achieve). – Wouter van Ooijen Nov 22 '13 at 09:47
  • Recent ARM releases (version 8) support 64-bit address spaces too, though the instruction set remains 32 bit. – Anindo Ghosh Nov 22 '13 at 10:13
  • @WoutervanOoijen - thanks for calling me on that, I shall go stab myself in the eye with a fork as punishment for such idiocy. – John U Nov 22 '13 at 10:52

1 Answers1

12

Let's break this up into parts...

How different is ARM Cortex development than Arduino?

Lots, or little, depending on your development platform of choice, and your goals. An explanation:

Arduino development is based upon the Wiring development framework, that essentially insulates the developer from the technical specifics (port setting bit patterns, calculating clock cycles for creating a delay, programming a timer peripheral's control registers and port settings for generating a PWM signal). Libraries are provided that simplify such tasks to a triviality, with the heavy lifting being done by the libraries under the hood.

ARM development, or for that matter typical microcontroller programming, is usually done in a lower level language with less under-the-hood magic, such as C, a microcontroller's native assembler, sometimes C++.

Thus moving from the Arduino to programming on ARM by traditional means, is an extremely painful process: Of the many highly skilled Arduino coders I know, almost none have been able to ever successfully transition to ARM or even AVR programming directly in C. The Wiring library hand-holding is a tough habit to break.

Now for the "little difference" edition:

Take a look at Energia, an "electronics prototyping platform ... with the goal to bring the Wiring and Arduino framework to the Texas Instruments MSP430 based LaunchPad." Recent releases of Energia support the Texas Instruments Tiva C (earlier known as Stellaris) platform, which is ARM Cortex M4.

Tiva on Energia (source)

With Energia (release 10 or later preferred) developing for the Texas Instruments ARM platform is similar to developing on the Arduino. The IDE is similar to Arduino's, many of the same libraries are provided, the underlying framework is the same Wiring, or a somewhat improved version thereof, and the underlying compiler compiler is GCC, also used by Arduino.

The Tiva C Launchpad from Texas Instruments is excellently engineered, getting you an ARM Cortex M4 development board with better specifications and more capabilities in most ways than the Arduino ARM (SAM4XE) equivalents, at a price of $12.99 including free international courier shipping if you order directly from TI. The Arduino ARM boards are not even in the vicinity of that price point, and I've not seen an official Arduino board with nearly the same manufacturing quality yet.

Tiva C Launchpad

(Yes, it has two ARM processors on one board, with the second one for hardware debugging and code stepping support)

Transitioning from these Launchpad development boards to a barebones Tiva C ARM controller is simple as well.

Yes, some of the Energia functionality doesn't match up with Arduino, or simply doesn't work as advertised: Just one example, pin change interrupts on Energia / Tiva C support rising and falling edge triggers, but not the CHANGE trigger that works on the Arduino.

In short, Energia helps people familiar with the Arduino to make a successful transition to ARM Cortex M4 programming, albeit only on the TI Tiva C ARM controllers.


How can I start learning development of ARM based Mobile & small systems?

By first leaving behind the crutches of the Arduino system, or for that matter any "child-friendly" development framework, and stepping out into the cold of bare-metal C programming.

It's not a simple transition, it is going to cause you stress, and after you have created your first half dozen actual stand-alone non-trivial ARM based solutions, you would just about be ready to look at the mobile phone ARM development space.

On the other hand, you could develop for a high-level mobile phone operating system such as Android or the iPhone, and ignore the processor-specific ARM side of things entirely. Languages used would be Java or other high level ones, and it doesn't really matter whether the phone's main processor is an ARM, and nVidia Tegra, or an Intel.


The options out there, are really big, and do not look like the ones to go inside mobiles

If this is about the size of an ARM controller's physical package, then some clarification on electronics packaging might be appropriate here:

NXP ARM processors
(Three different packages for NXP's ARM chips)

Most ARM licensees who manufacture ARM-based microcontrollers (actually any microcontroller, and most other digital electronics parts) will release a given device in several different packages, from the large, old-school DIP package that is rapidly dying out, to tiny 5 x 5 mm or similar, square QFN packages with no pins sticking out, to leadless Ball Grid Array (BGA) packages where the contacts are little beads of metal on the underside of the package, and down to tiny 1 x 1 mm or smaller "wafer scale" or "chip scale" packages that are essentially the actual silicon inside the "big" microcontroller you see, with the board designer needing to take care of connecting bond wires from the PCB to the bond pads on the silicon wafer "chip". Some options require even the cutting of the silicon die into individual chips to be done at the device manufacturer end.

See this excellent answer to a prior ARM question on this site, for the various package sizes out there.

Hobbyists will prototype using the DIP version if it exists, or the smaller SOIC or similar packages, more proficient individuals and businesses will prototype using the QFN or similar packages, and finally when a device does for final prototyping or mass manufacture, the BGA or more likely the chip-scale version of the microcontroller will be used in the extremely compact mobile phone boards you see today.

In short, while physical sizes and designs of the packages differ, the actual business end of the ARM or other controller stays the same.

Anindo Ghosh
  • 50,446
  • 8
  • 105
  • 201
  • Thanks for the post! This clears a lot up about ARM Microcontroller series. Also, How do embedded designers and engineers program the small sized chips used in systems? – cheeky Nov 22 '13 at 16:30
  • "Of the many highly skilled Arduino coders I know, almost none have been able to ever successfully transition to ARM or even AVR programming directly in C." - sorry but that makes me think you don't know any skilled Arduino programmers at all. Someone prepared to intelligently face the inevitable problems on one system will have no real trouble learning any other, if they make any real effort. – Chris Stratton Nov 22 '13 at 16:52
  • @ChrisStratton Evidently you know a different breed of "skilled Arduino coders" than I do - or you're just trying to make a point without any basis for it, just to make a point. – Anindo Ghosh Nov 22 '13 at 18:12
  • No. These people are either lacking any real skill as programmers, or more likely they have never made an honest effort at programming without benefit of that framework. One simply cannot be "good" at programming in any language/framework, without being able to handle quite minor new challenges - as any notable project will present that even if one does not change tools. However, one can choose not to even try to work with different tools. – Chris Stratton Nov 22 '13 at 18:22
  • 1
    Hmm... Sounds good in theory. Ever seen a Visual Basic "programmer" struggle to transition to C? Or a Java programmer entering the microcontroller assembler coding universe? I have seen both, and it isn't pretty. I'm speaking from experience, and I am not making any claims that those Arduino coders have any "real skill as programmers" by your measure. I am not going to debate this further on your hypothetical contentions, you are welcome to your views. :-) – Anindo Ghosh Nov 22 '13 at 18:34