This blog explores the
differences between the older Mass storage Class MSC and the newer Media
Transfer Protocol MTP methods of sharing embedded device memory when connected
to a PC.
Storage is a key component
of any embedded handheld device a mobile phone or other convergence devices. To
transfer the data stored in these devices, technologies such as USB or
Bluetooth are used, the former being more predominant. Generally when the USB shares
the memory of a mobile device, it is
shared as a drive on the host PC. The USB class used is known as Mass Storage
Class (MSC), and it allows you to manage the drive completely like a local hard
drive connected to the PC. But in recent Android versions (Ice cream, Sandwich
and later), a newer class named MTP Media Transfer Protocol is made default to
share mobile memory over USB to a host PC. So what necessitated this change?
Let’s take a brief look at the two USB classes to understand why MTP is preferred
over MSC.
Before going into
advantages of MTP, let us first explore how these two protocols work, with the
help of Linux.
An
overview of USB MSC
The MSC protocol defines
how data exchange can take place between USB host and a USB compliant device. Whenever
you see the ubiquitous pen drive for all your data transfer activities, MSC is
the underlying protocol. USB devices using the MSC class are equivalent to an
external hard drive connected to host. These devices can be used just like
in-PC drives, to drag and drop files. Thus, the USB host can interact with
different flash/hard drives without having any knowledge about the underlying
storage system.
Linux
USB MSC architecture
Figure 1below shows the
block level architecture when an MSC device is connected to a standard Linux host.
The Linux device’s MSC architecture consists of two parts: the storage
subsystem and the USB subsystem. In the Linux framework, the Virtual File
System (VFS) layer is used to abstract the storage and the USB layers. The
gadget driver, being USB controller specific, collects the USB transfers and
identifies to which function the transfer belongs (e.g. the Ethernet packet,
the MSC packet, etc). If it is an MSC packet, the gadget driver sends the
packet mass storage driver. Inside the class driver, the SCSI commands are
decoded, and appropriate storage operations are done using the VFS layer. SCSI
is a standard for the transfer of data between two devices. The entire blocks
are implemented in kernel space.
Fig. 1 Linux USB MSC Architecture |
On the host side, the USB
core drivers detect the USB device and expose it as a block device. The data is
transferred to the block layer as SCSIcommands, the data is transferred to the
block layer as SCSI commands, with the help of the storage driver.
An
overview of the Media Transfer Protocol (MTP)
MTP was introduced by
Microsoft to enable data exchange between a USB host (initiators) and devices
(responders) with ‘intelligent ‘storage capabilities (those with some sort of
user interactivity). These include smartphones, tablets and portable audio
players. ‘Media’ in Media Transfer Protocol does not just mean audio/video; it
encompasses all binary data, including text files. Devices supporting MTP come
up as ‘portable device’ and not a drive as in USB MSC. All the content (songs,
images, videos) on devices are represented by objects, and object handles are
used in order to reference a logical object on the device. Once the device is
connected to the USB host, enumeration takes place, and all associated
metadata, such as the file creation, the time of modification, size, folder
details, etc, are passed to the host PC. After this, data exchange can begin.
Fig. 2 Architecture of MTP |
Android
implementation of MTP
In Linux, sysfs is an interface used for
communication between user space and kernel space. Figure illustrates the
block-level architecture when an MTP device is connected to a standard host.
The MTP implementation on the device side is divided across user space and
kernel space.User space components: The
mtp daemon (mtpd) runs in the JVM (Java Virtual Machine) of Android. It loads
and calls the USB Device MTP Library via JNI (Java Native Interface). The USB
device MTP Library takes care of decoding and responding to MTP commands.Kernel space components: The USB device
MTP Function Driver handles the MTP class-specific control requests like
opening or closing the session as per the user’sinstructions. It also controls reading/writing
of files from the storage media through the Virtual File System. On the host side, the USB core drivers
communicate with the USB device. Applications like Windows Media Player on
Windows use the libmtp library to
communicate with device. Based on the requests from the applications, mtpd on the device would respond using
the USB drivers.
The
advantages of MTP
From both the
architectures, you can see that MSC works on SCSI commands, and the host has
unrestricted access to the device. The device cannot modify the data without
releasing its connection from the host, if mounted. If the device is given
permissions to modify the data when there is a connection with the host, there
are chances of corrupting the data, or even the file system. That is why when
you mount an SD card of an Android device to a PC, you cannot access the SD
card using the Android device until you unmount it from the PC. MTP has a
solution to this problem. It manages the files, unlike MSC, which manages
storage. The media player on the host reads and writes entire files on the
device.With MTP, Windows Media Player has an option to sync media content on
the PC and the device. You can even customize the data content for the sync
options based on the ratings etc. With MISC, this can be achieved only with
special applications. Unlike MSC, MTP
enables the monitoring of device initiated events, and the changes in device
properties.
MTP does not allow the
transfer of unsupported file formats, unlike mass storage, where the user needs
to check for compatibility after the file transfer.
Lastly, MSC and MTP
represent two efficient data exchange methods. While MSC has been the de-facto
standard followed until the recent past, it fails to address the needs posed by
modern-day intelligent storage devices. While flash-based devices will continue
to use MSC, we will see more and more portable devices with hard drives
switching over to MTP. However, it is always the user’s prerogative to choose
between the free way or the safe way to manage data i.e., whether to use MSC or
MTP.
No comments:
Post a Comment