1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
Commit Graph

946 Commits

Author SHA1 Message Date
bors[bot]
e51d8285f3
Merge #19037
19037: sys/usb, pkg/tinyusb: move USB board reset from highlevel STDIO to CDC ACM r=dylad a=gschorcht

### Contribution description

The USB board reset function `usb_board_reset_coding_cb` can be used on any CDC-ACM interface, even if the CDC ACM interface is not used as high-level STDIO. Therefore, this PR provides the following changes:

- The call of the board reset function `usb_board_reset_coding_cb` from USBUS stack has been moved from the STDIO CDC ACM implementation to the CDC ACM implementation and is thus a feature of any USBUS CDC ACM interface which does not necessarily have to be used as highlevel STDIO.

- The call of the board reset function `usb_board_reset_coding_cb` from tinyUSB stack been moved from module `tinyusb_stdio_cdc_acm` to module `tinyusb_contrib` and is compiled in if the `tinyusb_class_cdc` module is used together the `tinyusb_device` module. Thus, it is now a feature of the tinyUSB CDC ACM interface, which does not necessarily have to be used as highlevel STDIO.
 
- The `usb_board_reset` module defines the `usb_board_reset_in_bootloader` function as a weak symbol to be used when reset in bootloader if no real implementation of this function is compiled in and the `riotboot_reset` module is not used. It only prints an error message that the reset in bootloader is not supported. This is necessary if the module `usb_board_reset` is used to be able to restart the board with an application via a USB CDC ACM interface, but the board's bootloader does not support the reset in bootloader feature.

- A test application has been added that either uses the highlevel STDIO `stdio_acm_cdc` or creates a CDC-ACM interface to enable board resets via USB. If the `usbus_dfu` module is used, it also initializes the DFU interface to be able to work together with the `riotboot_dfu` bootloader.

### Testing procedure

1. Use a board with a bootloader that supports the reset in bootloader via USB, but don't use the highlevel STDIO to check that it works with `usbus_cdc_acm`, for example:
   ```python
   USEMODULE=stdio_uart BOARD=arduino-mkr1000 make -C tests/usb_board_reset flash
   ```
   After reset in application with command
   ```python
   stty -F /dev/ttyACM0 raw ispeed 600 ospeed 600 cs8 -cstopb ignpar eol 255 eof 255
   ```
   command `dmesg` should give an output like the following with RIOT's test VID/PID:
   ```python
   dmesg
   [1745182.057403] usb 1-4.1.2: new full-speed USB device number 69 using xhci_hcd
   [1745182.160386] usb 1-4.1.2: New USB device found, idVendor=1209, idProduct=7d01, bcdDevice= 1.00
   [1745182.160390] usb 1-4.1.2: New USB device strings: Mfr=3, Product=2, SerialNumber=4
   [1745182.160392] usb 1-4.1.2: Product: arduino-mkr1000
   [1745182.160393] usb 1-4.1.2: Manufacturer: RIOT-os.org
   [1745182.160395] usb 1-4.1.2: SerialNumber: 6B6C2CA5229020D8
   [1745182.170982] cdc_acm 1-4.1.2:1.0: ttyACM0: USB ACM device
   ```
   After reset in bootloader with command
   ```python
   stty -F /dev/ttyACM0 raw ispeed 1200 ospeed 1200 cs8 -cstopb ignpar eol 255 eof 255
   ```
   command `dmesg` should give an output like the following with vendor VID/PID:
   ```python
   [1746220.443792] usb 1-4.1.2: new full-speed USB device number 70 using xhci_hcd
   [1746220.544705] usb 1-4.1.2: New USB device found, idVendor=2341, idProduct=024e, bcdDevice= 2.00
   [1746220.544708] usb 1-4.1.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
   [1746220.553471] cdc_acm 1-4.1.2:1.0: ttyACM0: USB ACM device
   ```
   
2. Test the same as in 1., but this time use the highlevel STDIO to check that there is no regression and it still works with `stdio_cdc_acm`, for example:
   ```python
   BOARD=arduino-mkr1000 make -C tests/usb_board_reset flash
   ```
   
