Patent Publication Number: US-7721016-B2

Title: Method for using host controller to solicit a command failure from target device in order to initiate re-enumeration of the target device

Description:
FIELD OF INVENTION 
     The present invention relates generally to Universal Serial Bus (USB) devices, and more particularly to a method of initiating device re-enumeration without physical detachment and reattachment of a USB device in relation to a host. 
     BACKGROUND OF THE INVENTION 
     Removable Universal Serial Bus (USB) data storage devices have gained popularity due to their large capacities and shrinking physical sizes which allow the devices to be portable. Multiple partitions may be provided of which one or more partitions may be secured to allow authenticated access to data stored in the secured partitions, while other partitions remain unsecured to allow unrestricted access to data stored therein. 
     At times, users of storage devices may need to modify their storage requirements. For example, users may need to modify a partition into two partitions. Each time a storage device is repartitioned, a host to which the device is connected to, e.g., a personal computer, is required to re-enumerate the device. Enumeration is automatic if the device is cold-plugged to the host. However, if the device is repartitioned while remaining connected to the host, the host is unable to automatically enumerate the device upon completion of repartitioning. Manual intervention, e.g., physically detaching the device from the host and re-attaching it, is required to initiate re-enumeration of the device. 
     SUMMARY OF THE INVENTION 
     Embodiments of the invention allow a host to initiate re-enumeration of a USB device following an event requiring device re-enumeration without the need for manual intervention, i.e., physically detaching and re-attaching the device to the host. Also, no additional hardware support is needed. 
     To this purpose, a sequence or procedure emulating detachment and attachment of a USB device to a host is performed while the device remains attached or connected to the host throughout the sequence. The sequence involves a series of command exchanges between the device and the host to enable an operating system (OS) residing in the host perceive a device change which in turn causes the host OS to initiate enumeration of the device. Since the device remains attached to the host throughout the sequence, the host OS is manipulated to receive a plurality of preset device states in order for it to perceive a device change. 
     Other features and benefits that characterize embodiments of the present invention will be apparent upon reading the following detailed description and review of the associated drawings. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  illustrates a system comprising a host and a USB device. 
         FIG. 2  illustrates a flow sequence according to one embodiment of the invention. 
     
    
    
     DETAILED DESCRIPTION 
     In the following description, numerous specific details are set forth in order to provide a thorough understanding of various embodiments of the present invention. It will be understood, however, to one skilled in the art, that embodiments of the present invention may be practiced without some or all of these specific details. In other instances, well known process operations have not been described in detail in order not to unnecessarily obscure pertinent aspects of embodiments being described. 
       FIG. 1  illustrates a system  10  comprising a host  12 , such as a personal computer or any computing device, which is coupled to a Universal Serial Bus (USB) device  14 . The host  12  includes an operating system (OS)  16  and a software application  18  stored in a non-volatile memory of the host  12 . A Microsoft® Windows® product may be used as the OS in embodiments of the invention. However, it should be appreciated that other operating systems may alternatively be used. The software application  18  is configured to interact with the host OS  16  and with the device  14 , such as to repartition the device  14 . An attachment point (port)  20  is provided at the host  12  to receive a cable  22  from the device  14  to electrically couple the device  14  to the host  12 . Alternatively, a hub (not shown) may be provided between the device  14  and the port  20  to electrically couple the device  14  to the host  12 . The hub provides additional attachment points through which other USB devices may be simultaneously coupled to the host  12 . 
     To initiate re-enumeration of a USB device  14  without manual intervention, a sequence emulating detachment and re-attachment of a device  14  in relation to a host  12  is performed while the device  14  remains connected to the host  12 . The sequence may be invoked by a predetermined event which requires device re-enumeration. The sequence involves a plurality of command exchanges between the device  14  and the host OS  16  and/or an application  18  residing in the host  12  to manipulate the host OS  16  perceive a device change even though the device  14  remains connected to the host  12  throughout the sequence. In particular, the host OS  16  is manipulated to perceive a first state in which the device  14  appears disconnected from the host  12  and subsequently to perceive a second state in which the device  14  appears connected to the host  12 . This sequence emulating a device change causes the host OS  16  to initiate device enumeration in accordance with standard OS behavior. 
     Reference is now made to  FIG. 2  which illustrates a sequence  200  for initiating enumeration of a USB device  14  according to one embodiment of the invention. The sequence  200  may be invoked by a predetermined event which requires device enumeration. Examples of such an event include, but not limited to, repartitioning of the USB device (such as from one partition to two partitions, and any other combinations of repartitioning) and modifying the security level of a partition in the device  14  (e.g. protecting or securing a partition, or vice versa). The following description applies to removable storage devices utilizing USB mass storage class Bulk-Only transport specification based on Small Computer System Interface (SCSI) command sets. However, it should be appreciated that the following description also applies to USB devices utilizing Control Bulk Interrupt (CBI) transport specification. 
     The sequence  200  may be invoked by a software application  18  residing in the host  12  upon an occurrence of a predetermined event. The application  18  issues a first customized command in block  202  to configure the device  14  reject all commands and requests, except for a predetermined command. In other words, only the predetermined command may be accepted by the device  14 . Accordingly, receipt of a command other than the predetermined command by the device  14  will cause a command failure. An example of a predetermined command includes, but not limited to, REQUEST SENSE command according to USB Mass Storage Class Specification and SCSI command set. The REQUEST SENSE command is generally used to transfer sense data from the device  14  to the host  12  in order to determine whether or not an error has occurred. The first customized command also presets or defines the sense data as being a first state in which the device  14  appears disconnected from the host  12 , e.g. “Medium Not Present.” 
     The application  18  then solicits a command failure or failed response from the device  14  in block  204  by issuing to the device  14  a second command which is other than the predetermined command. Since the device  14  has been configured in block  202  to reject all commands except for the predetermined command, any other command will result in a command failure. An example of a suitable command is the TEST UNIT READY command, based on standard SCSI command set, which is to request the device  14  report if it is ready. The purpose of the second command in block  204  is to generate a command failure which in turn causes the host OS  16  initiate an error check in accordance with standard OS behavior. In response to the TEST UNIT READY command, the device  14  returns a command failure to the application  18  in a block  206 . 
     Receipt of a command failure causes the host OS  16  to perform an error check by sending a REQUEST SENSE command to the device  14  in block  208 . Since the REQUEST SENSE command was configured for acceptance by the device  14 , the device  14  returns to the host OS  16  with sense data in accordance with standard response required of the REQUEST SENSE command. The sense data, which was earlier preset as being in the first state “Medium Not Present,” is supplied to the host OS  16  in block  208 . Accordingly, the host OS  16  now perceives or detects that no device is present even though the device  14  remains attached to the host  12 . 
     Subsequently, the host OS  16  is manipulated to perceive that a device  14  has been re-connected in order to invoke enumeration. To this purpose, the application  18  issues a third customized command in block  212  to configure the device  14  reject all commands except for a predetermined command. The predetermined command in the current instance may also be the REQUEST SENSE command. The third customized command also overwrites existing sense data and presets it as being a second state in which the device  14  appears connected to the host  12 , e.g. “Not Ready to Ready Transition—Medium Changed.” Further, the device  14  may adjust a value of logic unit numbers (LUN) based on the current number of partitions in the device  14 . The adjusted LUN value may be subsequently provided to the host OS  16  during enumeration. 
     The application  18  again solicits a command failure or failed response from the device  14  to cause the host OS  16  initiate an error check. To this purpose, a fourth command, which is a command other than the predetermined command, may be issued to the device  14  in block  214 . This fourth command may be the same as the second command in block  204 , e.g. TEST UNIT READY command, or may be any other suitable commands. In response to the fourth command, the device  14  returns a command failure to the application  18  in a block  216  since the device  14  has been earlier configured in block  212  to reject all commands except for the predetermined command, e.g. REQUEST SENSE command. 
     Receipt of the command failure triggers the host OS  16  to perform error checking by issuing a REQUEST SENSE command to the device  14  in a block  218 . In response to the REQUEST SENSE command, the device  14  returns or supplies to the host OS  16 , in a block  220 , with sense data which has been preset as being the second state in which the device  14  appears connected to the host  12 , e.g. “Not Ready to Ready Transition—Medium Changed”. Accordingly, the host OS  16  now detects or perceives a change in an attached device  14  even though the same device  14  remains attached to the host  12  throughout the sequence  200 . 
     Because the host OS  16  detects a device change, the host OS  16  initiates an enumeration process in block  222  in accordance with standard OS behavior. The enumeration process includes, inter alia, obtaining the number of partitions (i.e. LUN value) and size of each partition in the device  14 , and supplying these values to the host OS  16  in a block  222 . 
     In the foregoing paragraphs, the REQUEST SENSE command is used to provide a device condition or state even though the device condition is manipulated or preset to emulate detachment and attachment of a device to a host. It should be appreciated that other commands capable of indicating a device condition or capable of indicating a connection state, through a parameter or otherwise, of a device in relation to a host, may be used in embodiments of the invention with suitable modifications. 
     In one aspect, the REQUEST SENSE command may be described as a command configured to provoke a response from a target device receiving the command, in which the response includes information on the target device, for example, whether the target device is perceived as being connected to another device. 
     Embodiments of the invention are particularly advantageous because re-enumeration of a device  14  connected to a host  12  may be automatically initiated without manual intervention. Therefore, the re-enumeration process is transparent to a user and also appears seamless with an event, such as repartitioning of the device. Further, embodiments of the invention do not require additional hardware or circuitry in the devices which would otherwise incur additional manufacturing costs. Embodiments of the invention may be applied to a variety of storage devices utilizing a USB connection. Examples of such devices include, but not limited to, flash drives (commonly termed as pen drives, memory sticks or thumb drives), external hard drives and any other such drives with specific applications setup. 
     It is to be understood that other embodiments will be apparent to those skilled in the art from consideration of the specification and practice of the present invention. Furthermore, certain terminology has been used for the purposes of descriptive clarity, and not to limit the invention. The embodiments and features described above should be considered exemplary, with the invention being defined by the appended claims.