From a2f83e87b3bf92d2d40821dc2d1d6316cf78f058 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Sat, 4 Jan 2020 17:46:35 +0100 Subject: [PATCH] USB: ensure USB D+ pullup is handled by USB lib --- bootloader.c | 4 ---- lib/usb_cdcacm.c | 10 ++++++++++ lib/usb_dfu.c | 5 +++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/bootloader.c b/bootloader.c index eff7e04..57b3e22 100644 --- a/bootloader.c +++ b/bootloader.c @@ -96,10 +96,6 @@ void main(void) rcc_clock_setup_in_hse_8mhz_out_72mhz(); // start main clock board_setup(); // setup board to control LED - // setup USB D+ pull-up to indicate USB connect - rcc_periph_clock_enable(GPIO_RCC(DISPLAY_POWER_PIN)); // enable clock for GPIO peripheral - gpio_set_mode(GPIO_PORT(DISPLAY_POWER_PIN), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, GPIO_PIN(DISPLAY_POWER_PIN)); // set pin to output open-drain since it is controlled by pMOS - gpio_clear(GPIO_PORT(DISPLAY_POWER_PIN), GPIO_PIN(DISPLAY_POWER_PIN)); // enable USB D+ pull-up to indicate connection led_on(); // indicate bootloader started #if defined(BUSVOODOO) led_toggle(); // switch from blue to red LED diff --git a/lib/usb_cdcacm.c b/lib/usb_cdcacm.c index 8daea4a..679ba45 100644 --- a/lib/usb_cdcacm.c +++ b/lib/usb_cdcacm.c @@ -263,6 +263,11 @@ static void usb_disconnect(void) rcc_periph_clock_enable(RCC_GPIOB); gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO6); gpio_clear(GPIOB, GPIO6); +#elif defined(USB_CABLE_TESTER) + // disable USB D+ pull-up using pMOS + rcc_periph_clock_enable(RCC_GPIOD); + gpio_set_mode(GPIOD, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, GPIO13); + gpio_set(GPIOD, GPIO13); #endif // pull USB D+ low for a short while rcc_periph_clock_enable(RCC_GPIOA); @@ -459,6 +464,11 @@ void usb_cdcacm_setup(void) rcc_periph_clock_enable(RCC_GPIOB); gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO6); gpio_set(GPIOB, GPIO6); +#elif defined(USB_CABLE_TESTER) + // enable USB D+ pull-up using pMOS + rcc_periph_clock_enable(RCC_GPIOD); + gpio_set_mode(GPIOD, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, GPIO13); + gpio_clear(GPIOD, GPIO13); #endif rcc_periph_clock_enable(RCC_GPIOA); // enable clock for GPIO used for USB rcc_periph_clock_enable(RCC_USB); // enable clock for USB domain diff --git a/lib/usb_dfu.c b/lib/usb_dfu.c index fb1694b..467a83c 100644 --- a/lib/usb_dfu.c +++ b/lib/usb_dfu.c @@ -145,6 +145,11 @@ static void usb_disconnect(void) rcc_periph_clock_enable(RCC_GPIOB); gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO6); gpio_clear(GPIOB, GPIO6); +#elif defined(USB_CABLE_TESTER) + // disable USB D+ pull-up using pMOS + rcc_periph_clock_enable(RCC_GPIOD); + gpio_set_mode(GPIOD, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, GPIO13); + gpio_set(GPIOD, GPIO13); #endif // pull USB D+ low for a short while rcc_periph_clock_enable(RCC_GPIOA);