3. Use a board that supports `riotboot_dfu` but doesn't use the highlevel STDIO and flash the `riotboot_dfu` bootloader, for example:
   ```python
   BOARD=stm32f429i-disc1 make -C bootloaders/riotboot_dfu flash term
   ```
   Once the bootloader is flashed, command `dfu-util --list` should give something like the following:
   ```python
   Found DFU: [1209:7d02] ver=0100, devnum=14, cfg=1, intf=0, path="1-2", alt=1, name="RIOT-OS Slot 1", serial="6591620BCB270283"
   Found DFU: [1209:7d02] ver=0100, devnum=14, cfg=1, intf=0, path="1-2", alt=0, name="RIOT-OS Slot 0", serial="6591620BCB270283"
   ```
   If the output gives only
   ```python
   Found Runtime: [1209:7d00] ver=0100, devnum=123, cfg=1, intf=0, path="1-2", alt=0, name="RIOT-OS bootloader", serial="6591620BCB270283"
   ```
   an application is already running in DFU Runtime mode. Use `dfu-util -e` to restart it in bootloader DFU mode.
   Then flash the test application, for example:
   ```python
   FEATURES_REQUIRED=riotboot USEMODULE='usbus_dfu riotboot_reset' \
   BOARD=stm32f429i-disc1 make -C tests/usbus_board_reset PROGRAMMER=dfu-util riotboot/flash-slot0
   ```
   Once the test application is flashed, command `dfu-util --list` should give:
   ```python
   Found Runtime: [1209:7d00] ver=0100, devnum=123, cfg=1, intf=0, path="1-2", alt=0, name="RIOT-OS bootloader", serial="6591620BCB270283"
   ```
   Now, use command
   ```python
   stty -F /dev/ttyACM1 raw ispeed 600 ospeed 600 cs8 -cstopb ignpar eol 255 eof 255
   ``` 
   to restart the board in application. Command `dfu-util --list` should give again the following:
   ```python
   Found Runtime: [1209:7d00] ver=0100, devnum=123, cfg=1, intf=0, path="1-2", alt=0, name="RIOT-OS bootloader", serial="6591620BCB270283"
   ```
   That is, the application is running in DFU Runtime mode. Then use command
   ```python
   stty -F /dev/ttyACM1 raw ispeed 1200 ospeed 1200 cs8 -cstopb ignpar eol 255 eof 255
   ```
   to restart the board in bootloader DFU mode. Command  `dfu-util --list` should now give the following:
   ```python
   Found DFU: [1209:7d02] ver=0100, devnum=50, cfg=1, intf=0, path="1-2", alt=1, name="RIOT-OS Slot 1", serial="7D156425A950A8EB"
   Found DFU: [1209:7d02] ver=0100, devnum=50, cfg=1, intf=0, path="1-2", alt=0, name="RIOT-OS Slot 0", serial="7D156425A950A8EB"
   ```
   That is, the bootloader is in DFU mode and another application can be flash.
   
4. After a hard reset of the board under 3., try the commands `reboot` and `bootloader`. 

5. To check the same for tinyUSB, use the existing tinyUSB application with a CDC ACM interface and add module `usb_board_reset`, for example:
   ```python
   USEMODULE=usb_board_reset BOARD=stm32f429i-disc1 make -C tests/pkg_tinyusb_cdc_msc flash term
   ```
   After flashing, it should be possible to restart the application with command:
   ```python
   stty -F /dev/ttyACM1 raw ispeed 600 ospeed 600 cs8 -cstopb ignpar eol 255 eof 255
   ```
   When using command
   ```python
   stty -F /dev/ttyACM1 raw ispeed 1200 ospeed 1200 cs8 -cstopb ignpar eol 255 eof 255
   ```
   the following error message should be shown in terminal
   ```python
   [cdc-acm] reset in bootloader is not supported
   ```
   
### Issues/PRs references


Co-authored-by: Gunar Schorcht <gunar@schorcht.net>
2023-01-03 19:36:16 +00:00
Gunar Schorcht
0fbe9f6dfd boards/common/samdx1-arduino-bootloader: use any CDC ACM interface 2023-01-03 10:05:54 +01:00
Marian Buschsieweke
d2a3ff3d83
boards/{bluepill*,blackpill*}: rename and improve doc
- renamed:
    - `bluepill` --> `bluepill-stm32f103c8`
    - `bluepill-128kib` --> `bluepill-stm32f103cb`
    - `blackpill` --> `blackpill-stm32f103c8`
    - `blackpill-128kib` --> `blackpill-stm32f103cb`
- doc:
    - added link to corresponding hardware page on the STM32-base
      project
    - added picture
