Benutzer:Rdiez/ArduinoDue

Aus /dev/tal
Wechseln zu: Navigation, Suche

Why the Arduino Due

This was my selection criteria:

  • Popular platform, well supported, reasonably priced.
  • Open-source hardware.
    Hopefully this will lead to lower prices and longer availability.
  • 32-bit CPU with good toolchain support.
  • High Speed (480 Mbps) USB tranfers (effective throughput up to 35 MB/s or 280 Mbit/s).
    This is about time, the USB 2.0 spec was released in April 2000 (!).
    Most ARM microcontrollers support only the 11 Mbit/s mode (as of 2013).

Other candidates:

  • The Beagle Bone was mostly sold out at the time.
  • The Raspeberry Pi is designed to act as an USB Host, and not as an USB Device.

Specs

The Arduino Due has an AT91SAM3X8E microcontroller with the following features:

  • ARM Cortex-M3 core:
    • Implements the ARMv7-M architecture, which is a 32-bit architecture.
    • Supports all of the base Thumb-2 instruction set, where instructions can be 16-bit or 32-bit long.
    • Supports only Thumb-2, does not support the original 32-bit ARM instruction set.
    • Hardware multiplication and division.
    • Memory Protection Unit with 8 regions.
    • Limited support for unaligned memory accesses.
    • Choice of several modes with different privilege levels (user, supervisor...).
    • Support for single-bit atomic operations with (bit-banding)
    • No floating point support.
  • 84 MHz clock frequency.
  • 2 x 256 KBytes Flash.
  • 64 + 32 KBytes RAM.
  • The "native" USB port and can do High Speed USB 2.0 (480 Mbit/s).
  • JTAG port

Inadequate as a learning and hacking platform

The Arduino Due is surprisingly inadequate as a learning and hacking platform:

  • It is relatively expensive compared to more powerful platforms like the Rasperry Pi, the Beagle Bone and many of the microcontroller evaluation boards.
    Due to the low availability 4 months after release date I ended up paying 59 € for it, and that hurts if you manage to fry it during your experiments.
  • The development environment has no integrated debugger (!).
  • Launching a program, however small, takes a few seconds.
    That is quite a long time for such a modern board, it goes on your nerves. Maybe it is due to the beta development environment version 1.5.2 I tested, but why is it still beta? The release date was 22nd October 2012, more than 4 months ago.
  • It can only interface at 3.3 V level.
    The Bus Pirate has a CD4066B analog switch that uses an external reference voltage.
    There are warnings all over the place that you can damage the board with a 5 V level, but why is there no protection circuitry? For hackers and learners such a safety feature would be a welcomed addition. How about some integrated 5 V capability too? With a small CPLD or FPGA you could probably choose your voltage level on a pin basis.
  • The board has a single user LED and no user buttons whatsoever, let alone any kind of display or sound ability.
    You need extra hardware for the most simple of tests.
  • Serious hackers will need a JTAG-based hardware debugger, which costs at least 50 €.
    There are some cheap USB-Blaster clones for 10 € in Ebay, but I haven't been able to make mine work properly yet.
    The Arduino designers added a separate 8-bit AVR CPU in order to update the main microcontroller firmware over the "programming" USB port. What a complete waste of time! They could have added some existing JTAG-over-USB chip, or they could have made one themselves by connecting that little AVR to the JTAG wires.
  • The JTAG header is smaller than usual, it has a 1.27 mm raster instead of the normal 2.54 mm.
    Most hackers will have to pay extra for an adapter.
  • You'll probably need buy extra USB cables too.
    The board has 2 USB ports, the "native" USB socket is of type Micro-A, and the "programming" one is of type Micro-B. It may be my bad luck, but all devices I use have the Mini-B connector (Bus Pirate, USB-Blaster, AVR JTAGICE3, Wind River probe...), so I didn't have the right cable at hand. Of course there isn't one in the Arduino Due box either. Wasn't USB supposed to be standard? Apparently, there is a type of USB cable that fits in both Micro-A and Micro-B connectors, but the documentation offers no advice about this either. I wonder why there are 2 types of Micro USB connectors then, it's just confusing. To top it all, both sockets have such a tight grip that I worry they will break or wear out soon if I need to plug and unplug USB cables often.
  • The supplied software library is of low quality and is poorly documented too.
  • Linux issues.
    • The Linux installation instructions are not together in a single page.
    • If the Arduino environment does not detect any suitable port, all ports options are greyed out with not further explanation.
      Also, after selecting the Arduino Due in the Tools/Board menu, it was not clear which option to select under Tools/Programmer.
    • It was not clear that the reason why your account may need "dialout" privileges is because /dev/ttyACM0 belongs to that group. One web page stated "No driver installation is necessary for Linux.", but fails to mention that you will probably need to configure things manually. I tried the suggested "sudo usermod", but it took me a while to realise that this change does not take place immediately. You probably don't have to restart the PC, but that is what I tried, and it did the trick.
    • There is no Ubuntu or Debian package that remembers where it came from and updates itself automatically, like Jitsi or VirtualBox do.

Connecting over JTAG

When connected to the Arduino Due, OpenOCD discovers a JTAG IDCODE of 0x4BA00477. The JTAG Instruction Register has a length of 4 bits.

The IDCODE breakdown, using my script to decode JTAG IDCODEs, is as follows:

 Decoding of JTAG IDCODE 0x4BA00477 (1268778103, 0b01001011101000000000010001110111):
 Version:      0b0100  (0x4, 4)
 Part number:  0b1011101000000000  (0xBA00, 47616)
 Manufacturer: 0b01000111011  (0x23B, 571)  # Name: ARM Ltd.
 Leading bit:  1  # Always set to 1 according to the IEEE standard 1149.1