espressif_tinyusb/docs/boards.md

12 KiB
Raw Blame History

Boards

The board support code is only used for self-contained examples and testing. It is not used when TinyUSB is part of a larger project. It is responsible for getting the MCU started and the USB peripheral clocked with minimal of on-board devices

  • One LED : for status
  • One Button : to get input from user
  • One UART : optional for device, but required for host examples

Supported Boards

This code base already had supported for a handful of following boards (sorted alphabetically)

Dialog DA146xx

Espressif ESP32-S2

MicroChip SAMD11 & SAMD21

MicroChip SAMD51 & SAME54

MicroChip SAMG

MicroChip SAML22

Nordic nRF5x

Nuvoton

NXP iMX RT

NXP Kinetis

NXP LPC 11-13-15

NXP LPC 17-40

NXP LPC 18-43

NXP LPC 51

NXP LPC 54

NXP LPC55

Renesas RX

Raspberry Pi RP2040

Silabs

Sony

ST STM32

TI

Tomu

Add your own board

If you don't possess any of supported board above. Don't worry you can easily implemented your own one by following this guide as long as the mcu is supported.

  • Create new makefile for your board at hw/bsp/<board name>/board.mk and linker file as well if needed.
  • Create new source file for your board at hw/bsp/<board name>/<board name>.c and implement following APIs

Board APIs

board_init()

Is responsible for starting the MCU, setting up the USB clock and USB pins. It is also responsible for initializing LED and button pins. One useful clock debugging technique is to set up a PWM output at a known value such as 500hz based on the USB clock so that you can verify it is correct with a logic probe or oscilloscope. Setup your USB in a crystal-less mode when available. That makes the code easier to port across boards.

board_led_write()

Set the pin corresponding to the led to output a value that lights the LED when state is true.

board_button_read()

Return current state of button, a 1 means active (pressed), a 0 means inactive.

board_millis()

The function returns the elapsed number of milliseconds since startup. On ARM this is commonly done with SysTick or Timer. This provide examples a way to measure time to blink LED or delay properly. It is only required when run examples without RTOS CFG_TUSB_OS == OPT_OS_NONE.

board_uart_read()

Get characters from UART peripheral.

board_uart_write()

Send characters to UART peripheral.