2023-01-02 16:23:10 +01:00
bors[bot]
f539035c86
Merge #18756
18756: drivers/usbdev_synopsys_dwc2: add EFM32 support r=chrysn a=gschorcht

### Contribution description

This PR provides the changes for the Synopsys USB OTG IP core DWC2 driver for EFM32 MCUs. It also provides the changes of the board definition for `stk3600` and `stk3700` for testing.

### Testing procedure

`tests/usbus_hid` should work on the EFM32 boards `stk3600` (EFM32LG family) and `stk3700` (EFM32GG family).

It is already tested for a `sltb009a` board (EFM32GG12 family).

### Issues/PRs references


Co-authored-by: Gunar Schorcht <gunar@schorcht.net>
2022-12-19 12:55:57 +00:00
Gunar Schorcht
7651e68db9 boards/common/silabs: add common USB OTG FS config 2022-12-07 16:34:34 +01:00
Gunar Schorcht
0b1b7e8408 boards/arduino-zero: move tinusb_device feature
The `tinyusb_device` feature introduced with PR #18689 has to be moved from `common/arduino-zero` definition to the `arduino-zero` definition because the common `arduino-zero` features are also used by `wemos-zero` which uses `highlevel_stdio` feature via the `stdio_cdc_acm` module.
2022-12-07 13:56:24 +01:00
Gunar Schorcht
44893a37e4 boards/common/weact-f4x1cx: remove tinyUSB feature
weact-f4xcx boards have only a single USB-C connector that is used for `highlevel_stdio` via USBUS CDC ACM so that it conflicts with tinyUSB for the moment.
2022-12-04 16:23:02 +01:00
Gunar Schorcht
93215df868 sys/usb/usbus: enable USBUS stdio_cdc_acm only if tinyUSB is not used 2022-12-03 12:52:45 +01:00
Gunar Schorcht
9fa01d69d8 boards/common/blxxxpill: enable riotboot feature 2022-11-30 19:28:14 +01:00
Gunar Schorcht
941d6be666 boards: make DFU_USB_ID and DFU_USE_DFUSE overridable 2022-11-30 19:28:14 +01:00
Juergen Fitschen
d9cde14669 treewide: fix typos found by recent codespell 2022-11-24 14:53:48 +01:00
Marian Buschsieweke
232c70ba53
Merge pull request #18948 from maribu/boards/common/nrf52
boards/common/nrf52: fix timer config
2022-11-23 10:47:26 +01:00
Marian Buschsieweke
51b6379dee
boards/common/nrf52: fix timer config
The `channels` member should not be set to the number of hardware
channels *n*, but to *n* - 1 instead. The last channel is implicitly
used in `timer_read()`. Hence out of *n* hardware channels, only *n* - 1
are available to the application.

This fixes a bug introduced by 4d02e15247
which incorrectly set the channel number to *n* rather than to
*n* - 1.
2022-11-22 13:20:53 +01:00
Jue
2a81a2ab5c cpu/efm32: provide periph_uart_modecfg feature for every board 2022-11-21 23:20:19 +01:00
64dcfd67ff
Merge pull request #18811 from maribu/boards/common/nrf52
boards/common/nrf52: improve default clock config
2022-11-21 09:33:47 +00:00
MrKevinWeiss
464f57b4a3
boards: Remove PLL overrides in kconfig
Since we know the HSE speed, manual overrides are not needed anymore
2022-11-03 13:38:09 +01:00
MrKevinWeiss
17cce015d4
treewide/stm32: Make CLOCK_HS* configurable 2022-11-03 11:37:28 +01:00
Marian Buschsieweke
4d02e15247
boards/common/nrf52: improve default clock config
- All nRF52 timers support 32 bit mode, so use that
- All nRF52 timers support at least 4 channels, the timers NRF_TIMER3
  and NRF_TIMER4 even support 6 channels.
- Add a warning that `TIMER_DEV(1)` is used by the IEEE 802.15.4 driver
2022-10-27 21:12:19 +02:00
Marian Buschsieweke
051a1f1e32
boards/common/blxxxpill: rework periph configuration
The peripheral configuration has been completely reworked to resolve
pin conflicts while provided as much of the peripherals as possible.
The changes include:

- Move `I2C_DEV(0)` from PB6/PB7 to PB8/PB9 to solve pin conflict with
  `QDEC_DEV(2)`.
