
ARMing a Breadboard – Everyone Should Program an ARM - ck2
http://hackaday.com/2015/10/09/arming-a-breadboard-everyone-should-program-an-arm/
======
0xcde4c3db
If you're interested in low-level code (assembly, JITs, Forth, etc.), note
that official documentation for the ARM ISA has considerable encumbrance. It's
not like most architectures where you just go to the manufacturer's website
and download a PDF of the programming manual; ARM makes you register an
account and agree to a rather restrictive clickwrap license (something to the
effect of "you're only allowed to use this manual to support our products, not
to compete with us").

This seems to not be common knowledge. Maybe the atmosphere of typical ARM
applications is already so buried under NDAs that nobody cares, or maybe
people just punch "ARM Architecture Reference Manual" into Google and grab one
of the many slightly-outdated copies that are floating around on .edu servers.
But I found it pretty surprising after seeing how widespread ARM is in "open"
hardware.

~~~
pcwalton
The situation still isn't great, but this has gotten better over time with the
documentation on infocenter.arm.com, which Google usually pulls up as a top
result when you search for various ARM instructions.

For example, Googling for "arm tbl" brings up this:
[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc....](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802a/TBL_advsimd_vector.html)

which contains links to the rest of the AArch64 instruction set. The
documentation has scary "Superseded" notices, but it's all basically accurate
and it's enough to do low-level programming.

~~~
mikechml
It's only got the "Superseded" notices because it's an old version, if you
browse to the latest one in the menu on the left they're not there.

[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc....](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802a/TBL_advsimd_vector.html)

------
ChuckMcM
I too am often surprised at how often people reach for an Atmel 8 bit AVR chip
rather than an ARM. It is a testament to the momentum that Atmel built, the
avr-freaks community and the amazing cost effectiveness of it all.

But now we're seeing ARM chips with built in clocks, and fewer base components
required and I think the end of that AVR dominance is on the horizon. And that
is why Dialog is buying Atmel[1].

Getting started with ARM is easy with one of ST's Nucleo boards (which are
kinda Arduino Shield compatible, the biggest issue I have hit is that i2c at
3.3v is an issue on some boards). Their Discovery boards are even more capable
but can be a bit more work to breadboard with.

Once ARM put out a supported GCC on launchpad.net it really made it easy to
get a development environment up (no more crosstool or other package for
building a cross compiler).

