|
|
(17 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
− | = Why the Arduino Due =
| + | #REDIRECT [[Benutzer:Rdiez/PageRemoved]] |
− | | + | |
− | This was my selection criteria:
| + | |
− | | + | |
− | * Popular platform, well supported, reasonably priced.
| + | |
− | * Open-source hardware. <br/> 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). <br/> This is about time, the USB 2.0 spec was released in April 2000 (!). <br/> 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. <br/> 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. <br/> 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. <br/> The Bus Pirate has a CD4066B analog switch that uses an external reference voltage. <br/> 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 [http://en.wikipedia.org/wiki/Complex_programmable_logic_device CPLD] or [http://en.wikipedia.org/wiki/Field-programmable_gate_array 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. <br/> You need extra hardware for the most simple of tests.
| + | |
− | * Serious hackers will need a [http://en.wikipedia.org/wiki/In-circuit_emulator JTAG-based hardware debugger], which costs at least 50 €. <br/> There are some cheap USB-Blaster clones for 10 € in Ebay, but I haven't been able to make mine work properly yet. <br/> 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. <br/> Most hackers will have to pay extra for an adapter.
| + | |
− | * You'll probably need buy extra USB cables too. <br/> 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.
| + | |
− | * 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. <br/> 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.
| + | |
− | | + | |
− | = Connecting over JTAG =
| + | |
− | | + | |
− | When connected to the Arduino Due, [http://openocd.sourceforge.net OpenOCD] discovers a [http://en.wikipedia.org/wiki/Joint_Test_Action_Group JTAG] IDCODE of 0x4BA00477. The JTAG Instruction Register has a length of 4 bits.
| + | |
− | | + | |
− | The IDCODE breakdown, using [https://sourceforge.net/apps/mediawiki/filereadtest/index.php?title=DecodeJtagIdcode 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
| + | |