- Use pins PB0, PB1, PB4, and PB5 for PWM instead PA8, PA9, PA10, and
  PA11
    - PA9 and PA10 is in pin conflict with `UART_DEV(0)` which is used
      for stdio with `stdio_uart`, PA8 was in conflict with
      `QDEC_DEV(0)`, PA11 was in conflict with USB D-
- Use PB6, PB7 as `QDEC_DEV(0)` (previously `QDEC_DEV(2)`), as this is
  the only completely conflict free setting
- Use PB4/PB5 instead of PA6/PA7 for QDEC_DEV(1)
    - This fixes a pin conflict with `SPI_DEV(0)` MISO (and
      `ADC_LINE(4)`)
- Only provide QDEC at PB4/PB5 when PWM is not used to avoid conflict
- Only provide QDEC at PA8/PA9 when UART is not used to avoid conflict
- Use SPI2 (PB15, PB14, PB13, PB12) as `SPI_DEV(0)` instead of SPI1,
  use SPI1 (PA7, PA6, PA5, PA4) as `SPI_DEV(1)`
- Only provide `SPI_DEV(1)` if the ADC is not in used to resolve a
  pin conflict
- Move PB0 and PB1 at the end of the ADC lines (previously
  `ADC_LINE(6)` and `ADC_LINE(7)`, now `ADC_LINE(8)` and `ADC_LINE(9)`)
   - Only provide them when PWM is not in use (to resolve pin conflict
     with PWM)
   - Also do not provide them for the Blackpill boards, which are
     missing pins PB0 and PB1 on the headers

To make life of users easier, a Pinout diagram with the new
configuration was added.
2022-10-27 14:28:07 +02:00
0fca912e91
Merge pull request #18714 from gschorcht/drivers/usbdev_synopsys_dwc2_hs_utmi
drivers/usbdev_synopsys_dwc2: add support for internal UTMI HS PHY
2022-10-16 14:05:32 +02:00
Gunar Schorcht
658d6b69b5 boards/common/stm32: add common configuration for internal USB HS PHY 2022-10-16 11:35:42 +02:00
Benjamin Valentin
d3d89aaec8
boards/blxxxpill: configure usbdev_fs 2022-10-13 21:59:47 +02:00
benpicco
d6d8f8dadb
Merge pull request #18679 from gschorcht/drivers/usbdev_synopsys_dwc2_hs
drivers/usbdev_synopsys_dwc2: add USB OTG HS peripheral support for external ULPI HS PHYs
2022-10-07 00:23:29 +02:00
Gunar Schorcht
4384403638 boards/common/esp32{s2,s3}: update USB OTG configuration 2022-10-06 06:26:22 +02:00
Gunar Schorcht
d2f7fd6a0e boards/common/stm32: rename cfg_usb_otg_hs_fs.h to clarify the usage
The `fs` in the file name means that on-chip FS PHY is configured for USB OTG HS. The file is renamed to `cfg_usb_otg_hs_phy_fs.h`
- to clarify that USB OTG HS is just configured with PHY FS and not HS and FS,
- to allow a configuration of USB OTG FS and HS in one file called `cfg_usb_otg_hs_fs.h` or whatever, and
- to allow a configuration of USB OTG HS with ULPI PHY in a file called `cfg_usb_otg_hs_phy_ulpi.h`.
f
2022-10-06 06:25:38 +02:00
Dylan Laduranty
4e39ba4c7a boards/sam0-based: enable tinyusb_device support in Kconfig
Signed-off-by: Dylan Laduranty <dylan.laduranty@mesotic.com>
2022-10-05 20:14:02 +02:00
Dylan Laduranty
b17197fe53 boards/sam0-based: enable tinyusb_device support in Makefiles.features
Signed-off-by: Dylan Laduranty <dylan.laduranty@mesotic.com>
2022-10-05 19:23:37 +02:00
Gunar Schorcht
990feeec39 boards: enable feature tinyusb_device for STM32 boards 2022-09-30 19:05:51 +02:00
benpicco
45afb8f986
Merge pull request #18644 from gschorcht/drivers/synopsys_dwc2
drivers: add driver for Synopsys DWC2 that is used as USB OTG peripheral on STM32 and ESP32x SoCs
2022-09-29 04:44:32 +02:00
Benjamin Valentin
2c9a3857d9 boards: convert sam0 boards to new adc_conf_chan_t 2022-09-27 22:43:31 +02:00
Gunar Schorcht
293d62ac45 boards/common/esp32: use usbdev_synopsys_dwc2 driver as periph_usbdev 2022-09-27 01:00:57 +02:00
Gunar Schorcht
641e343f7d boards/common/stm32: use usbdev_synopsys_dwc2 driver as periph_usbdev 2022-09-27 01:00:57 +02:00
Benjamin Valentin
f39e502eaf boards: drop unused BTN0_PORT define 2022-09-20 18:08:55 +02:00
Karl Fessel
da51932737 boards: add some missing whitespaces for static tests 2022-09-14 15:11:14 +02:00
Karl Fessel
05f114d0af doc: fix unbalaced grouping
- most were trivial
    - missing group close or open
    - extra space
    - no doxygen comment
