Просмотр исходного кода

clean up things, add makefile for host example

hathach 5 лет назад
Родитель
Сommit
4a3a448340

+ 22 - 0
examples/host/cdc_msc_hid/Makefile

@@ -0,0 +1,22 @@
+include ../../../tools/top.mk
+include ../../make.mk
+
+INC += \
+	src \
+	$(TOP)/hw \
+
+# Example source
+EXAMPLE_SOURCE += $(wildcard src/*.c)
+SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE))
+
+
+# TinyUSB Host Stack source
+SRC_C += \
+	src/host/usbh.c \
+	src/host/hub.c \
+	src/host/ehci/ehci.c \
+	src/class/cdc/cdc_host.c \
+	src/host/ehci/ehci.c \
+	src/portable/nxp/lpc18_43/hcd_lpc18_43.c
+
+include ../../rules.mk

+ 13 - 8
examples/host/cdc_msc_hid/ses/lpc18xx/lpc18xx.emProject

@@ -17,8 +17,8 @@
       arm_target_debug_interface_type="ADIv5"
       arm_target_device_name="LPC1857"
       arm_target_interface_type="SWD"
-      c_preprocessor_definitions="LPC18xx;__LPC1800_FAMILY;__LPC185x_SUBFAMILY;ARM_MATH_CM3;FLASH_PLACEMENT=1;CORE_M3;BOARD_MCB1800;CFG_TUSB_MCU=OPT_MCU_LPC18XX;CFG_TUSB_MEM_SECTION= __attribute__((section(".bss2")))"
-      c_user_include_directories="../../src;$(rootDir)/hw;$(rootDir)/src;$(lpcDir)//inc;$(lpcDir)//inc/config_18xx"
+      c_preprocessor_definitions="LPC18xx;__LPC1800_FAMILY;__LPC185x_SUBFAMILY;ARM_MATH_CM3;FLASH_PLACEMENT=1;CORE_M3;BOARD_MCB1800;CFG_TUSB_MCU=OPT_MCU_LPC18XX;CFG_TUSB_MEM_SECTION= __attribute__((section(".bss2")));CFG_TUSB_DEBUG=2"
+      c_user_include_directories="../../src;$(rootDir)/hw;$(rootDir)/src;$(lpcDir)//inc;$(lpcDir)//inc/config_18xx;$(rootDir)/lib/SEGGER_RTT/RTT"
       debug_register_definition_file="$(ProjectDir)/LPC18xx_Registers.xml"
       debug_target_connection="J-Link"
       gcc_entry_point="Reset_Handler"
@@ -101,12 +101,6 @@
         </folder>
       </folder>
     </folder>
-    <folder
-      Name="segger_rtt"
-      exclude=""
-      filter="*.c;*.h"
-      path="../../../../../lib/segger_rtt"
-      recurse="No" />
     <folder
       Name="src"
       exclude=""
@@ -119,6 +113,17 @@
       filter="*.c;*.h"
       path="../../../../../src"
       recurse="Yes" />
+    <folder Name="lib">
+      <folder Name="SEGGER_RTT">
+        <folder Name="RTT">
+          <file file_name="../../../../../lib/SEGGER_RTT/RTT/SEGGER_RTT.c" />
+          <file file_name="../../../../../lib/SEGGER_RTT/RTT/SEGGER_RTT_printf.c" />
+        </folder>
+        <folder Name="Syscalls">
+          <file file_name="../../../../../lib/SEGGER_RTT/Syscalls/SEGGER_RTT_Syscalls_SES.c" />
+        </folder>
+      </folder>
+    </folder>
   </project>
   <configuration
     Name="MCB1800"

+ 12 - 7
examples/host/cdc_msc_hid/ses/lpc43xx/lpc43xx.emProject

@@ -20,7 +20,7 @@
       arm_target_interface_type="SWD"
       build_treat_warnings_as_errors="No"
       c_preprocessor_definitions="CORE_M4;__LPC4300_FAMILY;__LPC435x_SUBFAMILY;ARM_MATH_CM4;FLASH_PLACEMENT=1;BOARD_EA4357;CFG_TUSB_MCU=OPT_MCU_LPC43XX;CFG_TUSB_MEM_SECTION= __attribute__((section(&quot;.bss2&quot;)))"
-      c_user_include_directories="../../src;$(rootDir)/hw;$(rootDir)/src;$(lpcDir)//inc;$(lpcDir)//inc/config_43xx"
+      c_user_include_directories="../../src;$(rootDir)/hw;$(rootDir)/src;$(lpcDir)//inc;$(rootDir)/lib/SEGGER_RTT/RTT;$(lpcDir)//inc/config_43xx"
       debug_register_definition_file="LPC43xx_Registers.xml"
       debug_target_connection="J-Link"
       gcc_enable_all_warnings="Yes"
@@ -122,11 +122,16 @@
       <file file_name="LPC43xx_Vectors.s" />
       <file file_name="thumb_crt0.s" />
     </folder>
-    <folder
-      Name="segger_rtt"
-      exclude=""
-      filter="*.c;*.h"
-      path="../../../../../lib/segger_rtt"
-      recurse="No" />
+    <folder Name="lib">
+      <folder Name="SEGGER_RTT">
+        <folder Name="RTT">
+          <file file_name="../../../../../lib/SEGGER_RTT/RTT/SEGGER_RTT.c" />
+          <file file_name="../../../../../lib/SEGGER_RTT/RTT/SEGGER_RTT_printf.c" />
+        </folder>
+        <folder Name="Syscalls">
+          <file file_name="../../../../../lib/SEGGER_RTT/Syscalls/SEGGER_RTT_Syscalls_SES.c" />
+        </folder>
+      </folder>
+    </folder>
   </project>
 </solution>

+ 1 - 1
examples/host/cdc_msc_hid/src/main.c

@@ -193,7 +193,7 @@ void print_greeting(void)
   printf("- issue at https://github.com/hathach/tinyusb\n");
   printf("--------------------------------------------------------------------\n\n");
 
-  printf("This Host demo is configured to support:");
+  printf("This Host demo is configured to support:\r\n");
   printf("  - RTOS = %s\n", rtos_name[CFG_TUSB_OS]);
 //  if (CFG_TUH_CDC          ) puts("  - Communication Device Class");
 //  if (CFG_TUH_MSC          ) puts("  - Mass Storage");

+ 1 - 14
examples/host/cdc_msc_hid/src/tusb_config.h

@@ -75,23 +75,10 @@
 #define CFG_TUH_HID_MOUSE           0
 #define CFG_TUSB_HOST_HID_GENERIC   0 // (not yet supported)
 #define CFG_TUH_MSC                 0
+#define CFG_TUH_VENDOR              0
 
 #define CFG_TUSB_HOST_DEVICE_MAX    (CFG_TUH_HUB ? 5 : 1) // normal hub has 4 ports
 
-//------------- CLASS -------------//
-#define CFG_TUD_CDC                 0
-#define CFG_TUD_MSC                 0
-#define CFG_TUD_HID                 0
-#define CFG_TUD_VENDOR              0
-
-// CDC FIFO size of TX and RX
-#define CFG_TUD_CDC_RX_BUFSIZE      64
-#define CFG_TUD_CDC_TX_BUFSIZE      64
-
-// MSC Buffer size of Device Mass storage
-#define CFG_TUD_MSC_BUFSIZE         512
-
-
 #ifdef __cplusplus
  }
 #endif

+ 10 - 5
hw/bsp/ea4357/ea4357.c

@@ -63,7 +63,7 @@ const uint32_t ExtRateIn = 0;
 
 static const PINMUX_GRP_T pinmuxing[] =
 {
-  // Button
+  // Button ( Joystick down )
   {0x9, 1,  (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLUP)},
 
   // UART
@@ -139,21 +139,26 @@ void board_init(void)
     USBMODE_VBUS_HIGH = 1
   };
 
-  /* USB0
-   * For USB0 Device operation:
-   * - insert jumpers in position 1-2 in JP17/JP18/JP19.
+  /* From EA4357 user manual
+   *
+   * USB0 Device operation:
+   * - Insert jumpers in position 1-2 in JP17/JP18/JP19.
    * - GPIO28 controls USB connect functionality
    * - LED32 lights when the USB Device is connected. SJ4 has pads 1-2 shorted by default.
    * - LED33 is controlled by GPIO27 and signals USB-up state. GPIO54 is used for VBUS
    * sensing.
    *
-   * For USB0 Host operation:
+   * USB0 Host operation:
    * - insert jumpers in position 2-3 in JP17/JP18/JP19.
    * - USB Host power is controlled via distribution switch U20 (found in schematic page 11).
    * - Signal GPIO26 is active low and enables +5V on VBUS2.
    * - LED35 light whenever +5V is present on VBUS2.
    * - GPIO55 is connected to status feedback from the distribution switch.
    * - GPIO54 is used for VBUS sensing. 15Kohm pull-down resistors are always active
+   *
+   * Note:
+   * - Insert jumpers in position 2-3 in JP17/JP18/JP19
+   * - Insert jumpers in JP31 (OTG)
    */
 #if CFG_TUSB_RHPORT0_MODE
   Chip_USB0_Init();

+ 38 - 39
hw/bsp/mcb1800/mcb1800.c

@@ -76,30 +76,27 @@ const uint32_t ExtRateIn = 0;
 
 static const PINMUX_GRP_T pinmuxing[] =
 {
-	// LEDs
-	{0xD, 10, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)},
-	{0xD, 11, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN)},
-	{0xD, 12, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN)},
-	{0xD, 13, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN)},
-	{0xD, 14, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN)},
-	{0x9, 0,  (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLDOWN)},
-	{0x9, 1,  (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLDOWN)},
-	{0x9, 2,  (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLDOWN)},
-
-	// Button
-	{0x4, 0,  (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLUP)},
-
-	// UART
-	{UART_PORT, UART_PIN_TX, SCU_MODE_PULLDOWN | SCU_MODE_FUNC2 },
-	{UART_PORT, UART_PIN_RX, SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC2 },
-
-	/*  I2S  */
-	{0x3, 0,  (SCU_PINIO_FAST | SCU_MODE_FUNC2)},
-	{0x6, 0,  (SCU_PINIO_FAST | SCU_MODE_FUNC4)},
-	{0x7, 2,  (SCU_PINIO_FAST | SCU_MODE_FUNC2)},
-	{0x6, 2,  (SCU_PINIO_FAST | SCU_MODE_FUNC3)},
-	{0x7, 1,  (SCU_PINIO_FAST | SCU_MODE_FUNC2)},
-	{0x6, 1,  (SCU_PINIO_FAST | SCU_MODE_FUNC3)},
+  // LEDs
+  { 0xD, 10, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4) },
+  { 0xD, 11, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN) },
+  { 0xD, 12, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN) },
+  { 0xD, 13, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN) },
+  { 0xD, 14, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN) },
+  { 0x9, 0, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLDOWN) },
+  { 0x9, 1, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLDOWN) },
+  { 0x9, 2, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLDOWN) },
+
+  // Button
+  { 0x4, 0, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLUP) },
+
+  // UART
+  { UART_PORT, UART_PIN_TX, SCU_MODE_PULLDOWN | SCU_MODE_FUNC2 },
+  { UART_PORT, UART_PIN_RX, SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC2 },
+
+  // USB
+  { 0x9, 5, SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2 },			// P9_5 USB1_VBUS_EN, USB1 VBus function
+  { 0x2, 5, SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC2 },    // P2_5 USB1_VBUS, MUST CONFIGURE THIS SIGNAL FOR USB1 NORMAL OPERATION */
+  { 0x6, 3, SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC1 }			// P6_3 USB0_PWR_EN, USB0 VBus function
 };
 
 /* Pin clock mux values, re-used structure, value in first index is meaningless */