[1] [http://fortune.com/2015/09/21/dialog-buying-
atmel/](http://fortune.com/2015/09/21/dialog-buying-atmel/)

~~~
klagermkii
Most hobby electronics projects aren't really CPU limited though, so using ARM
doesn't really bring relevant advantages. Having a standard platform,
including the peripherals like PWM/ADC/timer etc which are going to vary
wildly between ARM implementations, is far more important for people starting
out and are trying to solve their problems via Google.

The 5V chips are also better at taking punches from miswired projects.

~~~
ChuckMcM
My experience is that most hobby projects _are_ RAM limited when people are
using the AVR chips. Whether its trying to hold a copy of an LCD view, or any
sort of moderate data structure. The ATMega328 is 8K of RAM. The M0+ chips
seems to all come with 64K of RAM, and given that folks are writing in C/C++
rather than Assembler that is quite helpful.

I agree with you on the general tolerances to abuse though. I've filled out a
couple of surveys sent to me by semiconductor folks (I often get one after
attending a free training session) and I've mentioned several times that a
short/overvoltage hardened chip would be a useful thing for me. You can do
that with off chip parts but since manufacturers are wondering what to do with
an abundance of silicon surface area to distinguish their products, I continue
to suggest that would be one way.

~~~
aexaey
> The ATMega328 is 8K of RAM

No, just 2K. [0]

> The M0+ chips seems to all come with 64K of RAM

That would be 8K. [1]

[0]
[http://www.atmel.com/devices/atmega328.aspx](http://www.atmel.com/devices/atmega328.aspx)

[1]
[http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1817?sc=...](http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1817?sc=stm32l0)

~~~
ChuckMcM
Thanks, I was talking to the Atmel Tech On Tour folks today and the part I'm
really interested in of late is the R21 which has both radio parts and the M0+
in a tiny package.

It has up to 32K of RAM and 256K of flash [2], the larger Cortex chips have
the big RAM numbers as you note.

[1] [http://design.avnet.com/axiom/atmel-sam-r21-atmel-
cortex-m0-...](http://design.avnet.com/axiom/atmel-sam-r21-atmel-
cortex-m0-embedded-flash-mcus/)

[2]
[http://www.atmel.com/Images/Atmel-42223-SAM-R21_Datasheet.pd...](http://www.atmel.com/Images/Atmel-42223-SAM-R21_Datasheet.pdf)

------
ju-st
You can buy Arduinos on Aliexpress for USD1.80[1] and there are no comparable
offers for ARM boards.

[1] aliexpress.com/item/Free-Shipping-Nano-3-0-Controller-Board-Compatible-
with-Arduino-Nano-CH340-USB-Driver/2021663360.html

~~~
kefka
That's not true. They are just hidden.

Stm8, $1.28
[http://m.aliexpress.com/item/32351992629.html](http://m.aliexpress.com/item/32351992629.html)

Stm32, $3.06
[http://m.aliexpress.com/item/1568685935.html](http://m.aliexpress.com/item/1568685935.html)

Edit: my phone did a stupid.

~~~
ju-st
Nice! So there is basically no reason to buy Atmega anymore (for me, at
least).

~~~
kefka
The only reason is network effect.

Most "shields" and devices are tested and libraries made easily available for
Arduino/Atmel 324P. Going to ARM means having to rebuild some of your toolkit,
or finding it.

But again, it's ARM. And the "more expensive one" is 32bit.

------
analog31
_But perhaps the largest hurdle is that most of the chips are surface mount
devices._

This used to be a deterrent for me, but these days I just whip out my
ExpressPCB and make a breakout board for the part that I'm interested in
playing with. The price is really manageable. Typically my breakout board
includes a few basic goodies such as decoupling caps, and a 3.3 V regulator.

But I appreciate the simplicity of being able to just breadboard something.

 _One reason that this works so well is the chip has a built-in serial
bootloader._

That's a nice touch.

------
d9fb698e010974b
This is really cool. One cautionary thing though. I think that because of
breadboard capacitance if you try any sort of high frequency stuff on the
breadboard (like >= 10MHz) you'll get all sorts of weird effects. (This is
just a breadboard problem that occurs at high frequencies, not an ARM
problem).

I'm just an amateur in this area, so if someone who is more knowledgeable
could confirm or deny with I wrote above that would be great.

~~~
NonEUCitizen
1\. Others estimate higher max frequency. This one's on the high side of
estimates:

[http://dangerousprototypes.com/2011/12/05/breadboard-
limitat...](http://dangerousprototypes.com/2011/12/05/breadboard-limitations/)
[might have to ask EE friends about transmission line termination at those
frequencies]

2\. See also this video (and comments on video) where they measure:

[https://www.youtube.com/watch?v=6GIscUsnlM0](https://www.youtube.com/watch?v=6GIscUsnlM0)

------
deutronium
Alternatively the STM32F4 Discovery Board and STM32F29 Discovery Boards, are
both really good too.

I think the STM32F4 board is around £12 if I recall correctly.

------
fit2rule
This thread, which includes contributions from some very skilled ARM hackers,
has been a true delight to keep up with lately:

[https://boards.openpandora.org/topic/5600089-jumping-into-
ar...](https://boards.openpandora.org/topic/5600089-jumping-into-arm-
assembly/?page=1)

Jumping into ARM assembly .. with notaz' help!

------
ck2
_So if you have a breadboard and a USB to serial adapter, you could build the
bare bones version of this for about $6 and maybe break the bank at $15 if you
had to buy everything._

I've got a usb to serial adapter just sitting here, definitely trying this
project for just $6

Wish it only needed 5V supply, I have endless phone chargers laying around
from 500ma to 2a

~~~
snarfy
If you don't have the cable, an arduino uno also works as a usb to serial
adapter.

[https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard](https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard)

To make 3.3V out of 5V you can use a voltage regulator.

~~~
ajross
If you want to do anything even semi-reliable with this thing you'll want a
regulator on the board anyway. Wall warts are notoriously noisy.

~~~
togusa
This. New switch mode ones are crappy, really crappy!

I have a stash of old linear ones that aren't fortunately. Worth their weight
in gold.

------
nascentmind
There are very good TI Cortex M3 and M4 Tiva Launchpad boards (for $12.99) and
for the ultra low power applications the MSP432 cortex M4 launchpad boards
(for $12.99) with very good documentation and support.

------
Animats
That's a nice little part, but it has _very_ limited memory: 32 kB on-chip
flash, 4 kB RAM. That's less than some Atmel ATMega-based Arduinos. The
Arduino Due (an ARM CPU) has 512 KB flash, 96KB RAM.

To get more memory, though, you have to go surface-mount.

~~~
vardump
4 kB RAM + 32 kB flash is plenty for a lot of projects, assuming it's possible
to execute directly from flash. Just attach SPI flash for extra data storage.

------
MissingGear
An an electronics hobbyist wannabe, may I please have the links for parts /
assembling the 5v to 3.3v circuit needed to power this thing ?

~~~
d9fb698e010974b
Others are suggesting power supplies, but I think you can just use a voltage
divider from a 5V supply. Like maybe a 2.7K resistor followed by a 5.6K to
ground?

~~~
analog31
It needs to be regulated, because the microcontroller draws varying amounts of
current. But a simple regulator is just a three-legged IC and a capacitor.

~~~
d9fb698e010974b
Ah okay, I didn't realize that.

~~~
togusa
Just some technical info in this if anyone trips over this thread, consider
the following diagram of a voltage divider:

[http://pcbheaven.com/wikipages/images/voltagedivider_1235725...](http://pcbheaven.com/wikipages/images/voltagedivider_1235725460.jpg)

The Rload and R2 are parallel resistors really so if Rload is really low which
it is generally if it's doing anything then it will effectively shrink the R2
resistance (Rload || R2) and therefore voltage. Then whatever is connected as
Rload won't get enough volts + current.

You can fix this to some degree by using very low values of R1 and R2 but then
they start to sink lots of current as they are in series across the power
supply and get hot so this becomes an efficiency problem. If you're really
unlucky the magic smoke comes out or you touch one and burn your fingers
emitting a nice bacon smell.

You can fix all of this with a single NPN transistor and a zener diode pretty
easily but you might as well use a regulator IC then.

Analogue electronics is fun even if it does burn and explode in your face
occasionally! My shit blows up all the time:
[http://i.imgur.com/GZBKblt.jpg](http://i.imgur.com/GZBKblt.jpg)

------
foldr
The STM32 dev boards already make this pretty easy. (Although setting up a
free toolchain is a bit of a pain.)

~~~
deutronium
Really?, it's pretty easy in my opinion on Debian/Ubuntu at least.

I just installed gcc and use openocd to program.

I'm fairly sure I just did "sudo apt-get install gcc-arm-none-eabi" for the
compiler.

[http://libopencm3.org/wiki/Main_Page](http://libopencm3.org/wiki/Main_Page)
is worth looking at too, in case you haven't seen it.

~~~
foldr
>I just installed gcc and use openocd to program.

Come on, there's a lot of 'just' there. It's not _too_ bad if you just want to
play with the discovery board, but there's very little documentation on how to
use the discovery board as a programmer. The official docs for the discovery
board don't give you crucial information about jumper settings, and I ended up
having to download some bloated Windows tool from STM just to output a
suitable .ld script for the STM32F030K6. I'm sure it's not as difficult as it
used to be, but it's vastly less straightforward than setting up an AVR
toolchain.

To be honest, the page you linked to contains no useful information. I can see
that it's some kind of peripheral library. It doesn't look like it does
anything in particular that StdPeriph doesn't already do (and 90% of example
code uses StdPeripg). Plus the github page warns that the API is unstable.
Again, compare to AVR. The arm tools are much better of course, but it's so
much harder for a beginner to find answers to simple questions. E.g., can I
reset an STM32F0K6 with only two pins using OpenOCD and the STLink programmer
on the discovery board? (The answer appears to be yes, but it's not readily
googleable.)

------
teh_klev
blue raincoat

