Cortex M0+ variants - what is common ??

I have been trying to learn the ARM processors. As I understand when i say a particular MCU conforms to the ARM Cortex M0+ familiy what aspects are common between them ? Examples...

  1. For a start I can see that instruction set will be common.

  2. Programming hardware - if it says suitable for Cortex M0+ compatible then the brand whether its Atmel or NXP does not matter.

  3. Native ADC will be 12 bit.

.. and so on..

Beyond this what pins are broken out and what are not will of course depend on the application for which the particlaur MCU is intented.

To draw an analogy with the 8051 core, the basic architecture remains same ... the various registers / Timers / UART etc and there were variants which build on these. Of course those days ( before Arduino ) the programmer required to know the architecture and hence one was familiar. But now with the high level of abstraction that the Ardunio librarires provide, this architecture knoweldge is not mandatory, though preferred.

Is the ARM architecture also like above 8051 which retains a base set of architecture for every family ?

The Wikipedia page has a couple nice summary charts showing differences and standard features across the ARM Cortex M families:
https://en.wikipedia.org/wiki/ARM_Cortex-M

Mostly it is the instruction set and CPU architectural details that are common across M0+ devices. The peripheral sets (UART, SPI, GPIO, Timers) are typically different between manufacturers and sometimes even within a single manufacturer's offerings.

when i say a particular MCU conforms to the ARM Cortex M0+ familiy what aspects are common between them ?

  1. For a start I can see that instruction set will be common.

ARM specifies the CPU Core, so yes, the Instruction set should be the same for any CM0+

  1. Programming hardware - if it says suitable for Cortex M0+ compatible then the brand whether its Atmel or NXP does not matter.

AFAIK, all CM0+ chips will support the ARM Standard "SWD" "program and debug interface." However, the details of programming the flash memory can be different, so whether a particular pieces of programming hardware/software supports a particular chip is somewhat up-in-the-air.

There's a list of "options" for the ARM-defined part of a CM0. Atmel has a nice list of which options they use in the datasheet; other vendors ought to have something similar...
11.1.1 Cortex M0+ Configuration
Table 11-1. Cortex M0+ Configuration
SAM D21 Family Processor And Architecture

Features Configurable option Device configuration
Interrupts External interrupts 0-32 28
Data endianness Little-endian or big-endian Little-endian
SysTick timer Present or absent Present
Number of watchpoint comparators 0, 1, 2 2
Number of breakpoint comparators 0, 1, 2, 3, 4 4
Halting debug support Present or absent Present
Multiplier Fast or small Fast (single cycle)
Single-cycle I/O port Present or absent Present
Wake-up interrupt controller Supported or not supported Not supported
Vector Table Offset Register Present or absent Present
Unprivileged/Privileged support Present or absent Absent(1)
Memory Protection Unit Not present or 8-region Not present
Reset all registers Present or absent Absent
Instruction fetch width 16-bit only or mostly 32-bit 32-bit

Once you're beyond the CPU core, though, "standardization" ends. It's unlikely that an Atmel UART looks the same as a ST or NXP UART... Even from the same vendor, in the "nominally same" product line, there can be obnoxious differences. (The SAMD11 RTC can be clocked from a "Generic clock", say 1MHz, giving you a convenient microsecond counter. The SAMD21 RTC can only be clocked by by the 32kHz clock(s.))

  1. Native ADC will be 12 bit.

That's one you can't count on. A quick look at Digikey's stock of CM0+ stock shows ADC from 10bit up to 24bit... The Due (SAM3X) and Zero (SAMD21) ADCs are different in ways well beyond the the core CPU.

@MrMark
@westfw

Thanks for your clarifications. Ok so its kind off as i guessed ... ARM just lays down the basic foundation and whether you build a mansion or an aprtment on top if it is left to you. The picture is kind of clear now.

One of the reasons I asked this was to know if there is any simple programmer to program the Cortex M0+ chips like the USBasp exists for the AVR chips . My requirement is to elimnate the bootloader on a SAMD21 so that my code executes without the 3 sec delay. And to buy a Atmel ICE for that seems to be a overkill. And assuming i buy it it should be brand independent programmer - looks it will be not.

Well, the SWD protocol is standard, and there's a USB-level protocols that's standard (CMSIS/DAP), and a supposedly flexible OSSW program for doing stuff (OPENOCD), so in theory there are a bunch of devices (EDBG, mEDBG, nEDBGm ST-LINK, Segger, LPCXpresso, TI Launchpad, and so on and on) that do approximately the same thing, and ought to be able to program chips from multiple vendors.

In reality, each chip has it's own flash programming algorithm, and with <$100 solutions from each vendor that work "seamlessly" with their chips, there's not a lot of motivation for writing those algorithms at the openocde level and making things "generic" (the "NVM Controller", in charge of writing to flash - that's one of the vendor-specific peripherals.)

The closest thing to "generic" is probably the ST-Link/V2 Example Cheap Version
See for example Adalink for software to use it, and a framework for defining new CPUs.

westfw:
Well, the SWD protocol is standard, and there's a USB-level protocols that's standard (CMSIS/DAP), and a supposedly flexible OSSW program for doing stuff (OPENOCD), so in theory there are a bunch of devices (EDBG, mEDBG, nEDBGm ST-LINK, Segger, LPCXpresso, TI Launchpad, and so on and on) that do approximately the same thing, and ought to be able to program chips from multiple vendors.

In reality, each chip has it's own flash programming algorithm, and with <$100 solutions from each vendor that work "seamlessly" with their chips, there's not a lot of motivation for writing those algorithms at the openocde level and making things "generic" (the "NVM Controller", in charge of writing to flash - that's one of the vendor-specific peripherals.)

The closest thing to "generic" is probably the ST-Link/V2 Example Cheap Version
See for example Adalink for software to use it, and a framework for defining new CPUs.

Ok I will need some time to decipher all the jargon in the post !! Thanks for updating on this.

Looks like there is no free lunch. So I will buy an Atmel ICE Basic - I know it handles both AVR and ARM programming. For AVR program download I use the SPI interface plus one Reset pin. Like wise for the ARM program download what are the standard pins ... like for instance i have a Adafruit Feather M0 and it exposes only the SWDIO and SWCLK which i think is only for debug. Can I use the ICE and downlaod a program into this Feather ( Schenatic here : Downloads | Adafruit Feather M0 Bluefruit LE | Adafruit Learning System)

There’s a new microchip MPLAB Snap programmer. Cheap, highspeed version of the chipkit4.
Future of Atmel Studio support a bit uncertain, but MPLAB is adding other chips ata furious rate.
https://www.microchipdirect.com/product/search/all/PG164100