diff --git a/docs/helios64/img/usb/dual_usb_device_linux.png b/docs/helios64/img/usb/dual_usb_device_linux.png new file mode 100644 index 0000000..afb91cf Binary files /dev/null and b/docs/helios64/img/usb/dual_usb_device_linux.png differ diff --git a/docs/helios64/img/usb/dual_usb_device_windows.png b/docs/helios64/img/usb/dual_usb_device_windows.png new file mode 100644 index 0000000..a132971 Binary files /dev/null and b/docs/helios64/img/usb/dual_usb_device_windows.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_lsusb_tree.png b/docs/helios64/img/usb/linux_gadget_das_lsusb_tree.png new file mode 100644 index 0000000..b657bd9 Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_lsusb_tree.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_lsusb_tree_raid.png b/docs/helios64/img/usb/linux_gadget_das_lsusb_tree_raid.png new file mode 100644 index 0000000..4465243 Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_lsusb_tree_raid.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_thunar_5_drive.png b/docs/helios64/img/usb/linux_gadget_das_thunar_5_drive.png new file mode 100644 index 0000000..e2083c6 Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_thunar_5_drive.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_thunar_raid.png b/docs/helios64/img/usb/linux_gadget_das_thunar_raid.png new file mode 100644 index 0000000..9072895 Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_thunar_raid.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_usbview.png b/docs/helios64/img/usb/linux_gadget_das_usbview.png new file mode 100644 index 0000000..5c10128 Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_usbview.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_usbview_raid.png b/docs/helios64/img/usb/linux_gadget_das_usbview_raid.png new file mode 100644 index 0000000..79f3217 Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_usbview_raid.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_windows_device_manager.png b/docs/helios64/img/usb/linux_gadget_das_windows_device_manager.png new file mode 100644 index 0000000..ce5f9d3 Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_windows_device_manager.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_windows_device_manager_raid.png b/docs/helios64/img/usb/linux_gadget_das_windows_device_manager_raid.png new file mode 100755 index 0000000..60f1006 Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_windows_device_manager_raid.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_windows_diskmgmt.png b/docs/helios64/img/usb/linux_gadget_das_windows_diskmgmt.png new file mode 100755 index 0000000..8a7b1b5 Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_windows_diskmgmt.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_windows_diskmgmt_raid.png b/docs/helios64/img/usb/linux_gadget_das_windows_diskmgmt_raid.png new file mode 100755 index 0000000..8a75880 Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_windows_diskmgmt_raid.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_windows_usbtreeview.png b/docs/helios64/img/usb/linux_gadget_das_windows_usbtreeview.png new file mode 100755 index 0000000..5549fb5 Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_windows_usbtreeview.png differ diff --git a/docs/helios64/img/usb/linux_gadget_das_windows_usbtreeview_raid.png b/docs/helios64/img/usb/linux_gadget_das_windows_usbtreeview_raid.png new file mode 100755 index 0000000..2fc206e Binary files /dev/null and b/docs/helios64/img/usb/linux_gadget_das_windows_usbtreeview_raid.png differ diff --git a/docs/helios64/img/usb/otb_cable_usb_c.jpg b/docs/helios64/img/usb/otg_cable_usb_c.jpg similarity index 100% rename from docs/helios64/img/usb/otb_cable_usb_c.jpg rename to docs/helios64/img/usb/otg_cable_usb_c.jpg diff --git a/docs/helios64/img/usb/typec_dp_cable.jpg b/docs/helios64/img/usb/typec_dp_cable.jpg new file mode 100644 index 0000000..6ce5b0b Binary files /dev/null and b/docs/helios64/img/usb/typec_dp_cable.jpg differ diff --git a/docs/helios64/img/usb/typec_hdmi_usb_dongle.jpg b/docs/helios64/img/usb/typec_hdmi_usb_dongle.jpg new file mode 100644 index 0000000..56422f5 Binary files /dev/null and b/docs/helios64/img/usb/typec_hdmi_usb_dongle.jpg differ diff --git a/docs/helios64/img/usb/usb_diagram.png b/docs/helios64/img/usb/usb_diagram.png index 5ece80d..6eb45cc 100644 Binary files a/docs/helios64/img/usb/usb_diagram.png and b/docs/helios64/img/usb/usb_diagram.png differ diff --git a/docs/helios64/img/usb/usb_mux.png b/docs/helios64/img/usb/usb_mux.png index 69c182d..0d1c5e1 100644 Binary files a/docs/helios64/img/usb/usb_mux.png and b/docs/helios64/img/usb/usb_mux.png differ diff --git a/docs/helios64/usb.md b/docs/helios64/usb.md index 8b7a165..bb94dc0 100644 --- a/docs/helios64/usb.md +++ b/docs/helios64/usb.md @@ -1,18 +1,25 @@ +!!! notice + ***preliminary info*** -## USB on RK3399 -There are two types of USB controller available on RK3399. Each type has two controller so total USB controllers is 4. +There are three types of USB controller available on RK3399. Each type has two controller so total USB controllers is 6. -### Generic EHCI USB 2.0 Controller -There are two controller of this type. This controller is Host only controller that is compatible with USB 2.0 and backward compatible with USB 1.1. +### Generic OHCI USB 1.1 Controller +There are two controller of this type. This controller is Host only controller that is compatible with USB 1.1. Supported speed: -- High Speed (480 Mbps) - - Full Speed (12 Mbps) - Low Speed (1.5 Mbps) +### Generic EHCI USB 2.0 Controller +There are two controller of this type. This controller is Host only controller that is compatible with USB 2.0. The controller shared port with +[Generic OHCI USB 1.1 Controller](#generic-ohci-usb-11-controller) therefore any USB 1.1 device connected to the port, will be automatically +routed to [Generic OHCI USB 1.1 Controller](#generic-ohci-usb-11-controller). +Supported speed: + +- High Speed (480 Mbps) + ### Synopsys DesignWare USB 3.0 Dual-Role Device Controller There are two controller of this type. This controller support On-The-Go /Dual Role which mean it can be configured as Host and also Device. @@ -32,11 +39,11 @@ The controller is connected to Rockchip Type-C PHY. ![!USB Connection](/helios64/img/usb/usb_diagram.png) -One of EHCI Controller is connected to M.2 socket. +One of EHCI Controller (and OHCI Controller) is connected to M.2 socket. -The first Synopsys DesignWare USB 3.0 Dual-Role Device Controller is connected to USB Type-C connector and configured as OTG with help of FUSB302. +The first USB 3.0 Dual-Role Device Controller is connected to USB Type-C connector and configured as OTG with help of [FUSB302](https://www.onsemi.com/products/interfaces/usb-type-c/fusb302). -The second Synopsys DesignWare USB 3.0 Dual-Role Device Controller is connected to USB Hub 3.1 Gen 1 and configured as Host only. +The second USB 3.0 Dual-Role Device Controller is connected to USB Hub 3.1 Gen 1 and configured as Host only. ### Power Budget @@ -52,33 +59,70 @@ Each of external USB port is protected by Power Distribution switch with followi ## USB Type-C Functionality on Helios64 -To simplify the cabling, Helios64 is designed to have +To simplify the cabling, Helios64 is designed to maximize USB Type-C usage. + +Helios64 employ High Speed multiplexer on USB 2.0 signal, by default the USB 2.0 signal is routed to USB Serial console. +The multiplexer can be override using [Jumper](/helios64/hardware/#jumpers) ![!USB Mux](/helios64/img/usb/usb_mux.png) +When Helios64 connected to PC using USB cable, there will be 2 device connected. FTDI FT232 USB Serial on USB 2.0 and Helios64 or +Unknown Device (if USB gadget is not configured yet, see below) on USB 3.0. + +On Windows PC using [USB Device Tree Viewer](https://www.uwe-sieber.de/usbtreeview_e.html) to visualize the USB tree, + +![!USB Tree View dual](/helios64/img/usb/dual_usb_device_windows.png) + +In this case, Helios64 is connected to a USB 3.1 Gen 1 Hub port 1. + +USB Serial Converter (FTDI FT232 USB Serial) connected under port 1 of the USB 2.0 side of the Hub and +RK3399 USB 3.0 (configured as USB Mass Storage Device) connected under port 1 of the USB 3.0 side of the Hub. + +On Linux PC using [USBview](http://www.kroah.com/linux-usb/) to visualize the USB tree, + +![!USBview dual](/helios64/img/usb/dual_usb_device_linux.png) + +In this case, Helios64 is connected to a USB 3.1 Gen 1 Hub port 1. + +FTDI FT232 USB Serial connected under port 1 of the USB 2.0 side of the Hub and +RK3399 USB 3.0 (configured as USB Mass Storage Device) connected under port 1 of the USB 3.0 side of the Hub. + + +!!! info + Every USB hub connected to USB 3.0 port or higher will create a sibling device, USB Hub 2.0, from host point of view. + + USB 2.0 device connected port 1 of the USB 3.0 Hub, it will appear on USB 2.0 Hub port 1. + If USB 3.0 Device connected to same physical port it will appear on USB 3.0 Hub port 1. + ### Serial Console Serial Console of Helios64 is connected to FT232 USB Serial converter and the USB 2.0 signal of the FT232 is connected to USB 2.0 signals of USB Type-C Port. -Refer to ***JUMPER PAGE*** ### DisplayPort Alternate Mode Using USB Type-C to DisplayPort cable or USB Type-C to HDMI dongle, Helios64 can be connected to monitor to display Linux Desktop or other GUI application. -*** Put USB Type-C to DisplayPort cable photo here *** +![!type-c dp cable](/helios64/img/usb/typec_dp_cable.jpg) + +
*USB Type-C to DisplayPort cable*
+ +![!type-c hdmi dongle](/helios64/img/usb/typec_hdmi_usb_dongle.jpg) + +
*USB Type-C to USB 3.0, HDMI and USB Type-C dongle*
-*** Put USB Type-C to HDMI dongle photo here *** !!! note - DisplayPort Alternate Mode is NOT supported on U-Boot. + - DisplayPort Alternate Mode is NOT supported on U-Boot. + + - USB Type-C to HDMI cable might not work if it employ HDMI Alternate Mode ### USB Host Using OTG cable such as, -![!USB-C OTG Cable](/helios64/img/usb/otb_cable_usb_c.jpg) +![!USB-C OTG Cable](/helios64/img/usb/otg_cable_usb_c.jpg) Helios64 can act as USB host and can be connected to various USB device. @@ -104,19 +148,6 @@ This is to serve as a way to (re)install OS to eMMC. ## USB under Linux -### USB Bus Mapping - -| USB Controller | Bus number | Remarks | -|----------------|------------|---------| -| EHCI Host0 | 0 | | -| EHCI Host1 | 1 | | -| DWC3 Typec0 USB 3.0 | 2 | | -| DWC3 Typec0 USB 2.0 | 3 | | -| DWC3 Typec1 USB 3.0 | 4 | | -| DWC3 Typec1 USB 2.0 | 5 | | - ------ ***TBC*** ------ - ### Helios64 as Direct Attached Storage (DAS) device Helios64 can be used as Direct Attached Storage (DAS) device with help of Linux USB Gadget kernel module. @@ -134,28 +165,306 @@ the Windows PC will not be able to read the disk content unless 3rd party softwa #### Individual Disk Exported as Separate Disk ------ ***more info soon*** ----- +To export all SATA disks that has been identified as /dev/sda ... /dev/sde, run the following command on Helios64. ``` -modprobe g_mass_storage file=/dev/sda,/dev/sdb,/dev/sdc,/dev/sdd,/dev/sde +sudo modprobe g_mass_storage file=/dev/sda,/dev/sdb,/dev/sdc,/dev/sdd,/dev/sde iSerialNumber=1234567890 iManufacturer="Kobol Innovations" iProduct=Helios64 ``` ------ *** Put Windows Explorer & Disk management screenshot here *** ----- +The following screenshot, Helios64 connected with 5x 120GB SATA drive. + +***Helios64 connected to PC running Windows*** + +USB device visualization using USB Device Tree Viewer +![!usbtreeview Screenshot](/helios64/img/usb/linux_gadget_das_windows_usbtreeview.png) + +Helios64 in Device Manager +![!device manager Screenshot](/helios64/img/usb/linux_gadget_das_windows_device_manager.png) + +Disks detected under Disk Management +![!disk mgmt Screenshot](/helios64/img/usb/linux_gadget_das_windows_diskmgmt.png) + +***Helios64 connected to PC running Linux*** + +USB device visualization using USBview +![!usbview Screenshot](/helios64/img/usb/linux_gadget_das_usbview.png) + +USB tree using lsusb +![!lsusb tree Screenshot](/helios64/img/usb/linux_gadget_das_lsusb_tree.png) + +``` +$ sudo lsusb -s 2:6 -v + +Bus 002 Device 006: ID 0525:a4a5 Netchip Technology, Inc. Pocketbook Pro 903 +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 3.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 9 + idVendor 0x0525 Netchip Technology, Inc. + idProduct 0xa4a5 Pocketbook Pro 903 + bcdDevice 4.04 + iManufacturer 3 Kobol Innovations + iProduct 4 Helios64 + iSerial 5 1234567890 + bNumConfigurations 1 +OTG Descriptor: + bLength 3 + bDescriptorType 9 + bmAttributes 0x03 + SRP (Session Request Protocol) + HNP (Host Negotiation Protocol) + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 47 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0xe0 + Self Powered + Remote Wakeup + MaxPower 126mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 2 + bInterfaceClass 8 Mass Storage + bInterfaceSubClass 6 SCSI + bInterfaceProtocol 80 Bulk-Only + iInterface 1 Mass Storage + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0400 1x 1024 bytes + bInterval 0 + bMaxBurst 15 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x01 EP 1 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0400 1x 1024 bytes + bInterval 0 + bMaxBurst 15 +Binary Object Store Descriptor: + bLength 5 + bDescriptorType 15 + wTotalLength 22 + bNumDeviceCaps 2 + USB 2.0 Extension Device Capability: + bLength 7 + bDescriptorType 16 + bDevCapabilityType 2 + bmAttributes 0x00000006 + Link Power Management (LPM) Supported + SuperSpeed USB Device Capability: + bLength 10 + bDescriptorType 16 + bDevCapabilityType 3 + bmAttributes 0x00 + wSpeedsSupported 0x000f + Device can operate at Low Speed (1Mbps) + Device can operate at Full Speed (12Mbps) + Device can operate at High Speed (480Mbps) + Device can operate at SuperSpeed (5Gbps) + bFunctionalitySupport 1 + Lowest fully-functional device speed is Full Speed (12Mbps) + bU1DevExitLat 1 micro seconds + bU2DevExitLat 500 micro seconds +Device Status: 0x0000 + (Bus Powered) + +``` + +xfce file manager (thunar) +![!Thunar Screenshot](/helios64/img/usb/linux_gadget_das_thunar_5_drive.png) + +lsblk output: +``` +$ lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +sdc 8:32 0 111,8G 0 disk +└─sdc1 8:33 0 111,8G 0 part +sdd 8:48 0 111,8G 0 disk +└─sdd1 8:49 0 111,8G 0 part +sde 8:64 0 111,8G 0 disk +└─sde1 8:65 0 111,8G 0 part +sdf 8:80 0 111,8G 0 disk +└─sdf1 8:81 0 111,8G 0 part +sdg 8:96 0 111,8G 0 disk +└─sdg1 8:97 0 111,8G 0 part + +$ lsblk -S +NAME HCTL TYPE VENDOR MODEL REV TRAN +sda 0:0:0:0 disk ATA WDC WDS240G2G0B- 0000 sata +sdb 1:0:0:0 disk ATA TOSHIBA MQ04ABF1 0J sata +sdc 2:0:0:0 disk Linux File-Stor Gadget 0404 usb +sdd 2:0:0:1 disk Linux File-Stor Gadget 0404 usb +sde 2:0:0:2 disk Linux File-Stor Gadget 0404 usb +sdf 2:0:0:3 disk Linux File-Stor Gadget 0404 usb +sdg 2:0:0:4 disk Linux File-Stor Gadget 0404 usb +``` ------ *** Put lsusb & lsblk here *** ----- #### RAID device exported as One Disk ------ ***more info soon*** ----- +Assuming the RAID already created and identified as /dev/md/md-raid6, run the following command on Helios64 to export the RAID block device as USB Mass Storage ``` -modprobe g_mass_storage file=/dev/md/md-raid6 +sudo modprobe g_mass_storage file=/dev/md/md-raid6 iManufacturer="Kobol Innovations" iProduct="Helios64" iSerialNumber="1234567890" ``` ------ *** Put Windows Explorer & Disk management screenshot here *** ----- - ------ *** Put lsusb & lsblk here *** ----- +The following screenshot, Helios64 connected with 5x 120GB SATA drive and configured as RAID 6 so total space of the block device is ~360GB (3x 120GB). The block device then formatted with NTFS. +***Helios64 connected to PC running Windows*** + +USB device visualization using USB Device Tree Viewer +![!usbtreeview Screenshot](/helios64/img/usb/linux_gadget_das_windows_usbtreeview_raid.png) + +Helios64 in Device Manager +![!device manager Screenshot](/helios64/img/usb/linux_gadget_das_windows_device_manager_raid.png) + +Disks detected under Disk Management +![!disk mgmt Screenshot](/helios64/img/usb/linux_gadget_das_windows_diskmgmt_raid.png) + +!!! note + Since the block device is formatted with NTFS, Windows can recognize it and assign drive letter E: + +***Helios64 connected to PC running Linux*** + +USB device visualization using USBview +![!usbview Screenshot](/helios64/img/usb/linux_gadget_das_usbview_raid.png) + +USB tree using lsusb +![!lsusb tree Screenshot](/helios64/img/usb/linux_gadget_das_lsusb_tree_raid.png) + +``` +Bus 002 Device 006: ID 0525:a4a5 Netchip Technology, Inc. Pocketbook Pro 903 +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 3.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 9 + idVendor 0x0525 Netchip Technology, Inc. + idProduct 0xa4a5 Pocketbook Pro 903 + bcdDevice 4.04 + iManufacturer 3 Kobol Innovations + iProduct 4 Helios64 + iSerial 5 1234567890 + bNumConfigurations 1 +OTG Descriptor: + bLength 3 + bDescriptorType 9 + bmAttributes 0x03 + SRP (Session Request Protocol) + HNP (Host Negotiation Protocol) + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 47 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0xe0 + Self Powered + Remote Wakeup + MaxPower 126mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 2 + bInterfaceClass 8 Mass Storage + bInterfaceSubClass 6 SCSI + bInterfaceProtocol 80 Bulk-Only + iInterface 1 Mass Storage + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0400 1x 1024 bytes + bInterval 0 + bMaxBurst 15 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x01 EP 1 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0400 1x 1024 bytes + bInterval 0 + bMaxBurst 15 +Binary Object Store Descriptor: + bLength 5 + bDescriptorType 15 + wTotalLength 22 + bNumDeviceCaps 2 + USB 2.0 Extension Device Capability: + bLength 7 + bDescriptorType 16 + bDevCapabilityType 2 + bmAttributes 0x00000006 + Link Power Management (LPM) Supported + SuperSpeed USB Device Capability: + bLength 10 + bDescriptorType 16 + bDevCapabilityType 3 + bmAttributes 0x00 + wSpeedsSupported 0x000f + Device can operate at Low Speed (1Mbps) + Device can operate at Full Speed (12Mbps) + Device can operate at High Speed (480Mbps) + Device can operate at SuperSpeed (5Gbps) + bFunctionalitySupport 1 + Lowest fully-functional device speed is Full Speed (12Mbps) + bU1DevExitLat 1 micro seconds + bU2DevExitLat 500 micro seconds +Device Status: 0x0000 + (Bus Powered) +``` + +xfce file manager (thunar) +![!Thunar Screenshot](/helios64/img/usb/linux_gadget_das_thunar_raid.png) + +lsblk output +``` +$ lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +sdc 8:32 0 335,2G 0 disk +└─sdc1 8:33 0 335,2G 0 part + +$ lsblk -S +NAME HCTL TYPE VENDOR MODEL REV TRAN +sda 0:0:0:0 disk ATA WDC WDS240G2G0B- 0000 sata +sdb 1:0:0:0 disk ATA TOSHIBA MQ04ABF1 0J sata +sdc 2:0:0:0 disk Linux File-Stor Gadget 0404 usb +``` +## References +[1] https://www.kernel.org/doc/html/v5.4/usb/mass-storage.html