2016-01-27 09:09:55 -08:00
|
|
|
.. _arduino_101:
|
|
|
|
|
2016-02-09 08:21:58 -05:00
|
|
|
Arduino 101
|
|
|
|
###########
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
Overview
|
|
|
|
********
|
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
The Arduino 101 board is an Arduino product with an Intel® Curie™
|
|
|
|
module. Zephyr can be flashed to an Arduino 101 for experimentation
|
2016-02-16 11:03:08 -08:00
|
|
|
and testing purposes; keep in mind this is configuration is unsupported
|
|
|
|
by Arduino.
|
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
The Intel Curie module contains both an ARC and an X86 core, so be sure to
|
|
|
|
flash an ARC and an X86 image if you wish to use both. Either
|
|
|
|
**arduino_101_factory** (for x86) or **arduino_101_sss_factory** (for ARC)
|
|
|
|
board configurations work to build a Zephyr Kernel that can be flashed to and
|
|
|
|
run on the Arduino 101 platform. The default configuration for Arduino 101
|
|
|
|
boards can be found in
|
|
|
|
:file:`boards/arduino_101/arduino_101_factory_defconfig` for the X86 and
|
|
|
|
:file:`boards/arduino_101_sss/arduino_101_sss_factory_defconfig` for the ARC.
|
|
|
|
|
|
|
|
This release removes the support for the alternate boot ROM. Thus, the original
|
|
|
|
boot ROM can be kept supporting the flashing of the board over DFU and flashing
|
|
|
|
the Bluetooth firmware.
|
|
|
|
|
|
|
|
See the documentation for releases up to v1.3.0 for details on how to use an
|
|
|
|
alternate boot ROM.
|
|
|
|
|
|
|
|
If you have previously installed a different boot ROM it is recommended to
|
|
|
|
restore the original boot ROM image as described in the
|
|
|
|
`Backup and Restore Factory Settings`_ section.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
Board Layout
|
|
|
|
************
|
|
|
|
|
|
|
|
General information for the board can be found at the `Arduino website`_,
|
2016-02-16 11:03:08 -08:00
|
|
|
which also includes `schematics`_ and BRD files.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
Supported Features
|
|
|
|
******************
|
|
|
|
|
|
|
|
The Zephyr kernel supports multiple hardware features on the Arduino 101
|
2016-02-16 11:03:08 -08:00
|
|
|
through the use of drivers. Some drivers are functional on the x86 side only,
|
|
|
|
some on the ARC side only, and a few are functional on both sides. The table
|
|
|
|
below shows which drivers and functionality can be found on which architectures:
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
+-----------+------------+-----+-----+-----------------------+
|
|
|
|
| Interface | Controller | ARC | x86 | Driver/Component |
|
|
|
|
+===========+============+=====+=====+=======================+
|
2016-02-13 11:12:56 -05:00
|
|
|
| APIC | on-chip | N | Y | interrupt_controller |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-----------+------------+-----+-----+-----------------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| UART | on-chip | N | Y | serial port-polling; |
|
2016-01-27 09:09:55 -08:00
|
|
|
| | | | | serial port-interrupt |
|
|
|
|
+-----------+------------+-----+-----+-----------------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| SPI | on-chip | Y | Y | spi |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-----------+------------+-----+-----+-----------------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| ADC | on-chip | Y | N | adc |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-----------+------------+-----+-----+-----------------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| I2C | on-chip | Y | Y | i2c |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-----------+------------+-----+-----+-----------------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| GPIO | on-chip | Y | Y | gpio |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-----------+------------+-----+-----+-----------------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| PWM | on-chip | Y | Y | pwm |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-----------+------------+-----+-----+-----------------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| mailbox | on-chip | Y | Y | ipm |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-----------+------------+-----+-----+-----------------------+
|
|
|
|
|
|
|
|
|
|
|
|
Required Hardware and Software
|
2016-05-13 08:01:28 -04:00
|
|
|
******************************
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
Before flashing the Zephyr kernel onto an Arduino 101, a few additional
|
|
|
|
pieces of hardware are required.
|
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
* The USB port for power will work; however, we recommend the 7V-12V barrel
|
|
|
|
connector be used when working with the JTAG connector.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
* :ref:`The Zephyr SDK <zephyr_sdk>`
|
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
* If you wish to grab any data off the serial port, you will need a TTY-to-USB
|
2016-05-13 08:01:28 -04:00
|
|
|
adaptor. The following adapters require male-to-male jumper cables in order
|
|
|
|
to connect to the Arduino 101 board.
|
2016-02-03 11:38:13 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. `USB to TTL Serial Cable`_
|
2016-02-03 11:38:13 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. FTDI USB to TTL Serial Part #TTL-232R-3V3
|
2016-02-03 11:38:13 -08:00
|
|
|
http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm
|
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
To flash using the JTAG the following hardware is needed:
|
|
|
|
|
|
|
|
* `FlySwatter2 JTAG debugger`_
|
|
|
|
|
|
|
|
* ARM Micro JTAG Connector, Model: `ARM-JTAG-20-10`_
|
|
|
|
|
|
|
|
|
|
|
|
Connecting Serial Output
|
|
|
|
************************
|
|
|
|
|
|
|
|
In the default configuration, Zephyr's Arduino 101 images support serial output
|
|
|
|
via the UART0 on the board. To read the output, you will need a USB to TTL
|
|
|
|
serial cable. To enable serial output:
|
|
|
|
|
|
|
|
* Connect the Serial Cable RX pin to the Arduino 101's TX->1 pin.
|
|
|
|
|
|
|
|
.. figure:: figures/arduino_101_03.png
|
|
|
|
:scale: 50 %
|
|
|
|
:alt: Image for pin positions and serial output
|
|
|
|
|
|
|
|
* Connect the Serial Cable TX pin to the Arduino 101's RX<-0 pin.
|
|
|
|
|
|
|
|
.. figure:: figures/arduino_101_04.png
|
|
|
|
:scale: 50 %
|
|
|
|
:alt: Image for pin positions and serial output
|
|
|
|
|
|
|
|
* Connect the Serial Cable GND pin to the Arduino 101's GND pin.
|
|
|
|
|
|
|
|
.. figure:: figures/arduino_101_05.png
|
|
|
|
:scale: 50 %
|
|
|
|
:alt: Image for pin positions and serial output
|
|
|
|
|
|
|
|
Once connected, on your development environment, you will need to:
|
|
|
|
|
|
|
|
* Open a serial port emulator (i.e. on Linux minicom, screen, etc)
|
|
|
|
|
|
|
|
* Attach to the USB to TTL Serial cable, for example, on Linux this may be
|
|
|
|
:file:`/dev/ttyUSB0`
|
|
|
|
|
|
|
|
* Set the communication details to:
|
2016-05-20 08:47:36 -07:00
|
|
|
|
|
|
|
* Speed: 115200
|
|
|
|
* Data: 8 bits
|
|
|
|
* Parity: None
|
|
|
|
* Stopbits: 1
|
2016-05-13 08:01:28 -04:00
|
|
|
|
|
|
|
|
|
|
|
Building an Application
|
|
|
|
***********************
|
|
|
|
|
|
|
|
The Arduino 101 is powered by a Quark CPU and a sensor sub-system powered by an
|
|
|
|
ARC processor. When building applications, depending on the usage, two Zephyr
|
|
|
|
image need to be built and flashed.
|
|
|
|
|
|
|
|
The Arduino 101 has a bootloader that supports flashing over USB using
|
|
|
|
the DFU protocol. Flashing over USB keeps the original bootloader intact and
|
|
|
|
does not require a JTAG adapter. Additionally, the factory installed bootloader
|
|
|
|
supports flashing of the firmware for the Bluetooth device of the Curie
|
|
|
|
module.
|
|
|
|
|
|
|
|
Use the ``arduino_101_factory`` board definition to build a kernel for the Quark
|
|
|
|
core. Use the ``arduino_101_sss_facotry`` board definition when targeting the
|
|
|
|
sensor sub-system.
|
|
|
|
|
|
|
|
To use an alternate boot ROM different board definitions are needed for both the
|
|
|
|
Quark and the sensor sub-system cores: For the Quark, use ``arduino_101``
|
|
|
|
and for the sensor-subsystem, use ``arduino_101_sss``.
|
|
|
|
|
|
|
|
When your application is targeting the Quark processor only, it is important to
|
|
|
|
disable the sensor sub-system processor. otherwise the board will appear to hang
|
|
|
|
waiting for the sensor sub-system processor to boot.
|
|
|
|
|
|
|
|
See the `Debugging on Arduino 101`_ section for details on how to disable the
|
|
|
|
sensor sub-system.
|
|
|
|
|
|
|
|
Flashing using USB DFU
|
|
|
|
**********************
|
|
|
|
|
|
|
|
|
|
|
|
Flashing the Sensor Subsystem Core
|
|
|
|
==================================
|
|
|
|
|
|
|
|
#. Make sure the binary image has been built. Change directories to your local
|
|
|
|
checkout copy of Zephyr, and run:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ source ./zephyr-env.sh
|
|
|
|
$ cd $ZEPHYR_BASE/samples/hello_world/nanokernel
|
|
|
|
$ make pristine && make BOARD=arduino_101_sss_factory
|
|
|
|
|
|
|
|
#. Verify the Arduino 101 has power.
|
|
|
|
|
|
|
|
#. Once the image has been built, flash it with:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ dfu-util -a sensor_core -D outdir/zephyr.bin
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
When building for the ARC processor, the board type is listed as
|
|
|
|
arduino_101_sss_factory.
|
|
|
|
|
|
|
|
|
|
|
|
Congratulations, you have now flashed the hello_world image to the ARC
|
|
|
|
processor.
|
|
|
|
|
|
|
|
Flashing the x86 Application Core
|
|
|
|
=================================
|
|
|
|
|
|
|
|
#. Make sure the binary image has been built. Change directories to your local
|
|
|
|
checkout copy of Zephyr, and run:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ source ./zephyr-env.sh
|
|
|
|
$ cd $ZEPHYR_BASE/samples/hello_world/nanokernel
|
|
|
|
$ make pristine
|
|
|
|
$ make BOARD=arduino_101_factory
|
|
|
|
|
|
|
|
#. Verify the Arduino 101 has power.
|
|
|
|
|
|
|
|
#. Once the image has been built, flash it with:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ dfu-util -a x86_app -D outdir/zephyr.bin
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
When building for the x86 processor, the board type is listed as
|
|
|
|
arduino_101_factory.
|
|
|
|
|
|
|
|
Congratulations you have now flashed the hello_world image to the x86
|
|
|
|
processor.
|
|
|
|
|
2016-05-17 14:58:37 +03:00
|
|
|
Flashing the Bluetooth Core
|
|
|
|
===========================
|
|
|
|
|
|
|
|
To be interoperable with the Zephyr Bluetooth stack the Bluetooth
|
|
|
|
controller of the Arduino 101 (Nordic Semiconductor nRF51) needs to be
|
|
|
|
flashed with a compatible firmware. The instructions for acquiring and
|
|
|
|
flashing the firmware are found :ref:`here <arduino_101_ble>`
|
2016-05-13 08:01:28 -04:00
|
|
|
|
|
|
|
Flashing using JTAG Adapter
|
|
|
|
***************************
|
|
|
|
|
|
|
|
Use this method only for advanced development and debugging.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
#. Connect the ARM Micro JTAG Connector to the FlySwatter2.
|
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. Locate the micro JTAG connector on the Arduino 101 board. It is
|
|
|
|
adjacent to the SCL and SDA pins in the Arduino headers, highlighted
|
2016-02-03 15:48:59 -08:00
|
|
|
as the red square in the figure below.
|
|
|
|
|
|
|
|
.. figure:: figures/arduino_101_01.png
|
|
|
|
:scale: 50 %
|
|
|
|
:alt: Highlight of the JTAG connector.
|
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. Beside the micro JTAG header is a small white dot indicating the
|
2016-02-17 11:15:43 -08:00
|
|
|
location of pin 1 on the header. The orange arrow on the figure points to
|
2016-02-03 15:48:59 -08:00
|
|
|
the dot.
|
|
|
|
|
|
|
|
.. figure:: figures/arduino_101_02.png
|
|
|
|
:scale: 50 %
|
2016-02-17 11:15:43 -08:00
|
|
|
:alt: Pointer to the pin 1 of the JTAG connector.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
#. Connect the FlySwatter2 to the Arduino 101 micro JTAG connector.
|
|
|
|
|
2016-02-17 11:15:43 -08:00
|
|
|
#. Ensure that both the cable and header pin 1 locations line up. The cable
|
2016-01-27 09:09:55 -08:00
|
|
|
from the ARM Micro JTAG connector uses a red wire on the cable to denote
|
2016-02-17 11:15:43 -08:00
|
|
|
which end on the cable has the pin 1.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-23 14:09:40 -08:00
|
|
|
#. For Linux environments, to control the FlySwatter your user needs to be
|
|
|
|
granted HAL layer interaction permissions. This is done through the group
|
|
|
|
'plugdev'. Verifying the group exists and adding your username can
|
|
|
|
be accomplished with the useradd function:
|
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
.. code-block:: console
|
2016-02-23 14:09:40 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
$ sudo useradd -G plugdev $USERNAME
|
2016-02-23 14:09:40 -08:00
|
|
|
|
|
|
|
#. For Linux environments, verify that udev has the proper rules for giving
|
|
|
|
your user control of the FlySwatter device. Adding the following rule
|
|
|
|
to udev will give members of the plugdev group control of the FlySwatter.
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ su -
|
|
|
|
# cat <<EOF > /etc/udev/rules.d/99-openocd.rules
|
|
|
|
# TinCanTools FlySwatter2
|
|
|
|
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE="664", GROUP="plugdev"
|
|
|
|
EOF
|
|
|
|
|
|
|
|
#. Once your udev rules are setup, you will need to reload the rules:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ sudo udevadm control --reload-rules
|
|
|
|
|
2016-01-27 09:09:55 -08:00
|
|
|
#. Plug the USB Type B cable into the FlySwatter2 and your computer. On
|
|
|
|
Linux, you should see something similar to the following in your dmesg:
|
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
.. code-block:: console
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
usb 1-2.1.1: new high-speed USB device number 13 using xhci_hcd
|
|
|
|
usb 1-2.1.1: New USB device found, idVendor=0403, idProduct=6010
|
|
|
|
usb 1-2.1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
|
|
|
|
usb 1-2.1.1: Product: Flyswatter2
|
|
|
|
usb 1-2.1.1: Manufacturer: TinCanTools
|
|
|
|
usb 1-2.1.1: SerialNumber: FS20000
|
|
|
|
ftdi_sio 1-2.1.1:1.0: FTDI USB Serial Device converter detected
|
|
|
|
usb 1-2.1.1: Detected FT2232H
|
|
|
|
usb 1-2.1.1: FTDI USB Serial Device converter now attached to ttyUSB0
|
|
|
|
ftdi_sio 1-2.1.1:1.1: FTDI USB Serial Device converter detected
|
|
|
|
usb 1-2.1.1: Detected FT2232H
|
|
|
|
usb 1-2.1.1: FTDI USB Serial Device converter now attached to ttyUSB1
|
|
|
|
|
2016-02-03 15:48:59 -08:00
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
Backup and Restore Factory Settings
|
|
|
|
===================================
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
Before continuing, consider creating a backup image of the ROM device as
|
|
|
|
it stands today. This would be necessary if you wanted to run Arduino sketches
|
|
|
|
on the hardware again, as the Arduino IDE requires updating via a USB flashing
|
|
|
|
method that is not currently supported by Zephyr.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
Typically Arduino hardware can re-program the Bootloader by connecting
|
2016-02-02 16:54:23 -08:00
|
|
|
the ICSP header and issuing the "Burn Bootloader" option from the Arduino
|
2016-05-13 08:01:28 -04:00
|
|
|
IDE. On the Arduino 101, this option is not provided.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. Confirm the Zephyr SDK has been installed on your platform.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. Open a terminal window.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 16:12:47 -08:00
|
|
|
#. Verify the JTAG debugger is properly attached to the Arduino 101 board and
|
|
|
|
to the host computer.
|
|
|
|
|
|
|
|
#. Connect the Arduino 101 to a power source.
|
|
|
|
|
|
|
|
#. Open a terminal window
|
|
|
|
|
2016-02-03 15:48:58 -08:00
|
|
|
#. Change directories to :file:`$ZEPHYR_BASE`.
|
2016-02-02 16:54:23 -08:00
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
#. Source the :file:`zephyr-env.sh` file.
|
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. In the terminal window, enter:
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
.. code-block:: console
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
$ ./boards/arduino_101/support/arduino_101_backup.sh
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
.. note::
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
This command tells the JTAG to dump two files in your :file:`$ZEPHYR_BASE`:
|
|
|
|
directory: :file:`A101_BOOT.bin` and :file:`A101_OS.bin`. These contain
|
|
|
|
copies of the original flash, which can be used to restore the state of the
|
|
|
|
board to factory conditions.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
Done! You have finished creating a backup for the Arduino 101.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
To restore the factory settings of the Arduino 101 device, use the provided script.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. In the terminal window, enter:
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
.. code-block:: console
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
$ ./boards/arduino_101/support/arduino_101_load.sh
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
.. note::
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
This script expects two files in your :file:`$ZEPHYR_BASE` directory
|
|
|
|
named :file:`A101_OS.bin` and :file:`A101_BOOT.bin`.
|
2016-02-02 16:54:23 -08:00
|
|
|
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
Flashing the Sensor Subsystem Core
|
|
|
|
==================================
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. Make sure the binary image has been built. Change directories to your local
|
2016-02-13 11:12:56 -05:00
|
|
|
checkout copy of Zephyr, and run:
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
2016-02-13 11:12:56 -05:00
|
|
|
$ source ./zephyr-env.sh
|
|
|
|
$ cd $ZEPHYR_BASE/samples/hello_world/nanokernel
|
2016-05-13 08:01:28 -04:00
|
|
|
$ make pristine
|
|
|
|
$ make BOARD=arduino_101_sss_factory
|
|
|
|
|
2016-02-12 16:54:07 -08:00
|
|
|
|
2016-02-16 16:12:47 -08:00
|
|
|
#. Verify the JTAG debugger is properly attached to the Arduino 101 board.
|
|
|
|
|
|
|
|
#. Verify the Arduino 101 has power.
|
|
|
|
|
2016-02-13 11:12:56 -05:00
|
|
|
#. Once the image has been built, flash it with:
|
2016-02-12 16:54:07 -08:00
|
|
|
|
2016-02-13 11:12:56 -05:00
|
|
|
.. code-block:: console
|
2016-02-12 16:54:07 -08:00
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
$ make BOARD=arduino_101_sss_factory flash
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
When building for the ARC processor, the board type is listed as
|
2016-05-13 08:01:28 -04:00
|
|
|
arduino_101_sss.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
Congratulations, you have now flashed the hello_world image to the ARC
|
2016-01-27 09:09:55 -08:00
|
|
|
processor.
|
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
Flashing the x86 Application Core
|
|
|
|
=================================
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. Make sure the binary image has been built. Change directories to your local
|
2016-02-13 11:12:56 -05:00
|
|
|
checkout copy of Zephyr, and run:
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
2016-02-02 16:54:23 -08:00
|
|
|
$ source ./zephyr-env.sh
|
2016-02-09 19:47:18 -05:00
|
|
|
$ cd $ZEPHYR_BASE/samples/hello_world/nanokernel
|
2016-05-13 08:01:28 -04:00
|
|
|
$ make pristine
|
|
|
|
$ make BOARD=arduino_101_factory
|
2016-02-12 16:54:07 -08:00
|
|
|
|
2016-02-16 16:12:47 -08:00
|
|
|
#. Verify the JTAG debugger is properly attached to the Arduino 101 board.
|
|
|
|
|
|
|
|
#. Verify the Arduino 101 has power.
|
|
|
|
|
2016-02-13 11:12:56 -05:00
|
|
|
#. Once the image has been built, flash it with:
|
2016-02-12 16:54:07 -08:00
|
|
|
|
2016-02-13 11:12:56 -05:00
|
|
|
.. code-block:: console
|
2016-02-12 16:54:07 -08:00
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
$ make BOARD=arduino_101_factory flash
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
2016-02-02 16:54:23 -08:00
|
|
|
When building for the x86 processor, the board type is listed as
|
2016-05-13 08:01:28 -04:00
|
|
|
arduino_101_factory.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
Congratulations you have now flashed the hello_world image to the x86
|
|
|
|
processor.
|
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
|
|
|
|
|
2016-01-27 09:09:55 -08:00
|
|
|
Debugging on Arduino 101
|
2016-05-13 08:01:28 -04:00
|
|
|
************************
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
The image file used for debugging must be built to the corresponding
|
2016-05-13 08:01:28 -04:00
|
|
|
core that you wish to debug. For example, the binary must be built
|
|
|
|
for BOARD=arduino_101_factory if you wish to debug on the quark core.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. Build the binary for your application on the architecture you wish to
|
|
|
|
debug. Alternatively, use the instructions above as template for testing.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
When debugging on ARC, you will need to enable the
|
|
|
|
:option:`CONFIG_ARC_GDB_ENABLE` configuration option in your local kernel
|
|
|
|
configuration file. Details of this flag can be found in
|
|
|
|
:file:`arch/x86/soc/quark_se/Kconfig`. Setting this variable will force the
|
|
|
|
ARC processor to halt on bootstrap, giving the debugger a chance at
|
|
|
|
connecting and controlling the hardware.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-13 11:12:56 -05:00
|
|
|
This can be done by editing the file
|
|
|
|
:file:`samples/hello_world/nanokernel/prj.conf` to include:
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
CONFIG_ARC_INIT=y
|
2016-05-12 07:00:39 -04:00
|
|
|
CONFIG_ARC_GDB_ENABLE=y
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-02 16:54:23 -08:00
|
|
|
.. note::
|
|
|
|
|
2016-05-13 08:01:28 -04:00
|
|
|
By enabling :option:`CONFIG_ARC_INIT`, you *MUST* flash both an ARC and
|
|
|
|
an X86 image to the hardware. If you do not, the X86 image will appear to
|
|
|
|
hang at boot while it is waiting for the ARC to finish initialization.
|
2016-02-02 16:54:23 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. Open two terminal windows.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. In terminal window 1, type:
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-13 11:12:56 -05:00
|
|
|
.. code-block:: console
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-13 11:12:56 -05:00
|
|
|
$ cd $ZEPHYR_BASE/samples/hello_world/nanokernel
|
2016-06-03 14:15:13 -07:00
|
|
|
$ make BOARD=arduino_101 debugserver
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
These commands will start an ``openocd`` session with a local telnet
|
|
|
|
server (on port 4444 for direct openocd commands to be issued), and a
|
|
|
|
gdbserver (for gdb access). The command should not return to a command line
|
|
|
|
interface until you are done debugging, at which point you can press :kbd:`Ctrl+C`
|
|
|
|
to shutdown everything.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
#. Start GDB in terminal window 2:
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
* To debug on x86:
|
|
|
|
|
2016-02-13 11:12:56 -05:00
|
|
|
.. code-block:: console
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-09 19:47:18 -05:00
|
|
|
$ cd $ZEPHYR_BASE/samples/hello_world/nanokernel
|
2016-02-02 16:54:23 -08:00
|
|
|
$ gdb outdir/zephyr.elf
|
|
|
|
gdb$ target remote :3333
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-03 15:48:58 -08:00
|
|
|
* To debug on ARC:
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-16 11:03:08 -08:00
|
|
|
ARC debugging will require some extra steps and a third terminal. It is
|
2016-02-03 15:48:58 -08:00
|
|
|
necessary to use a version of gdb that understands ARC binaries.
|
|
|
|
Thankfully one is provided with the Zephyr SDK at
|
|
|
|
:envvar:`$ZEPHYR_SDK_INSTALL_DIR`
|
|
|
|
:file:`/sysroots/i686-pokysdk-linux/usr/bin/arc-poky-elf/arc-poky-elf-gdb`.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-03 15:48:58 -08:00
|
|
|
It is suggested to create an alias in your shell to run this command,
|
|
|
|
such as:
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-03 15:48:58 -08:00
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
alias arc_gdb= "$ZEPHYR_SDK_INSTALL_DIR/sysroots/i686-pokysdk-
|
|
|
|
linux/usr/bin/arc-poky-elf/arc-poky-elf-gdb"
|
|
|
|
|
|
|
|
a) On Terminal 2:
|
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
.. code-block:: console
|
2016-02-03 15:48:58 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
$ cd $ZEPHYR_BASE/samples/hello_world/nanokernel
|
|
|
|
$ arc_gdb outdir/zephyr.elf
|
|
|
|
gdb$ target remote :3334
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-03 15:48:58 -08:00
|
|
|
At this point you may set the breakpoint needed in the code/function.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-03 15:48:58 -08:00
|
|
|
b) On Terminal 3 connect to the X86 side:
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
.. code-block:: console
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
$ gdb
|
|
|
|
gdb$ target remote :3333
|
|
|
|
gdb$ continue
|
2016-01-27 09:09:55 -08:00
|
|
|
|
2016-02-02 16:54:23 -08:00
|
|
|
.. note::
|
2016-02-16 11:03:08 -08:00
|
|
|
|
2016-05-20 08:47:36 -07:00
|
|
|
In previous versions of the SDK, the gdbserver remote ports were reversed.
|
|
|
|
The gdb ARC server port was 3333 and the X86 port was 3334. As of SDK
|
|
|
|
v0.7.2, the gdb ARC server port is 3334, and the X86 port is 3333.
|
2016-02-02 16:54:23 -08:00
|
|
|
|
2016-05-12 07:00:39 -04:00
|
|
|
The :code:`continue` on the X86 side is needed as the ARC_GDB_ENABLE flag has
|
2016-01-27 09:09:55 -08:00
|
|
|
been set and halts the X86 until the ARC core is ready. Ready in this case
|
|
|
|
is defined as openocd has had a chance to connect, setup registers, and any
|
|
|
|
breakpoints. Unfortunately, there exists no automated method for notifying
|
|
|
|
the X86 side that openocd has connected to the ARC at this time.
|
|
|
|
|
|
|
|
Once you've started the X86 side again, and have configured any debug
|
|
|
|
stubs on the ARC side, you will need to have gdb issue the continue
|
|
|
|
command for the ARC processor to start.
|
|
|
|
|
|
|
|
|
|
|
|
Arduino 101 Pinout
|
|
|
|
******************
|
|
|
|
|
|
|
|
When using the Zephyr kernel, the pinout mapping for the Arduino 101 becomes a
|
2016-02-16 11:03:08 -08:00
|
|
|
little more complicated. The table below details which pins in Zephyr map to
|
|
|
|
those on the Arduino 101 board for control. Full details of the pinmux
|
2016-01-27 09:09:55 -08:00
|
|
|
implementation, what valid options can be configured, and where things map can
|
|
|
|
be found in the :file:`boards/arduino_101/pinmux.c`.
|
|
|
|
|
|
|
|
|
|
|
|
+-------------+----------+------------+
|
|
|
|
| Arduino Pin | Function | Zephyr Pin |
|
|
|
|
+=============+==========+============+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-0 | UART1-RX | 17 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-1 | UART1-TX | 16 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-2 | GPIO | 52 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-3 | GPIO | 51 |
|
|
|
|
| | | 63 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-4 | GPIO | 53 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-5 | GPIO | 49 |
|
|
|
|
| | | 64 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-6 | PWM2 | 65 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-7 | GPIO | 54 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-8 | GPIO | 50 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-9 | PWM3 | 66 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-10 | AIN0 | 0 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-11 | AIN3 | 3 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-12 | AIN1 | 1 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| IO-13 | AIN2 | 2 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| ADC0 | GPIO SS | 10 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| ADC1 | GPIO SS | 11 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| ADC2 | GPIO SS | 12 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| ADC3 | GPIO SS | 13 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| ADC4 | AIN14 | 14 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
2016-02-13 11:12:56 -05:00
|
|
|
| ADC5 | AIN9 | 9 |
|
2016-01-27 09:09:55 -08:00
|
|
|
+-------------+----------+------------+
|
|
|
|
|
|
|
|
.. note::
|
2016-05-20 08:47:36 -07:00
|
|
|
IO-3 and IO-5 require both pins to be set for functionality changes.
|
2016-01-27 09:09:55 -08:00
|
|
|
|
|
|
|
Release Notes
|
|
|
|
*************
|
|
|
|
|
|
|
|
When debugging on ARC, it is important that the x86 core be started and
|
2016-02-16 11:03:08 -08:00
|
|
|
running BEFORE attempting to debug on ARC. This is because the IPM console
|
2016-01-27 09:09:55 -08:00
|
|
|
calls will hang waiting for the x86 core to clear the communication.
|
|
|
|
|
|
|
|
.. _Arduino Website: https://www.arduino.cc/en/Main/ArduinoBoard101
|
|
|
|
|
|
|
|
.. _schematics: https://www.arduino.cc/en/uploads/Main/Arduino101Schematic.pdf
|
|
|
|
|
|
|
|
.. _FlySwatter2 JTAG debugger:
|
|
|
|
http://www.tincantools.com/JTAG/Flyswatter2.html
|
|
|
|
|
2016-02-02 16:54:23 -08:00
|
|
|
.. _Intel Datasheet:
|
|
|
|
http://www.intel.com/content/www/us/en/embedded/products/quark/mcu/se-soc/overview.html
|
|
|
|
|
2016-01-27 09:09:55 -08:00
|
|
|
.. _ARM-JTAG-20-10:
|
|
|
|
http://www.amazon.com/gp/product/
|
|
|
|
B009UEO9ZY/ref=oh_aui_detailpage_o04_s00?ie=UTF8&psc=1
|
2016-02-11 10:21:43 -06:00
|
|
|
|
2016-02-12 07:22:28 -08:00
|
|
|
.. _USB to TTL Serial Cable: https://www.adafruit.com/products/954
|