@@ -147,10 +144,10 @@ void board_init(void)
   Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, BUTTON_PORT, BUTTON_PIN);
 
   //------------- UART -------------//
-	Chip_UART_Init(UART_DEV);
-	Chip_UART_SetBaud(UART_DEV, CFG_BOARD_UART_BAUDRATE);
-	Chip_UART_ConfigData(UART_DEV, UART_LCR_WLEN8 | UART_LCR_SBS_1BIT | UART_LCR_PARITY_DIS);
-	Chip_UART_TXEnable(UART_DEV);
+  Chip_UART_Init(UART_DEV);
+  Chip_UART_SetBaud(UART_DEV, CFG_BOARD_UART_BAUDRATE);
+  Chip_UART_ConfigData(UART_DEV, UART_LCR_WLEN8 | UART_LCR_SBS_1BIT | UART_LCR_PARITY_DIS);
+  Chip_UART_TXEnable(UART_DEV);
 
   //------------- USB -------------//
   enum {
@@ -167,17 +164,19 @@ void board_init(void)
 #if CFG_TUSB_RHPORT0_MODE
   Chip_USB0_Init();
 
-//  // Reset controller
-//  LPC_USB0->USBCMD_D |= 0x02;
-//  while( LPC_USB0->USBCMD_D & 0x02 ) {}
-//
-//  // Set mode
-//  #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST
-//    LPC_USB0->USBMODE_H = USBMODE_HOST | (USBMODE_VBUS_HIGH << 5);
-//  #else // TODO OTG
-//    LPC_USB0->USBMODE_D = USBMODE_DEVICE;
-//    LPC_USB0->OTGSC = (1<<3) | (1<<0) /*| (1<<16)| (1<<24)| (1<<25)| (1<<26)| (1<<27)| (1<<28)| (1<<29)| (1<<30)*/;
-//  #endif
+  // Host/Device mode can only be set right after controller reset
+  LPC_USB0->USBCMD_D |= 0x02;
+  while( LPC_USB0->USBCMD_D & 0x02 ) {}
+
+  // Set mode
+  #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST
+    LPC_USB0->USBMODE_H = USBMODE_HOST | (USBMODE_VBUS_HIGH << 5);
+
+    LPC_USB0->PORTSC1_D |= (1<<24); // FIXME force full speed for debugging
+  #else // TODO OTG
+    LPC_USB0->USBMODE_D = USBMODE_DEVICE;
+    LPC_USB0->OTGSC = (1<<3) | (1<<0) /*| (1<<16)| (1<<24)| (1<<25)| (1<<26)| (1<<27)| (1<<28)| (1<<29)| (1<<30)*/;
+  #endif
 #endif
 
   // USB1

+ 0 - 1
src/class/cdc/cdc_host.c

@@ -86,7 +86,6 @@ bool tuh_cdc_serial_is_mounted(uint8_t dev_addr)
 {
   // TODO consider all AT Command as serial candidate
   return tuh_cdc_mounted(dev_addr)                                         &&
-      (CDC_COMM_PROTOCOL_NONE <= cdch_data[dev_addr-1].itf_protocol) &&
       (cdch_data[dev_addr-1].itf_protocol <= CDC_COMM_PROTOCOL_ATCOMMAND_CDMA);
 }
 

+ 4 - 2
src/host/ehci/ehci.c

@@ -358,7 +358,7 @@ bool hcd_edpt_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_endpoint_t const
   if ( dev_addr == 0 ) return true;
 
   // Insert to list
-  ehci_link_t * list_head;
+  ehci_link_t * list_head = NULL;
 
   switch (ep_desc->bmAttributes.xfer)
   {
@@ -378,8 +378,10 @@ bool hcd_edpt_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_endpoint_t const
     default: break;
   }
 
+  TU_ASSERT(list_head);
+
   // TODO might need to disable async/period list
-  list_insert( list_head, (ehci_link_t*) p_qhd, EHCI_QTYPE_QHD);
+  list_insert(list_head, (ehci_link_t*) p_qhd, EHCI_QTYPE_QHD);
 
   return true;
 }

+ 6 - 4
test/test/support/tusb_config.h

@@ -43,10 +43,12 @@
   #define CFG_TUSB_MCU  OPT_MCU_NRF5X
 #endif
 
-#if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX
-#define CFG_TUSB_RHPORT0_MODE    (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED)
-#else
-#define CFG_TUSB_RHPORT0_MODE    OPT_MODE_DEVICE
+#ifndef CFG_TUSB_RHPORT0_MODE
+  #if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX
+  #define CFG_TUSB_RHPORT0_MODE    (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED)
+  #else
+  #define CFG_TUSB_RHPORT0_MODE    OPT_MODE_DEVICE
+  #endif
 #endif
 
 #define CFG_TUSB_OS              OPT_OS_NONE