blob: 17414453cf1d5b5f6c1f13bd8a8b080705df02c8 [file] [log] [blame]
.. _96b_carbon_board:
96Boards Carbon
###############
Overview
********
Zephyr applications use the 96b_carbon configuration to run on the 96Boards
Carbon hardware. It is based on the STMicroelectronics STM32F401RET Cortex-M4
CPU and also contains a nRF51832 chip connected over SPI for BLE connectivity.
.. figure:: img/96b-carbon-front.png
:width: 487px
:align: center
:alt: 96Boards Carbon
96Boards Carbon
Hardware
********
96Boards Carbon provides the following hardware components:
- STM32F401RET6 in LQFP64 package
- ARM |reg| 32-bit Cortex |reg|-M4 CPU with FPU
- 84 MHz max CPU frequency
- VDD from 1.7 V to 3.6 V
- 512 KB Flash
- 96 KB SRAM
- GPIO with external interrupt capability
- 12-bit ADC with 16 channels
- RTC
- Advanced-control Timer
- General Purpose Timers (7)
- Watchdog Timers (2)
- USART/UART (4)
- I2C (3)
- SPI (3)
- SDIO
- USB 2.0 OTG FS
- DMA Controller
- Bluetooth LE over SPI, provided by nRF51832
More information about STM32F401RE can be found here:
- `STM32F401RE on www.st.com`_
- `STM32F401 reference manual`_
Supported Features
==================
The Zephyr 96b_carbon board configuration supports the following hardware
features:
+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component |
+===========+============+=====================================+
| NVIC | on-chip | nested vector interrupt controller |
+-----------+------------+-------------------------------------+
| SYSTICK | on-chip | system clock |
+-----------+------------+-------------------------------------+
| UART | on-chip | serial port |
+-----------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+-----------+------------+-------------------------------------+
| PINMUX | on-chip | pinmux |
+-----------+------------+-------------------------------------+
| FLASH | on-chip | flash |
+-----------+------------+-------------------------------------+
| SPI | on-chip | spi |
+-----------+------------+-------------------------------------+
More details about the board can be found at `96Boards website`_.
The default configuration can be found in the defconfig file:
``boards/arm/96b_carbon/96b_carbon_defconfig``
Pin Mapping
===========
LED
---
- LED1 / User1 LED = PD2
- LED2 / User2 LED = PA15
- LED3 / BT LED = PB5
- LED4 / Power LED = VCC
Push buttons
------------
- BUTTON = BOOT0 (SW1)
- BUTTON = RST
External Connectors
-------------------
Low Speed Header
+--------+-------------+----------------------+
| PIN # | Signal Name | STM32F401 Functions |
+========+=============+======================+
| 1 | UART2_CTS | PA0 |
+--------+-------------+----------------------+
| 3 | UART2_TX | PA2 |
+--------+-------------+----------------------+
| 5 | UART2_RX | PA3 |
+--------+-------------+----------------------+
| 7 | UART2_RTS | PA1 |
+--------+-------------+----------------------+
| 9 | GND | GND |
+--------+-------------+----------------------+
| 11 | USB5V | USB5V |
+--------+-------------+----------------------+
| 13 | AIN12 | PC2 |
+--------+-------------+----------------------+
| 15 | AIN14 | PC4 |
+--------+-------------+----------------------+
| 17 | UART6_TX | PC6 |
+--------+-------------+----------------------+
| 19 | GPIO | PC8 |
+--------+-------------+----------------------+
| 21 | I2C1_SCL | PB6 |
+--------+-------------+----------------------+
| 23 | I2C1_SCA | PB7 |
+--------+-------------+----------------------+
| 25 | I2C2_SCA | PB3 |
+--------+-------------+----------------------+
| 27 | I2C2_SCL | PB10 |
+--------+-------------+----------------------+
| 29 | RST_BTN | RST_BTN |
+--------+-------------+----------------------+
+--------+-------------+----------------------+
| PIN # | Signal Name | STM32F401 Functions |
+========+=============+======================+
| 2 | SPI2_SS | PB12 |
+--------+-------------+----------------------+
| 4 | SPI2_MOSI | PB15 |
+--------+-------------+----------------------+
| 6 | SPI2_MISO | PB14 |
+--------+-------------+----------------------+
| 8 | SPI2_SCK | PB13 |
+--------+-------------+----------------------+
| 10 | GND | GND |
+--------+-------------+----------------------+
| 12 | VCC2 | VCC2 |
+--------+-------------+----------------------+
| 14 | AIN13 | PC3 |
+--------+-------------+----------------------+
| 16 | AIN15 | PC5 |
+--------+-------------+----------------------+
| 18 | UART6_RX | PC7 |
+--------+-------------+----------------------+
| 20 | GPIO | PC9 |
+--------+-------------+----------------------+
| 22 | I2C1_SCL | PB8 |
+--------+-------------+----------------------+
| 24 | I2C1_SDA | PB9 |
+--------+-------------+----------------------+
| 26 | AIN10 | PC0 |
+--------+-------------+----------------------+
| 28 | AIN11 | PC1 |
+--------+-------------+----------------------+
| 30 | NC | NC |
+--------+-------------+----------------------+
System Clock
============
STM32F4 has two external oscillators. The frequency of the slow clock is
32.768 kHz. The frequency of the main clock is 16 MHz.
Flashing Zephyr onto 96Boards Carbon
************************************
There are 2 main entry points for flashing STM32F4X SoCs, one using the ROM
bootloader, and another by using the SWD debug port (which requires additional
hardware). Flashing using the ROM bootloader requires a special activation
pattern, which can be triggered by using the BOOT0 pin. The ROM bootloader
supports flashing via USB (DFU), UART, I2C and SPI. You can read more about
how to enable and use the ROM bootloader by checking the application
note `AN2606`_, page 109.
Installing dfu-util
===================
It is recommended to use at least v0.8 of `dfu-util`_. The package available in
debian/ubuntu can be quite old, so you might have to build dfu-util from source.
Flashing an Application to 96Boards Carbon
------------------------------------------
The sample application :ref:`hello_world` is being used in this tutorial:
.. code-block:: console
$<zephyr_root_path>/samples/hello_world
To build the Zephyr kernel and application, enter:
.. code-block:: console
$ cd <zephyr_root_path>
$ source zephyr-env.sh
$ cd $ZEPHYR_BASE/samples/hello_world/
$ make BOARD=96b_carbon
Connect the micro-USB cable to the USB OTG Carbon port and to your computer.
The board should power ON. Force the board into DFU mode by keeping the BOOT0
switch pressed while pressing and releasing the RST switch.
Confirm that the board is in DFU mode:
.. code-block:: console
$ sudo dfu-util -l
dfu-util 0.8
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2014 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to dfu-util@lists.gnumonks.org
Found DFU: [0483:df11] ver=2200, devnum=15, cfg=1, intf=0, alt=3, name="@Device Feature/0xFFFF0000/01*004 e", serial="3574364C3034"
Found DFU: [0483:df11] ver=2200, devnum=15, cfg=1, intf=0, alt=2, name="@OTP Memory /0x1FFF7800/01*512 e,01*016 e", serial="3574364C3034"
Found DFU: [0483:df11] ver=2200, devnum=15, cfg=1, intf=0, alt=1, name="@Option Bytes /0x1FFFC000/01*016 e", serial="3574364C3034"
Found DFU: [0483:df11] ver=2200, devnum=15, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/04*016Kg,01*064Kg,03*128Kg", serial="3574364C3034"
Found Runtime: [05ac:8290] ver=0104, devnum=2, cfg=1, intf=5, alt=0, name="UNKNOWN", serial="UNKNOWN"
You should see following confirmation on your Linux host:
.. code-block:: console
$ dmesg
usb 1-2.1: new full-speed USB device number 14 using xhci_hcd
usb 1-2.1: New USB device found, idVendor=0483, idProduct=df11
usb 1-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-2.1: Product: STM32 BOOTLOADER
usb 1-2.1: Manufacturer: STMicroelectronics
usb 1-2.1: SerialNumber: 3574364C3034
Flash a new application to the board:
.. code-block:: console
$ sudo dfu-util -d [0483:df11] -a 0 -D outdir/96b_carbon/zephyr.bin -s 0x08000000
Connect the micro-USB cable to the USB UART (FTDI) port and to your computer.
Run your favorite terminal program to listen for output.
.. code-block:: console
$ minicom -D <tty_device> -b 115200
Replace :code:`<tty_device>` with the port where the board 96Boards Carbon
can be found. For example, under Linux, :code:`/dev/ttyUSB0`.
The ``-b`` option sets baud rate ignoring the value from config.
Press the Reset button and you should see the the following message in your
terminal:
.. code-block:: console
Hello World! arm
.. _dfu-util:
http://dfu-util.sourceforge.net/build.html
.. _AN2606:
http://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf
.. _96Boards website:
http://www.96boards.org/documentation
.. _STM32F401RE on www.st.com:
http://www.st.com/en/microcontrollers/stm32f401re.html
.. _STM32F401 reference manual:
http://www.st.com/resource/en/reference_manual/dm00096844.pdf