Mercurial > nand-ecoscentric
changeset 3053:9843108eda9d
* doc/sgml/doclist: Add USB mass storage documentation.
* packages/io/usb/msd/slave/current/doc/usbs_msd.sgml: New documentation file.
* packages/io/usb/msd/slave/current/cdl/usbs_msd.cdl: Reference per-package
documentation.
| author | jld |
|---|---|
| date | Sat, 13 Nov 2010 11:57:21 +0000 |
| parents | faa94c77900c |
| children | 0870333f7ba8 |
| files | doc/ChangeLog doc/sgml/doclist packages/io/usb/msd/slave/current/ChangeLog packages/io/usb/msd/slave/current/cdl/usbs_msd.cdl packages/io/usb/msd/slave/current/doc/usbs_msd.sgml |
| diffstat | 5 files changed, 289 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2010-11-13 John Dallaway <john@dallaway.org.uk> + + * sgml/doclist: Add USB mass storage documentation. + 2010-02-25 John Dallaway <john@dallaway.org.uk> * sgml/makemakefile: Update copyright dates.
--- a/doc/sgml/doclist +++ b/doc/sgml/doclist @@ -41,6 +41,7 @@ services/power/common/current/doc/power. io/usb/slave/current/doc/usbs.sgml io/usb/eth/slave/current/doc/usbseth.sgml io/usb/serial/slave/current/doc/usbs_serial.sgml +io/usb/msd/slave/current/doc/usbs_msd.sgml hal/synth/arch/current/doc/synth.sgml hal/m68k/arch/current/doc/m68k.sgml hal/m68k/mcf52xx/var/current/doc/mcf52xx.sgml
--- a/packages/io/usb/msd/slave/current/ChangeLog +++ b/packages/io/usb/msd/slave/current/ChangeLog @@ -1,3 +1,11 @@ +2010-11-13 John Dallaway <john@dallaway.org.uk> + + * cdl/usbs_msd.cdl: Reference per-package documentation. + +2010-11-13 Christophe Coutand <ccoutand@stmi.com> + + * doc/usbs_msd.sgml: Added package documentation + 2010-11-12 Christophe Coutand <ccoutand@stmi.com> *include/usbs_msd_opcode.h
--- a/packages/io/usb/msd/slave/current/cdl/usbs_msd.cdl +++ b/packages/io/usb/msd/slave/current/cdl/usbs_msd.cdl @@ -52,6 +52,7 @@ cdl_package CYGPKG_IO_USB_SLAVE_MSD { display "USB slave mass storage support" include_dir "cyg/io/usb" parent CYGPKG_IO_USB_SLAVE + doc ref/io-usb-slave-msd.html requires { CYGPKG_KERNEL } requires { CYGPKG_IO_DISK }
new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/doc/usbs_msd.sgml @@ -0,0 +1,275 @@ +<!-- DOCTYPE reference PUBLIC "-//OASIS//DTD DocBook V3.1//EN" --> + +<!-- {{{ Banner --> + +<!-- =============================================================== --> +<!-- --> +<!-- usbs_msd.sgml --> +<!-- --> +<!-- USB slave-side Mass Storage Support package. --> +<!-- --> +<!-- =============================================================== --> +<!-- ####ECOSDOCCOPYRIGHTBEGIN#### --> +<!-- =============================================================== --> +<!-- Copyright (C) 2010 Free Software Foundation, Inc. --> +<!-- This material may be distributed only subject to the terms --> +<!-- and conditions set forth in the Open Publication License, v1.0 --> +<!-- or later (the latest version is presently available at --> +<!-- http://www.opencontent.org/openpub/) --> +<!-- Distribution of the work or derivative of the work in any --> +<!-- standard (paper) book form is prohibited unless prior --> +<!-- permission obtained from the copyright holder --> +<!-- =============================================================== --> +<!-- ####ECOSDOCCOPYRIGHTEND#### --> +<!-- =============================================================== --> +<!-- #####DESCRIPTIONBEGIN#### --> +<!-- --> +<!-- Author(s): ccoutand --> +<!-- Contact(s): --> +<!-- Date: 2010/11/13 --> +<!-- Version: 0.01 --> +<!-- --> +<!-- ####DESCRIPTIONEND#### --> +<!-- =============================================================== --> + +<!-- }}} --> + +<part id="io-usb-slave-msd"> + <!-- reference id="io-usb-slave-msd" --> + <title>eCos Support for USB Mass Storage Peripherals</title> + + <!-- {{{ Intro --> + + <refentry id="usbs-msd-intro"> + <refmeta> + <refentrytitle>Introduction</refentrytitle> + </refmeta> + <refnamediv> + <refname>Introduction</refname> + <refpurpose> + eCos support for USB Mass Storage Peripherals + </refpurpose> + </refnamediv> + + <refsect1><title>Introduction</title> + <para> + Currently, the eCos USB-Mass Storage Device (MSD) slave package + provides support only for the SCSI transparent command set. The + package flexibility allows future extension for other sub-class, + .i.e. RBC, UFI etc.. + The package requires the actual storage media to use the eCos disk + interface. Disk sector size is assumed 512 bytes. + </para> + <para> + The USB-MSD package is not tied to any specific + hardware. It requires the presence of USB hardware on the + target and a suitable device driver to make endpoints + available for this code to use. The configuration system + cannot load the eCos package automatically for specific + targets, in the way that a USB device driver or an ethernet + driver can be loaded automatically. Instead, the package has + to be added explicitly. When using the command line tools this + will involve an operation like the following: + </para> + <screen width=72 format=linespecific> + $ ecosconfig add usbs_msd + </screen> + <para> + Typically, this will automatically cause the USB device driver + to become active. The USB-Mass Storage Device driver runs as a + thread, therefore requires the kernel package to be active. To + start the MSD interface, user must call the <literal>usbs_msd_start()</literal> + function. No other user intervention is required. + The MSD driver will interact directly with the storage media. + Care should be taken not to mount/use the filesystem present on + the media while used as a mass storage. This could potentially + damage the filesystem. + </para> + </refsect1> + </refentry> + + <!-- }}} --> + <!-- {{{ Config --> + + <refentry id="usbs-msd-config"> + <refmeta> + <refentrytitle>Configuration</refentrytitle> + </refmeta> + <refnamediv> + <refname>Configuration</refname> + <refpurpose>Configuration USB Mass Storage Peripherals</refpurpose> + </refnamediv> + + <refsect1><title>Configuration</title> + <para> + The USB Mass Storage Device interface uses the bulk transfer mode. It needs + three endpoints for the communication with the host to be complete. + The control endpoint (commonly EP0), the transmission and reception + endpoints. The default CDL file contains configuration for + the USB-Mass Storage Device 0. While it is uncommon to have several USB + ports on a device, it is not impossible, hence user can update the package and + create a second device .e.g. MSD1. + </para> + + <refsect2><title>Endpoints</title> + <para> + Each endpoint shall be configured according to the underlying hardware. + The endpoints configuration includes, the structure name, endpoint number + and buffer size according to the USB chip specification. + + The control endpoint is selected with + <literal>CYGDAT_IO_USB_SLAVE_MSD0_EP0</literal>. + The default values is set to <literal>"usbs_at91_ep0"</literal>. This is the control + endpoint for the Atmel AT91 USB device driver. + + The TX and RX endpoints can be assigned statically or dynamically (assuming the USB + device driver supports it). In case of static configuration, the bulk IN and bulk OUT + endpoints are configured with <literal>CYGDAT_IO_USB_SLAVE_MSD0_TX_EP</literal> + and <literal>CYGDAT_IO_USB_SLAVE_MSD0_RX_EP</literal> respectively. + + In addition, the TX and RX enpoints number must be provided by the user. + They are configured with <literal>CYGNUM_IO_USB_SLAVE_MSD0_TX_EP_NUM</literal> + and <literal>CYGNUM_IO_USB_SLAVE_MSD0_RX_EP_NUM</literal> + + In case of dynamic endpoints configuration, only the endpoint number is mandatory. + </para> + + <para> + The last endpoints configuration parameters are the entpoints buffer size. They are set with: + <programlisting> + CYGNUM_IO_USB_SLAVE_MSD0_EP0_MAX_PACKET_SIZE + CYGNUM_IO_USB_SLAVE_MSD0_TX_EP_MAX_PACKET_SIZE + CYGNUM_IO_USB_SLAVE_MSD0_RX_EP_MAX_PACKET_SIZE + </programlisting> + A mass storage device must stall one or both bulk endpoints in + several situations. However, not all eCos USB device drivers seems + to implement this functionality correctly. Hence, this option is + disable by default. Testing shows that both Linux and Windows can + handle mass storage device with stall disable as long as all data transfer phase + are handled correctly. Enpoint stall can be enable with + <literal>CYGSEM_IO_USB_SLAVE_MSD_STALL_ENABLE</literal>. + </para> + </refsect2> + <refsect2><title>Enumeration</title> + <para> + The USB MSD device will make its vendor:product ID known to + the host. This should be configured + with <literal>CYGNUM_IO_USB_SLAVE_MSD0_VENDOR_ID</literal> and + <literal>CYGNUM_IO_USB_SLAVE_MSD0_PRODUCT_ID</literal> NOTE: + The default configurations are not valid for commercial products, but + should work for testing. + </para> + <para> + The USB enumeration also contains text strings to describe the + device. The manufacturer string can be set with + <literal>CYGDAT_IO_USB_SLAVE_MSD0_MFG_STR</literal>. The product name + can be set with <literal>CYGDAT_IO_USB_SLAVE_MSD0_MFG_STR</literal>, + finally, the serial number can be set + with <literal>CYGDAT_IO_USB_SLAVE_MSD0_SERIAL_STR</literal>. + </para> + </refsect2> + <refsect2><title>Storage</title> + <para> + To access the storage media, the USB MSD package requires the storage + media to use the eCos disk interface. The disk sector size is assumed + to be 512 bytes. Multiple logical units are supported by the package + (2 by default). + More logical units can be supported by changing the + <literal>USBS_MSD_CBW_MAX_LUN</literal> definition according + to the user needs. Two logical units can be either 2 partitions on the same + disk or 2 partitions on 2 different physical disks. + The first logical unit can be set with + <literal>CYGDAT_IO_USB_SLAVE_MSD0_LUN0_NAME</literal>. The default value + is assigned to <literal>"/dev/ramdisk0/1"</literal>, the first partition of the ramdisk + used by the test application. + </para> + </refsect2> + </refsect1> + </refentry> + + <!-- }}} --> + <!-- {{{ Host Config --> + + <refentry id="usbs-msd-host-config"> + <refmeta> + <refentrytitle>Host Configuration</refentrytitle> + </refmeta> + <refnamediv> + <refname>Host Configuration</refname> + <refpurpose>Host Configuration for USB Mass Storage like Peripherals + </refpurpose> + </refnamediv> + + <refsect1> + <title>Host Configuration</title> + <para> + With modern host operating system, no specific configuration of the + host shall be required to bring up the eCos USB-Mass Storage Device. + </para> + <refsect2><title>SCSI command set</title> + <para> + The USB-Mass Storage device will respond to a set of SCSI commands: + <programlisting> + INQUIRY + READ_CAPACITY + READ_10 + WRITE_10 + REQUEST_SENSE + TEST_UNIT_READY + </programlisting> + and partially to the commands: + <programlisting> + SENSE_6 + VERIFY_10 + REVENT_ALLOW_MEDIUM_REMOVAL + </programlisting> + </para> + </refsect2> + </refsect1> + </refentry> + + <!-- }}} --> + <!-- {{{ Using --> + + <refentry id="usbs-msd-using"> + <refmeta> + <refentrytitle>Example</refentrytitle> + </refmeta> + <refnamediv> + <refname>Example</refname> + <refpurpose>Example for USB Mass Storage like Peripherals + </refpurpose> + </refnamediv> + <refsect1> + <title>RAM disk</title> + <para> + The "ram disk" is a test application supplied to verify / debug the USB-Mass Storage + package. The minimal functionality of this test case is to create a tiny "ram disk" + device large of around 32 sectors of 512 bytes each. The disk devtab entry + is <literal>"/dev/ramdisk0"</literal>. A FAT12 filesystem is created on top of it + as the first partition of the disk. The partition is therefore accessible from + <literal>"/dev/ramdisk0/1"</literal>. The default behavior of the application is to + start the USB MSD thread. Once plugged into the host machine, an empty drive + called eCos-3.0 shall appear in the host explorer. + To test further, the FAT filesystem package can be included while compiling the test + application. If included, before the MSD driver is started, the application will + create 2 files (fee and foo) and 1 directory (bar) in the filesystem. Both files and + directory shall appear in the host explorer. + </para> + <refsect2><title>Configuration</title> + <para> + The test application was primarly tested with the AT91 architecture. The control + endpoint is set to <literal>"usbs_at91_ep0"</literal> and the buffer size + to 8 bytes. + The TX endpoint is set to <literal>"usbs_at91_ep1"</literal> and the buffer size + to 64 bytes (with Tx (USB IN) endpoint number set to 1). + The RX endpoint is set to <literal>"usbs_at91_ep2"</literal> and the buffer size + to 64 bytes (with Rx (USB OUT) endpoint number set to 2). + </para> + </refsect2> + </refsect1> + </refentry> + + <!-- }}} --> +</part> +<!-- /reference -->