- name commad might open an implicit group
    this hould also be implicit cosed but does not happen somtimes
- crazy: internal declared groups have to be closed internal
2022-09-14 15:05:25 +02:00
Marian Buschsieweke
77270e241a
boards/common/stm32: Fix LED configuration
The inverted and non-inverted `LED<num>_ON` and `LED<num>_OFF` macros
are swapped. This didn't reveal in testing as the
`LED<num>_IS_INVERTED` macros where not properly evaluated, due to a
typo in the check. This fixes both.
2022-09-13 08:34:31 +02:00
Gunar Schorcht
d85e9b3cc4 boards/common: add common board definition for ESP32-S2 2022-08-29 17:19:39 +02:00
Marian Buschsieweke
8d1476933b
Merge pull request #18415 from maribu/boards/common/stm32
boards/common/stm32: clean up LED definitions
2022-08-25 20:17:44 +02:00
Gunar Schorcht
84a1dec4f3 boards/common: add common board definition for ESP32-S3 2022-08-17 02:04:07 +02:00
Marian Buschsieweke
a1ed6f3b78
boards/common/blxxxpill: use UART_DEV(0) for stdio
Using `UART_DEV(0)` (UASRT1) for stdio allows to use the same TTL
adapter that is used for programming via `stm32flash` to be used for
serial, without re-wiring after flashing.
2022-08-12 19:13:29 +02:00
Marian Buschsieweke
1fd9913293
boards/common/stm32: clean up LED definitions
Let boards only define the port and pin number of each LEDs. The common
definitions in `stm32_leds.h` will provide `LED<x>_ON`, `LED<x>_OFF`,
`LED<x>_TOGGLE`, `LED<x>_PIN`, `LED<x>_MASK` and `LED<x>_PORT`.

In addition to code de-duplication, this also makes it easier to use
LEDs in GPIO LL, which can be beneficial for super low overhead
debugging output - e.g. when a bug is timing sensitive and `DEBUG()`
would spent to much time for stdio to reproduce a bug.
2022-08-08 23:35:06 +02:00
Gunar Schorcht
0e58666e49 boards/common/esp32: remove SPIFFS defines with default values
All SPIFFS defines are already defined as defaults in
2022-08-05 22:26:44 +02:00
Gunar Schorcht
f8c060e291 boards/common: add common board definition for ESP32-C3 2022-08-05 22:26:22 +02:00
Dylan Laduranty
b278002a8e boards/saml11-xpro: update doc for SERCOM1 fuse
SAML11 needs special handling for enabling SERCOM1 on EXT1. Update board documentation accordingly

Signed-off-by: Dylan Laduranty <dylan.laduranty@mesotic.com>
2022-07-28 22:42:26 +02:00
Leandro Lanzieri
b3ac6b7057
boards select cc2538 Kconfig feature 2022-07-28 09:32:25 +02:00
Leandro Lanzieri
8390641638
drivers/kw41zrf: model Kconfig 2022-07-28 09:32:24 +02:00
Leandro Lanzieri
7d95e9b5a9
drivers/at86rf2xx: model Kconfig 2022-07-28 09:32:24 +02:00
Gunar Schorcht
06d3616710 cpu/esp32: move CPU_FAM definition to board definition
To support ESP32x SoC families with existing Makefiles, CPU_FAM has to be defined by board definition.
2022-07-18 13:05:21 +02:00
Gunar Schorcht
c0becd2819 cpu/esp32: port periph/i2c_hw to ESP-IDF i2c HAL 2022-07-17 18:48:23 +02:00
benpicco
94e9116c04
Merge pull request #18276 from gschorcht/cpu/esp32/periph_hal_esp32_pwm
cpu/esp32: use ESP-IDF ledc HAL for periph/pwm
2022-07-14 18:09:01 +02:00