|  | .. _96b_carbon_board: | 
|  |  | 
|  | 96Boards Carbon | 
|  | ############### | 
|  |  | 
|  | Overview | 
|  | ******** | 
|  |  | 
|  | The 96Boards is based on the STMicroelectronics STM32F401RET Cortex-M4 CPU and | 
|  | also contains a nRF51822 chip connected over SPI for BLE connectivity. | 
|  |  | 
|  | The 96Boards Carbon board is built with two chips: an STMicroelectronics | 
|  | STM32F401RET Cortex-M4 CPU and an nRF51822 chip connected to | 
|  | the Cortex-M4 CPU over SPI for Bluetooth LE connectivity.  Even though | 
|  | both chips exist on the same physical board, they must be programmed | 
|  | separately: | 
|  |  | 
|  | - The ``96b_carbon`` configuration is used when developing programs for | 
|  | the main chip on the board, the STM32F401RET. Users will likely want to | 
|  | write applications targeting this chip, using the ``96b_carbon`` | 
|  | configuration, since it is connected to all of the breakout | 
|  | I/O headers. | 
|  |  | 
|  | - The ``96b_carbon_nrf51`` configuration should be used for programming | 
|  | the secondary nRF51822 chip. Most users will likely not develop | 
|  | applications for this chip, since Zephyr already provides a | 
|  | sample application that can be flashed onto the nRF51822 | 
|  | to provide Bluetooth functionality to applications on the main | 
|  | STM32F401RET chip. | 
|  |  | 
|  | For instructions on how to set up the nRF51822 to develop Bluetooth | 
|  | applications, see :ref:`96b_carbon_nrf51_bluetooth`. | 
|  |  | 
|  | After you have flashed your nRF51, you can perform basic validation | 
|  | of this Bluetooth setup using the instructions | 
|  | :ref:`below <96b_carbon_verify_bluetooth>`. | 
|  |  | 
|  | .. figure:: img/96b_carbon.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 nRF51822 | 
|  |  | 
|  | 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                                 | | 
|  | +------------+------------+-------------------------------------+ | 
|  | | I2C        | on-chip    | i2c                                 | | 
|  | +------------+------------+-------------------------------------+ | 
|  | | USB OTG FS | on-chip    | USB device                          | | 
|  | +------------+------------+-------------------------------------+ | 
|  |  | 
|  | 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`` | 
|  |  | 
|  | Connections and IOs | 
|  | =================== | 
|  |  | 
|  | 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                   | | 
|  | +--------+-------------+----------------------+ | 
|  |  | 
|  | More detailed information about the connectors can be found in | 
|  | `96Boards IE Specification`_. | 
|  |  | 
|  | External Clock Sources | 
|  | ---------------------- | 
|  |  | 
|  | STM32F4 has two external oscillators. The frequency of the slow clock is | 
|  | 32.768 kHz. The frequency of the main clock is 16 MHz. | 
|  |  | 
|  | Serial Port | 
|  | ----------- | 
|  |  | 
|  | 96Boards Carbon board has up to 4 U(S)ARTs. The Zephyr console output is | 
|  | assigned to USART1. Default settings are 115200 8N1. | 
|  |  | 
|  | I2C | 
|  | --- | 
|  |  | 
|  | 96Boards Carbon board has up to 2 I2Cs. The default I2C mapping for Zephyr is: | 
|  |  | 
|  | - I2C1_SCL : PB6 | 
|  | - I2C1_SDA : PB7 | 
|  | - I2C2_SCL : PB10 | 
|  | - I2C2_SDA : PB3 | 
|  |  | 
|  | SPI | 
|  | --- | 
|  |  | 
|  | 96Boards Carbon board has up to 2 SPIs. SPI1 is used for Bluetooth communication | 
|  | over HCI. The default SPI mapping for Zephyr is: | 
|  |  | 
|  | - SPI1_NSS  : PA4 | 
|  | - SPI1_SCK  : PA5 | 
|  | - SPI1_MISO : PA6 | 
|  | - SPI1_MOSI : PA7 | 
|  | - SPI2_NSS  : PB12 | 
|  | - SPI2_SCK  : PB13 | 
|  | - SPI2_MISO : PB14 | 
|  | - SPI2_MOSI : PB15 | 
|  |  | 
|  | USB | 
|  | === | 
|  |  | 
|  | 96Boards Carbon board has a USB OTG dual-role device (DRD) controller that | 
|  | supports both device and host functions through its mini "OTG" USB connector. | 
|  | Only USB device functions are supported in Zephyr at the moment. | 
|  |  | 
|  | - USB_DM : PA11 | 
|  | - USB_DP : PA12 | 
|  |  | 
|  | Programming and Debugging | 
|  | ************************* | 
|  |  | 
|  | 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. | 
|  |  | 
|  | Flashing | 
|  | ======== | 
|  |  | 
|  | 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 | 
|  | ------------------------------------------ | 
|  |  | 
|  | 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 | 
|  |  | 
|  | Then build and flash an application. Here is an example for the | 
|  | :ref:`hello_world` application. | 
|  |  | 
|  | .. zephyr-app-commands:: | 
|  | :zephyr-app: samples/hello_world | 
|  | :board: 96b_carbon | 
|  | :goals: build flash | 
|  |  | 
|  | 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 | 
|  |  | 
|  | .. _96b_carbon_verify_bluetooth: | 
|  |  | 
|  | Verifying Bluetooth Functionality | 
|  | --------------------------------- | 
|  |  | 
|  | This section contains instructions for verifying basic Bluetooth | 
|  | functionality on the board. For help on Zephyr applications | 
|  | in general, see :ref:`build_an_application`. | 
|  |  | 
|  | 1. Flash the nRF51 with the hci_spi sample application as described in | 
|  | :ref:`96b_carbon_nrf51_bluetooth`. | 
|  |  | 
|  | #. Install the dfu-util flashing app, as described above. | 
|  |  | 
|  | #. Build and flash the ``samples/bluetooth/ipsp`` application for | 
|  | 96b_carbon. See the instructions above for how to put your board | 
|  | into DFU mode if you haven't done this before: | 
|  |  | 
|  | .. zephyr-app-commands:: | 
|  | :zephyr-app: samples/bluetooth/ipsp | 
|  | :board: 96b_carbon | 
|  | :goals: build flash | 
|  |  | 
|  | #. Refer to the instructions in :ref:`bluetooth-ipsp-sample` for how | 
|  | to verify functionality. | 
|  |  | 
|  | Congratulations! Your 96Boards Carbon now has Bluetooth | 
|  | connectivity. Refer to :ref:`bluetooth` for additional information on | 
|  | further Bluetooth application development. | 
|  |  | 
|  | Debugging | 
|  | ========= | 
|  |  | 
|  | The 96b_carbon can be debugged by installing a 100 mil (0.1 inch) header | 
|  | into the header at the bottom right hand side of the board, and | 
|  | attaching an SWD debugger to the 3V3 (3.3V), GND, CLK, DIO, and RST | 
|  | pins on that header. Then apply power to the 96Boards Carbon via one | 
|  | of its USB connectors. You can now attach your debugger to the | 
|  | STM32F401RET using an SWD scan. | 
|  |  | 
|  | .. _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 | 
|  |  | 
|  | .. _96Boards IE Specification: | 
|  | https://linaro.co/ie-specification |