SainSmart Due Atmel SAM3X8E ARM Cortex-M3 boardbrand: SainSmart SKU: 101-50-140
The SainSmart Due is a microcontroller board based on the Atmel SAM3X8E ARM Cortex-M3 CPU (datasheet). It is the first SainSmart board based on a 32-bit ARM core microcontroller. It has 54 digital input/output pins (of which 12 can be used as PWM outputs), 12 analog inputs, 4 UARTs (hardware serial ports), a 84 MHz clock, an USB OTG capable connection, 2 DAC (digital to analog), 2 TWI, a power jack, an SPI header, a JTAG header, a reset button and an erase button.
Unlike other SainSmart boards, the SainSmart Due board runs at 3.3V. The maximum voltage that the I/O pins can tolerate is 3.3V. Providing higher voltages, like 5V to an I/O pin could damage the board.
The board contains everything needed to support the microcontroller; simply connect it to a computer with a micro-USB cable or power it with a AC-to-DC adapter or battery to get started. The Due is compatible with all SainSmart shields that work at 3.3V and are compliant with the 1.0 Arduino pinout.
The Due follows the 1.0 pinout:
- TWI: SDA and SCL pins that are near to the AREF pin.
- The IOREF pin which allows an attached shield with the proper configuration to adapt to the voltage provided by the board. This enables shield compatibility with a 3.3V board like the Due and AVR-based boards which operate at 5V.
- An unconnected pin, reserved for future use.
|Input Voltage (recommended)||7-12V|
|Input Voltage (limits)||6-20V|
|Digital I/O Pins||54 (of which 12 provide PWM output)|
|Analog Input Pins||12|
|Analog Outputs Pins||2 (DAC)|
|Total DC Output Current on all I/O lines||130 mA|
|DC Current for 3.3V Pin||800 mA|
|DC Current for 5V Pin||800 mA|
|Flash Memory||512 KB all available for the user applications|
|SRAM||96 KB (two banks: 64KB and 32KB)|
|Clock Speed||84 MHz|
ARM Core benefits
The Due has a 32-bit ARM core that can outperform typical 8-bit microcontroller boards. The most significant differences are:
- A 32-bit core, that allows operations on 4 bytes wide data within a single CPU clock. (for more information look int type page).
- CPU Clock at 84Mhz.
- 96 KBytes of SRAM.
- 512 KBytes of Flash memory for code.
- a DMA controller, that can relieve the CPU from doing memory intensive tasks.
Either of the USB ports can be used for programming the board, though it is recommended to use the Programming port due to the way the erasing of the chip is handled :
- Programming port: To use this port, select "Arduino Due (Programming Port)" as your board in the Arduino IDE. Connect the Due's programming port (the one closest to the DC power jack) to your computer. The programming port uses the 16U2 as a USB-to-serial chip connected to the first UART of the SAM3X (RX0 and TX0). The 16U2 has two pins connected to the Reset and Erase pins of the SAM3X. Opening and closing the Programming port connected at 1200bps triggers a “hard eraseâ€?procedure of the SAM3X chip, activating the Erase and Reset pins on the SAM3X before communicating with the UART. This is the recommended port for programming the Due. It is more reliable than the "soft erase" that occurs on the Native port, and it should work even if the main MCU has crashed.
- Native port: To use this port, select "Arduino Due (Native USB Port)" as your board in the Arduino IDE. The Native USB port is connected directly to the SAM3X. Connect the Due's Native USB port (the one closest to the reset button) to your computer. Opening and closing the Native port at 1200bps triggers a 'soft erase' procedure: the flash memory is erased and the board is restarted with the bootloader. If the MCU crashed for some reason it is likely that the soft erase procedure won't work as this procedure happens entirely in software on the SAM3X. Opening and closing the native port at a different baudrate will not reset the SAM3X.
Unlike other Arduino boards which use avrdude for uploading, the Due relies on bossac.
The Arduino Blink program, as what all Arduino users know, is an official testing program, making sure sketches can be uploaded and can vary the blink rate of the LED at Pin 13, identified as L on the board. After using the Arduino Blink program, I loaded up my other sketches and immediately discovered most of my sketches will not compile. That's because my Arduino libraries were written before the Arduino Due, meaning it's exclusively Atmel AVR code; not for ARM. While many people would see this as a turn-off, I see it as an opportunity to write new code and create new libraries. That's why there's a dedicated forum! But if you go there for just answers, you won't learn anything! It is better to read how others got to the solution, instead of just doing a copy and paste. As a veteran C programmer, I found this course of action, refreshing. I spent at least six hours, pulling timing routines out of my head, since AVR libraries aren't available unless they're modified by me or other people.