Changes for USB driver.
This commit is contained in:
11
ChangeLog
11
ChangeLog
@@ -1,3 +1,14 @@
|
|||||||
|
2019-05-13 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
|
* board/board-maple-mini.h: Assert USB D+ pull-up.
|
||||||
|
* board/board-olimex-stm32-h103.h: Likewise.
|
||||||
|
* board/board-stbee.h:Likewise.
|
||||||
|
* board/board-stm32-primer2.h: Likewise.
|
||||||
|
|
||||||
|
* mcu/usb-stm32f103.c: Don't use usb_lld_sys_init and
|
||||||
|
usb_lld_sys_shutdown in SYS.
|
||||||
|
* mcu/usb-stm32l4.c: Ditto.
|
||||||
|
|
||||||
2019-05-10 NIIBE Yutaka <gniibe@fsij.org>
|
2019-05-10 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
* chopstx.c (chopstx_claim_irq): Check INTR before the call.
|
* chopstx.c (chopstx_claim_irq): Check INTR before the call.
|
||||||
|
|||||||
20
NEWS
20
NEWS
@@ -3,21 +3,23 @@ NEWS - Noteworthy changes
|
|||||||
|
|
||||||
* Major changes in Chopstx 1.15
|
* Major changes in Chopstx 1.15
|
||||||
|
|
||||||
Released 2019-05-10
|
Released 2019-05-1X
|
||||||
|
|
||||||
** SYS version 4.0
|
** SYS version 4.0
|
||||||
USB initialization/finalization demarcation has been changed.
|
USB initialization/finalization demarcation has been changed.
|
||||||
Enabling/disabling USB module is done by USB driver. SYS routines
|
Enabling/disabling USB module is done by USB driver. SYS routines
|
||||||
only handles USB cable config. If a board has a fixed pull-up
|
only handles USB cable config. For all boards, USB driver doesn't use
|
||||||
resistor, USB driver can omit calling
|
usb_lld_sys_init/usb_lld_sys_shutdown (those routines only makes sense
|
||||||
usb_lld_sys_init/usb_lld_sys_shutdown.
|
for USB self powered situation, which Chopstx does not support yet).
|
||||||
|
|
||||||
** USB driver change
|
** USB driver change
|
||||||
Enabling/disabling USB module is done by USB driver. Only with
|
Enabling/disabling USB module is done by USB driver. It's
|
||||||
-DUSE_SYS option, it calls usb_lld_sys_init/usb_lld_sys_shutdown.
|
responsibility of board configuration to enable external transistor
|
||||||
Don't forget having -DUSE_SYS to support boards with non-fixed 1K5
|
for pull-up D+-line.
|
||||||
resistor. Despite this change, it should work well with SYS 3.0
|
|
||||||
routines.
|
** Board configuration change
|
||||||
|
For USB driver change, board-maple-mini.h, board-olimex-stm32-h103.h,
|
||||||
|
board-stbee.h, and board-stm32-primer2.h were changed.
|
||||||
|
|
||||||
** Cortex-M4 support
|
** Cortex-M4 support
|
||||||
Cortex-M4 support has been added. Not supporting use of FPU or DSP,
|
Cortex-M4 support has been added. Not supporting use of FPU or DSP,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
* PA0 - input with pull-up. AN0
|
* PA0 - input with pull-up. AN0
|
||||||
* PA1 - input with pull-up. AN1
|
* PA1 - input with pull-up. AN1
|
||||||
* PA8 - Push pull output 50MHz (LED 1:ON 0:OFF)
|
* PA8 - Push pull output 50MHz (LED 1:ON 0:OFF)
|
||||||
* PA10 - Push pull output 50MHz (USB 1:ON 0:OFF)
|
* PA10 - Push pull output 50MHz (USB 1:ON 0:OFF) default 1
|
||||||
* PA11 - Push Pull output 10MHz 0 default (until USB enabled) (USBDM)
|
* PA11 - Push Pull output 10MHz 0 default (until USB enabled) (USBDM)
|
||||||
* PA12 - Push Pull output 10MHz 0 default (until USB enabled) (USBDP)
|
* PA12 - Push Pull output 10MHz 0 default (until USB enabled) (USBDP)
|
||||||
* ------------------------ Default
|
* ------------------------ Default
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
* PA5 - Alternate Push pull output (SPI1_SCK)
|
* PA5 - Alternate Push pull output (SPI1_SCK)
|
||||||
* PA6 - Alternate Push pull output (SPI1_MISO)
|
* PA6 - Alternate Push pull output (SPI1_MISO)
|
||||||
* PA7 - Alternate Push pull output (SPI1_MOSI)
|
* PA7 - Alternate Push pull output (SPI1_MOSI)
|
||||||
* PA10 - Push pull output (USB 1:ON 0:OFF)
|
* PA10 - Push pull output (USB 1:ON 0:OFF) default 1
|
||||||
* PA11 - Push Pull output 10MHz 0 default (until USB enabled) (USBDM)
|
* PA11 - Push Pull output 10MHz 0 default (until USB enabled) (USBDM)
|
||||||
* PA12 - Push Pull output 10MHz 0 default (until USB enabled) (USBDP)
|
* PA12 - Push Pull output 10MHz 0 default (until USB enabled) (USBDP)
|
||||||
* ------------------------ Default
|
* ------------------------ Default
|
||||||
|
|||||||
@@ -30,11 +30,11 @@
|
|||||||
/*
|
/*
|
||||||
* Port B setup.
|
* Port B setup.
|
||||||
* PB1 - Push pull output 50MHz (LED 1:ON 0:OFF)
|
* PB1 - Push pull output 50MHz (LED 1:ON 0:OFF)
|
||||||
* PB9 - Push pull output 50MHz (USB 1:ON 0:OFF)
|
* PB9 - Push pull output 50MHz (USB 0:ON 1:OFF) default 0
|
||||||
* ------------------------ Default
|
* ------------------------ Default
|
||||||
* PBx - input with pull-up
|
* PBx - input with pull-up
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIO_LED_ODR 0xFFFFFFFF
|
#define VAL_GPIO_LED_ODR 0xFFFFFDFF
|
||||||
#define VAL_GPIO_LED_CRL 0x88888838 /* PB7...PB0 */
|
#define VAL_GPIO_LED_CRL 0x88888838 /* PB7...PB0 */
|
||||||
#define VAL_GPIO_LED_CRH 0x88888838 /* PB15...PB8 */
|
#define VAL_GPIO_LED_CRH 0x88888838 /* PB15...PB8 */
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
* PA10 - floating input
|
* PA10 - floating input
|
||||||
* PA11 - Push Pull output 10MHz 0 default (until USB enabled) (USBDM)
|
* PA11 - Push Pull output 10MHz 0 default (until USB enabled) (USBDM)
|
||||||
* PA12 - Push Pull output 10MHz 0 default (until USB enabled) (USBDP)
|
* PA12 - Push Pull output 10MHz 0 default (until USB enabled) (USBDP)
|
||||||
* PA15 - Push pull output (USB_EN 1:ON 0:OFF)
|
* PA15 - Push pull output (USB_EN 1:ON 0:OFF) default 1
|
||||||
* ------------------------ Default
|
* ------------------------ Default
|
||||||
* PA8 - input with pull-up.
|
* PA8 - input with pull-up.
|
||||||
* PA9 - floating input.
|
* PA9 - floating input.
|
||||||
|
|||||||
@@ -20,12 +20,12 @@
|
|||||||
* PC1 - input with pull-up. AN11 for NeuG
|
* PC1 - input with pull-up. AN11 for NeuG
|
||||||
* PC6 - input without pull-up/down
|
* PC6 - input without pull-up/down
|
||||||
* PC7 - input without pull-up/down
|
* PC7 - input without pull-up/down
|
||||||
* PC11 - Open-drain output 50MHz (USB disconnect).
|
* PC11 - Open-drain output 50MHz (USB 0:ON 1:OFF) default 0
|
||||||
* PC12 - Push Pull output 50MHz (LED).
|
* PC12 - Push Pull output 50MHz (LED).
|
||||||
* ------------------------ Default
|
* ------------------------ Default
|
||||||
* PCx - input with pull-up
|
* PCx - input with pull-up
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIO_LED_ODR 0xFFFFFFFF
|
#define VAL_GPIO_LED_ODR 0xFFFFF7FF
|
||||||
#define VAL_GPIO_LED_CRL 0x44888888 /* PC7...PC0 */
|
#define VAL_GPIO_LED_CRL 0x44888888 /* PC7...PC0 */
|
||||||
#define VAL_GPIO_LED_CRH 0x88837888 /* PC15...PC8 */
|
#define VAL_GPIO_LED_CRH 0x88837888 /* PC15...PC8 */
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
* PA9 - Push pull output 50MHz (LED 1:ON 0:OFF)
|
* PA9 - Push pull output 50MHz (LED 1:ON 0:OFF)
|
||||||
* PA11 - Push Pull output 10MHz 0 default (until USB enabled) (USBDM)
|
* PA11 - Push Pull output 10MHz 0 default (until USB enabled) (USBDM)
|
||||||
* PA12 - Push Pull output 10MHz 0 default (until USB enabled) (USBDP)
|
* PA12 - Push Pull output 10MHz 0 default (until USB enabled) (USBDP)
|
||||||
* PA15 - Push pull output 50MHz (USB 1:ON 0:OFF)
|
* PA15 - Push pull output 50MHz (USB 1:ON 0:OFF) default 1
|
||||||
* ------------------------ Default
|
* ------------------------ Default
|
||||||
* PAx - input with pull-up
|
* PAx - input with pull-up
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
* PA11 - Push Pull output 10MHz 0 default (until USB enabled) (USBDM)
|
* PA11 - Push Pull output 10MHz 0 default (until USB enabled) (USBDM)
|
||||||
* PA12 - Push Pull output 10MHz 0 default (until USB enabled) (USBDP)
|
* PA12 - Push Pull output 10MHz 0 default (until USB enabled) (USBDP)
|
||||||
* PA13 - Open Drain output (LED1 0:ON 1:OFF)
|
* PA13 - Open Drain output (LED1 0:ON 1:OFF)
|
||||||
* PA14 - Push pull output (USB ENABLE 0:DISABLE 1:ENABLE)
|
* PA14 - Push pull output (USB 1:ON 0:OFF) default 1
|
||||||
* PA15 - Open Drain output (LED2 0:ON 1:OFF)
|
* PA15 - Open Drain output (LED2 0:ON 1:OFF)
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIO_LED_ODR 0xFFFFE77F
|
#define VAL_GPIO_LED_ODR 0xFFFFE77F
|
||||||
|
|||||||
@@ -29,9 +29,9 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Port D setup.
|
* Port D setup.
|
||||||
* PD3 - Push pull output (USB_DISC 1:USB-DISABLE 0:USB-ENABLE) 2MHz
|
* PD3 - Push pull output (USB 1:OFF 0:ON) 2MHz default 0
|
||||||
* PD4 - Open Drain output 2MHz (LED1).
|
* PD4 - Open Drain output 2MHz (LED1).
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIO_LED_ODR 0xFFFFFFFF
|
#define VAL_GPIO_LED_ODR 0xFFFFFFF7
|
||||||
#define VAL_GPIO_LED_CRL 0x88862888 /* PD7...PD0 */
|
#define VAL_GPIO_LED_CRL 0x88862888 /* PD7...PD0 */
|
||||||
#define VAL_GPIO_LED_CRH 0x88888888 /* PD15...PD8 */
|
#define VAL_GPIO_LED_CRH 0x88888888 /* PD15...PD8 */
|
||||||
|
|||||||
@@ -30,11 +30,11 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Port D setup.
|
* Port D setup.
|
||||||
* PD3 - Push pull output 50MHz (USB 1:ON 0:OFF)
|
* PD3 - Push pull output 50MHz (USB 0:ON 1:OFF) default 0
|
||||||
* ------------------------ Default
|
* ------------------------ Default
|
||||||
* PDx - input with pull-up
|
* PDx - input with pull-up
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIO_USB_ODR 0xFFFFFFFF
|
#define VAL_GPIO_USB_ODR 0xFFFFFFF7
|
||||||
#define VAL_GPIO_USB_CRL 0x88883888 /* PD7...PD0 */
|
#define VAL_GPIO_USB_CRL 0x88883888 /* PD7...PD0 */
|
||||||
#define VAL_GPIO_USB_CRH 0x88888888 /* PD15...PD8 */
|
#define VAL_GPIO_USB_CRH 0x88888888 /* PD15...PD8 */
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ This document was written when I was porting Chopstx to Kinetis L.
|
|||||||
SYS 2.0: Added clock_init, gpio_init
|
SYS 2.0: Added clock_init, gpio_init
|
||||||
SYS 2.1: Added sys_board_id, sys_board_name
|
SYS 2.1: Added sys_board_id, sys_board_name
|
||||||
SYS 3.0: Don't setup NVIC priority by usb_lld_sys_init
|
SYS 3.0: Don't setup NVIC priority by usb_lld_sys_init
|
||||||
SYS 4.0: For USB, only do usb_cable_config, enabling the USB module
|
SYS 4.0: For USB, only do usb_cable_config. Enabling/disabling the
|
||||||
is the role of USB driver.
|
USB module is the role of USB driver.
|
||||||
|
|
||||||
* Macro definition by DEFS in Makefile
|
* Macro definition by DEFS in Makefile
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,32 @@
|
|||||||
USB driver in Chopstx
|
USB driver in Chopstx
|
||||||
|
|
||||||
Full speed device is assumed. Bus powered system is assumed.
|
Full speed device is assumed. Bus powered system is assumed.
|
||||||
|
API-wise, self powered system is not supported (yet) by this USB driver.
|
||||||
|
|
||||||
API-wise, self powered system is not supported (yet). To support self
|
The driver can be used without Chopstx. An example can be find in
|
||||||
powered system, we need to define the hardware interface detecting
|
Gnuk (gnuk/regnual).
|
||||||
VBUS voltage. Only after detecting VBUS power, we can enable USB
|
|
||||||
driver (D+/D- lines). For self powered system, driving D+/D- lines
|
|
||||||
(by fixed pull-up resistor) violates the USB specification.
|
|
||||||
|
|
||||||
This driver can be used without Chopstx. Please supply
|
The USB driver was originally written for STM32F103, which USB
|
||||||
-DFREE_STANDING when used without Chopstx. An example can be find
|
hardware design is considered not mature. Modern USB hardware design
|
||||||
in gnuk/regnual.
|
allows crystal-less design, and/or comes with internal 5V->3V3
|
||||||
|
regulator, D+-line pull-up support, and VBUS detection. STM32F103 has
|
||||||
|
nothing.
|
||||||
|
|
||||||
|
To support self powered system, we need to define a hardware interface
|
||||||
|
for a board detecting VBUS voltage. Only after detecting VBUS power,
|
||||||
|
we can enable USB driver (D+/D- lines). For self powered system,
|
||||||
|
driving D+/D- lines by fixed pull-up resistor violates the USB
|
||||||
|
specification.
|
||||||
|
|
||||||
|
With STM32F103, there is a common hardware practice having a
|
||||||
|
gate/transistor for pull-up D+ line. If it also supports detecting
|
||||||
|
VBUS, self powerd system can be supported with the gate/transistor.
|
||||||
|
|
||||||
|
Such a gate/transistor can be also used for the board to ask
|
||||||
|
re-enumeration of USB device. Asking re-enumeration, it is enough to
|
||||||
|
have SE0 (Single-Ended Zero) state.
|
||||||
|
|
||||||
|
The USB driver doesn't touch such a gate/transistor. By gpio_init,
|
||||||
|
the D+-line should be asserted, USB D+ and D- lines should be drived
|
||||||
|
to 0 (SE0). When the USB module is enabled, it goes into J and K
|
||||||
|
state (from SE0 state).
|
||||||
|
|||||||
@@ -29,14 +29,6 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifdef USE_SYS
|
|
||||||
#include "sys-stm32f103.h"
|
|
||||||
#else
|
|
||||||
# ifdef FREE_STANDING
|
|
||||||
# error "Please compile with -DUSE_SYS"
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "stm32f103.h"
|
#include "stm32f103.h"
|
||||||
#include "usb_lld.h"
|
#include "usb_lld.h"
|
||||||
#include "usb_lld_driver.h"
|
#include "usb_lld_driver.h"
|
||||||
@@ -123,9 +115,6 @@ usb_lld_shutdown_chip_specific (void)
|
|||||||
{
|
{
|
||||||
RCC->APB1ENR &= ~RCC_APB1ENR_USBEN;
|
RCC->APB1ENR &= ~RCC_APB1ENR_USBEN;
|
||||||
RCC->APB1RSTR = RCC_APB1RSTR_USBRST;
|
RCC->APB1RSTR = RCC_APB1RSTR_USBRST;
|
||||||
#ifdef USE_SYS
|
|
||||||
usb_lld_sys_shutdown ();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -149,10 +138,6 @@ usb_lld_init_chip_specific (void)
|
|||||||
wait (5*MHZ);
|
wait (5*MHZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_SYS
|
|
||||||
usb_lld_sys_init ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((RCC->APB1ENR & RCC_APB1ENR_USBEN) == 0)
|
if ((RCC->APB1ENR & RCC_APB1ENR_USBEN) == 0)
|
||||||
{
|
{
|
||||||
RCC->APB1ENR |= RCC_APB1ENR_USBEN;
|
RCC->APB1ENR |= RCC_APB1ENR_USBEN;
|
||||||
|
|||||||
@@ -29,10 +29,6 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifdef USE_SYS
|
|
||||||
#include "sys-stm32l4.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <mcu/stm32l.h>
|
#include <mcu/stm32l.h>
|
||||||
#include "usb_lld.h"
|
#include "usb_lld.h"
|
||||||
#include "usb_lld_driver.h"
|
#include "usb_lld_driver.h"
|
||||||
@@ -120,9 +116,6 @@ usb_lld_shutdown_chip_specific (void)
|
|||||||
USB_STM32L4->BCDR &= 0x7fff; /* DP disable */
|
USB_STM32L4->BCDR &= 0x7fff; /* DP disable */
|
||||||
RCC->APB1ENR1 &= ~(RCC_APB1_1_USB | RCC_APB1_1_CRS);
|
RCC->APB1ENR1 &= ~(RCC_APB1_1_USB | RCC_APB1_1_CRS);
|
||||||
RCC->APB1RSTR1 |= (RCC_APB1_1_USB | RCC_APB1_1_CRS);
|
RCC->APB1RSTR1 |= (RCC_APB1_1_USB | RCC_APB1_1_CRS);
|
||||||
#ifdef USE_SYS
|
|
||||||
usb_lld_sys_shutdown ();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -158,10 +151,6 @@ usb_lld_init_chip_specific (void)
|
|||||||
wait (5*MHZ);
|
wait (5*MHZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_SYS
|
|
||||||
usb_lld_sys_init ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Enable USB clock and CRC clock */
|
/* Enable USB clock and CRC clock */
|
||||||
RCC->APB1ENR1 |= (RCC_APB1_1_USB | RCC_APB1_1_CRS);
|
RCC->APB1ENR1 |= (RCC_APB1_1_USB | RCC_APB1_1_CRS);
|
||||||
RCC->APB1RSTR1 = (RCC_APB1_1_USB | RCC_APB1_1_CRS);
|
RCC->APB1RSTR1 = (RCC_APB1_1_USB | RCC_APB1_1_CRS);
|
||||||
|
|||||||
Reference in New Issue
Block a user