0% found this document useful (0 votes)
154 views19 pages

AN - 3326 How To Use SAMA5D2 USB Mass Storage Gadget Under Linux 00003326a PDF

Uploaded by

dabapo6983
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
154 views19 pages

AN - 3326 How To Use SAMA5D2 USB Mass Storage Gadget Under Linux 00003326a PDF

Uploaded by

dabapo6983
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 19

AN3326

How to use the SAMA5D2 USB Mass Storage Gadget


Under Linux®

Introduction
This application note describes how to get started using the SAMA5D2 USB Mass Storage Gadget under Linux.
The document shows how to simulate a USB Mass Storage Gadget (or “Device”) by using SAMA5D2. The simulation
requires a UDC driver and a Gadget driver. The UDC driver is provided by the Microchip Linux Board Support
Package (BSP); the Gadget driver is contained in the kernel.

Reference Documents
Title Reference Available
SAMA5D2 Series Datasheet DS60001476 https://www.microchip.com/design-centers/32-bit-mpus
SAMA5D27 SOM1 Kit1 User Guide DS50002667 https://www.microchip.com/DevelopmentTools/ProductDetails/
PartNO/ATSAMA5D27-SOM1-EK1

Prerequisites
• Hardware
– PC
– SAMA5D27 SOM1 Evaluation Kit (Part Number: ATSAMA5D27-SOM1-EK1)
– SDCard
– USB cable (Micro-USB to Type-A cable)
• Software
This demo runs on the AT91 Linux platform built by Buildroot. The first step is to set up the AT91 Buildroot
development environment. Refer to the web site: http://www.at91.com/linux4sam/bin/view/Linux4SAM/BuildRoot

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 1


AN3326

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 2


AN3326

Table of Contents
Introduction.....................................................................................................................................................1

Reference Documents....................................................................................................................................1

Prerequisites.................................................................................................................................................. 1

1. Hardware Design.................................................................................................................................... 4
1.1. Interface....................................................................................................................................... 4
1.2. Connection................................................................................................................................... 4

2. Software Design......................................................................................................................................6
2.1. Device Tree.................................................................................................................................. 7
2.2. Kernel........................................................................................................................................... 8
2.3. Rootfs......................................................................................................................................... 10

3. Hands-On.............................................................................................................................................. 11
3.1. Hands-On with Module g_mass_storage.ko...............................................................................11
3.2. Hands-On with Built-In g_mass_storage....................................................................................12

4. Appendix............................................................................................................................................... 14
4.1. How to Add a New Partition to an MMC Card in Buildroot......................................................... 14
4.2. How to Install the genisoimage Command in Buildroot..............................................................14

5. Revision History.................................................................................................................................... 16
5.1. Rev. A - 11/2019.........................................................................................................................16

The Microchip Website.................................................................................................................................17

Product Change Notification Service............................................................................................................17

Customer Support........................................................................................................................................ 17

Microchip Devices Code Protection Feature................................................................................................ 17

Legal Notice................................................................................................................................................. 17

Trademarks.................................................................................................................................................. 18

Quality Management System....................................................................................................................... 18

Worldwide Sales and Service.......................................................................................................................19

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 3


AN3326
Hardware Design

1. Hardware Design

1.1 Interface

VBUS_USBA
R70 USBA_VBUS_5V
PD20
100k
0402 C12
C65 1% R71 0.1uF
200k
20pF 50V
J17 0402
50V 0402
1%
0402
1
VBUS
2 USBA_N
D- USBA_DM
3 USBA_P
D+ USBA_DP
4
ID
5
GND
0

USB2.0 MICRO-B FEMALE

EARTH_USB_A

USB-A J17 was used in this Mass Storage Gadget demo.

1.2 Connection
Connect USB-A J17 to the PC using the USB cable (see Prerequisites).
Refer to the following picture.

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 4


AN3326
Hardware Design

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 5


AN3326
Software Design

2. Software Design
The Microchip Linux platform was built using Buildroot with the following configuration:
atmel_sama5d27_som1_ek_mmc_dev_defconfig
The USB Mass Storage Gadget demo works under this default configuration without any adjustment.
The g_mass_storage target in kernel was used to provide a mass storage function and can be built in kernel image or
as a driver module.
Note:  As most of the important parameters are passed via module parameters, it is preferable to build the
g_mass_storage target as a driver module; otherwise, bootargs in the U-Boot environment must be modified in order
to pass parameters to g_mass_storage.
The following table describes the g_mass_storage module parameters (source: kernel_dir/Documentation/usb/
massstorage.txt).
Table 2-1. g_mass_storage Module Parameters

Parameter Description
Mass Storage Gadget Specific Module Parameters
This parameter lists paths to files or block devices used for backing storage for each logical unit. There
may be at most FSG_MAX_LUNS (8) LUNs set. If more files are specified, they will be silently ignored.
See also “luns” parameter.
*BEWARE* that if a file is used as a backing storage, it may not be modified by any other process. This is
file=filename[,filename...] because the host assumes the data does not change without its knowledge. It may be read, but (if the
logical unit is writable) due to buffering on the host side, the contents are not well defined.
The size of the logical unit will be rounded down to a full logical block. The logical block size is 2048 bytes
for LUNs simulating CD-ROM, block size of the device if the backing file is a block device, or 512 bytes
otherwise.

This parameter specifies whether each logical unit should be removable. “b” here is either “y”, “Y” or “1” for
true or “n”, “N” or “0” for false.
If this option is set for a logical unit, gadget will accept an “eject” SCSI request (Start/Stop Unit). When it is
sent, the backing file will be closed to simulate ejection and the logical unit will not be mountable by the
host until a new backing file is specified by userspace on the device (see “sysfs entries” section).
If a logical unit is not removable (the default), a backing file must be specified for it with the “file” parameter
as the module is loaded. The same applies if the module is built in, no exceptions.
removable=b[,b...]
The default value of the flag is false, *HOWEVER* it used to be true. This has been changed to better
match File Storage Gadget and because it seems like a saner default after all. Thus to maintain
compatibility with older kernels, it's best to specify the default values. Also, if one relied on old default,
explicit “n” needs to be specified now.
Note that “removable” means the logical unit's medium can be ejected or removed (as is true for a CD-
ROM drive or a card reader). It does *not* mean that the entire gadget can be unplugged from the host;
the proper term for that is “hot-unpluggable”.

cdrom=b[,b...] This parameter specifies whether each logical unit should simulate CD-ROM. The default is false.

This parameter specifies whether each logical unit should be reported as read only. This will prevent host
from modifying the backing files.
Note that if this flag for given logical unit is false but the backing file could not be opened in read/write
ro=b[,b...] mode, the gadget will fall back to read only mode anyway.
The default value for non-CD-ROM logical units is false; for logical units simulating CD-ROM it is forced to
true.

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 6


AN3326
Software Design

...........continued
Parameter Description
This parameter specifies whether FUA flag should be ignored in SCSI Write10 and Write12 commands
sent to given logical units.
MS Windows mounts removable storage in “Removal optimised mode” by default. All the writes to the
media are synchronous, which is achieved by setting the FUA (Force Unit Access) bit in SCSI Write(10,12)
nofua=b[,b...] commands. This forces each write to wait until the data has actually been written out and prevents I/O
requests aggregation in block layer dramatically decreasing performance.
Note that this may mean that if the device is powered from USB and the user unplugs the device without
unmounting it first (which at least some Windows users do), the data may be lost.
The default value is false.

This parameter specifies the number of logical units the gadget will have. It is limited by FSG_MAX_LUNS
(8) and higher values will be capped.
If this parameter is provided, and the number of files specified in “file” argument is greater than the value of
luns=N “luns”, all excess files will be ignored.
If this parameter is not present, the number of logical units will be deduced from the number of files
specified in the “file” parameter. If the file parameter is missing as well, one is assumed.

Specifies whether the gadget is allowed to halt bulk endpoints. The default is determined according to the
stall=b type of USB device controller, but usually true.

Composite Gadget Common Parameters


idVendor USB Vendor ID (16-bit integer)
idProduct USB Product ID (16-bit integer)
bcdDevice USB Device version (BCD) (16-bit integer)
iManufacturer USB Manufacturer string (string)
iProduct USB Product string (string)
iSerialNumber Serial number string (sting)

2.1 Device Tree


• Action: no need to change
• Location: buildroot-at91/output/build/linux-linux4sam_6.0/arch/arm/boot/dts
• Sources:
– sama5d2.dtsi
– at91-sama5d27_som1_ek.dts
Device tree for UDPHS in sama5d2.dtsi:
usb0: gadget@300000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "atmel,sama5d3-udc";
// specify which driver will be used for this usb device

reg = <0x00300000 0x100000


// definition for fifo memory region, base address 0x300000, size 0x100000

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 7


AN3326
Software Design

0xfc02c000 0x400>;
// definition for ctrl memory region, base address 0xfc02c000, size 0x400

interrupts = <42 IRQ_TYPE_LEVEL_HIGH 2>;


// PID of usb0 is 42, high level triggered, priority is 2

clocks = <&udphs_clk>, <&utmi>;


// definition for usb0 clock

clock-names = "pclk", "hclk";


status = "disabled";
// default disabled, and will be replaced with “okay”

ep@0 {
// definition for usb end point

reg = <0>;
atmel,fifo-size = <64>;
atmel,nb-banks = <1>;
};

ep@1 {
reg = <1>;
atmel,fifo-size = <1024>;
atmel,nb-banks = <3>;
atmel,can-dma;
atmel,can-isoc;
};

...... // ep2 ~ ep15

Device tree for UDPHS in at91-sama5d27_som1_ek.dts:

usb0: gadget@300000 {
atmel,vbus-gpio = <&pioA PIN_PD20 GPIO_ACTIVE_HIGH>;
// USB vbus pin definition

pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usba_vbus>;
// definition for usb0 pins

status = "okay";
// replace status’s property with “okay”, enable usb0 device

};

2.2 Kernel
• Action: no need to change
• Location: buildroot-at91/output/build/linux-linux4sam_6.0/
• Defconfig: sama5_defconfig
• Driver files:

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 8


AN3326
Software Design

– drivers/usb/gadget/udc/atmel_usba_udc.c
– drivers/usb/gadget/function/f_mass_storage.c
– drivers/usb/gadget/legacy/mass_storage.c
Check the kernel configuration for the USB mass storage gadget function:
user@at91:~/buildroot-at91$ make linux-menuconfig

Device Drivers > USB support > USB Gadget Support > USB Peripheral Controller > Atmel USBA
Driver for the UDPHS (USB Device Port High Speed) controller.
<M> was used for this driver, and this driver module will be inserted into the kernel automatically by udev once usb0,
in the device tree, is registered.
With the default setting, this item has been selected.

Device Drivers > USB support > USB Gadget Support > USB Gadget precomposed configurations
Select the “USB Gadget precomposed configurations” item. All supported gadget devices will be listed.

Device Drivers > USB support > USB Gadget Support > Mass Storage Gadget
Select “Mass Storage Gadget” with <M>. It will be built as a driver module.
It can be seen that some other gadget device drivers were selected with the default setting. After a successful build,
all driver module files will be stored in rootfs and these modules can be dynamically inserted and removed at runtime
according to the application requirements.

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 9


AN3326
Software Design

2.3 Rootfs
• Action: no need to change
• Location: buildroot-at91/output/images/rootfs.tar

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 10


AN3326
Hands-On

3. Hands-On

3.1 Hands-On with Module g_mass_storage.ko

3.1.1 Simplest Mass Storage Device


The “file” parameter lists paths to files or block devices used for backing storage for each LUN (logical unit). In this
demo, a boot partition in the MMC card was used as a backing storage.
See 4.1 How to Add a New Partition to an MMC Card in Buildroot.

# modprobe g_mass_storage file=/dev/mmcblk0p1 removable=1


Mass Storage Function, version: 2009/09/11
LUN: removable file: (no medium)
LUN: removable file: /dev/mmcblk0p1
Number of LUNs=1
g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
g_mass_storage gadget: userspace failed to provide iSerialNumber
g_mass_storage gadget: g_mass_storage ready
# g_mass_storage gadget: high-speed config #1: Linux File-Backed Storage

3.1.2 Read-Only Mass Storage Device


# modprobe g_mass_storage file=/dev/mmcblk0p1 removable=1 ro=1
Mass Storage Function, version: 2009/09/11
LUN: removable file: (no medium)
LUN: removable read only file: /dev/mmcblk0p1
Number of LUNs=1
g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
g_mass_storage gadget: userspace failed to provide iSerialNumber
g_mass_storage gadget: g_mass_storage ready
# g_mass_storage gadget: high-speed config #1: Linux File-Backed Storage

3.1.3 CD-ROM Mass Storage Device


Generate an ISO9660 filesystem image, then use the resulting *.iso file as LUN backing storage.
See 4.2 How to Install the genisoimage Command in Buildroot.

# mount /dev/mmcblk0p1 /mnt


# ls /mnt
System Volume Information u-boot.bin
at91-sama5d27_som1_ek.dtb zImage
boot.bin
# genisoimage -allow-lowercase -l -o image.iso /mnt
Warning: creating filesystem that does not conform to ISO-9660.
I: -input-charset not specified, using ascii (detected in locale settings)
Total translation table size: 0
Total rockridge attributes bytes: 0
Total directory bytes: 2048
Path table size(bytes): 44
Max brk space used 5000
2342 extents written (4 MB)
# ls
image.iso
# modprobe g_mass_storage file=/root/image.iso removable=1 cdrom=1
Mass Storage Function, version: 2009/09/11
LUN: removable file: (no medium)
LUN: removable read only CD-ROM file: /root/image.iso
Number of LUNs=1
g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
g_mass_storage gadget: userspace failed to provide iSerialNumber
g_mass_storage gadget: g_mass_storage ready
# g_mass_storage gadget: high-speed config #1: Linux File-Backed Storage

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 11


AN3326
Hands-On

3.1.4 Mass Storage Device with Multiple LUNs


Multiple LUNs (logical units) were supported by the Mass Storage Gadget driver. A new MMC partition was added for
the demo.
“iSerialNumber” must be provided, otherwise only the first disk or drive will be detected in Windows (this differs from
Ubuntu).

# modprobe g_mass_storage file=/root/image.iso,/dev/mmcblk0p1,/dev/mmcblk0p3 removable=1,1,1


cdrom=1,0,0 ro=1,1,0 iSerialNumber=0000000000000001,0000000000000002,0000000000000003
Mass Storage Function, version: 2009/09/11
LUN: removable file: (no medium)
LUN: removable read only CD-ROM file: /root/image.iso
LUN: removable read only file: /dev/mmcblk0p1
LUN: removable file: /dev/mmcblk0p3
Number of LUNs=3
g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
g_mass_storage gadget: g_mass_storage ready
# g_mass_storage gadget: high-speed config #1: Linux File-Backed Storage

3.2 Hands-On with Built-In g_mass_storage


g_mass_storage can be built into the kernel image, but will result in the following error log when booting if the
bootargs was not updated in uboot:

Mass Storage Function, version: 2009/09/11


LUN: removable file: (no medium)
no file given for LUN0
g_mass_storage 300000.gadget: failed to start g_mass_storage: -22

This error message is due to the following codes in f_mass_storage.c:

if (!cfg->filename && !cfg->removable) {


pr_err("no file given for LUN%d\n", id);
return -EINVAL;
}

Some important parameters must be passed during g_mass_storage initialization. The parameter “removable” must
be passed by updating bootargs. See 3.2.1 Using sysfs to Interact with g_mass_storage.

3.2.1 Using sysfs to Interact with g_mass_storage


The updated bootargs displays as follows:
bootargs=console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait
g_mass_storage.removable=1

In the uboot console, set bootargs as follows:


=> setenv bootargs “console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait
g_mass_storage.removable=1”
=> saveenv
=> boot

After bootarg updated successfully, the following booting logs display:

Mass Storage Function, version: 2009/09/11


LUN: removable file: (no medium)
LUN: removable file: (no medium)
Number of LUNs=1
g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
g_mass_storage gadget: userspace failed to provide iSerialNumber
g_mass_storage gadget: g_mass_storage ready

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 12


AN3326
Hands-On

Other parameters can be passed to g_mass_storage via the sysfs interface. Use the following command to insert
storage medium “/dev/mmcblk0p1” into the USB mass storage drive:

# cd /sys/devices/platform/ahb/300000.gadget/gadget/lun0
# ls
file nofua power ro uevent
# echo /dev/mmcblk0p1 > file

Use the following command to eject the storage medium:

# echo > file

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 13


AN3326
Appendix

4. Appendix

4.1 How to Add a New Partition to an MMC Card in Buildroot


In SAMA5D27-SOM1-EK1, modify the following file to add a new MMC partition:
buildroot-at91/board/atmel/sama5d27_som1_ek_mmc/genimage.cfg
The following example code shows how to add a partition to an MMC card for mass storage function:

# Image for SD card boot on Atmel SAMA5D2 Xplained boards


#
image boot.vfat {
vfat {
files = {
"zImage",
"at91-sama5d27_som1_ek.dtb",
"boot.bin",
"u-boot.bin"
}
}
size = 16M
}
image sdcard.img {
hdimage {
}
partition boot {
partition-type = 0xC
bootable = "true"
image = "boot.vfat"
offset = 1M
}
partition rootfs {
partition-type = 0x83
image = "rootfs.ext4"
size = 512M
}
partition mass-storage1 {
partition-type = 0x83
size = 32M
}
}

4.2 How to Install the genisoimage Command in Buildroot


1. Add the cdrkit package support in Buildroot:
user@at91:~/buildroot-at91$ make linux-menuconfig

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 14


AN3326
Appendix

2. Rebuild Buildroot:
user@at91:~/buildroot-at91$ make

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 15


AN3326
Revision History

5. Revision History

5.1 Rev. A - 11/2019


First issue.

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 16


AN3326

The Microchip Website


Microchip provides online support via our website at http://www.microchip.com/. This website is used to make files
and information easily available to customers. Some of the content available includes:
• Product Support – Data sheets and errata, application notes and sample programs, design resources, user’s
guides and hardware support documents, latest software releases and archived software
• General Technical Support – Frequently Asked Questions (FAQs), technical support requests, online
discussion groups, Microchip design partner program member listing
• Business of Microchip – Product selector and ordering guides, latest Microchip press releases, listing of
seminars and events, listings of Microchip sales offices, distributors and factory representatives

Product Change Notification Service


Microchip’s product change notification service helps keep customers current on Microchip products. Subscribers will
receive email notification whenever there are changes, updates, revisions or errata related to a specified product
family or development tool of interest.
To register, go to http://www.microchip.com/pcn and follow the registration instructions.

Customer Support
Users of Microchip products can receive assistance through several channels:
• Distributor or Representative
• Local Sales Office
• Embedded Solutions Engineer (ESE)
• Technical Support
Customers should contact their distributor, representative or ESE for support. Local sales offices are also available to
help customers. A listing of sales offices and locations is included in this document.
Technical support is available through the website at: http://www.microchip.com/support

Microchip Devices Code Protection Feature


Note the following details of the code protection feature on Microchip devices:
• Microchip products meet the specification contained in their particular Microchip Data Sheet.
• Microchip believes that its family of products is one of the most secure families of its kind on the market today,
when used in the intended manner and under normal conditions.
• There are dishonest and possibly illegal methods used to breach the code protection feature. All of these
methods, to our knowledge, require using the Microchip products in a manner outside the operating
specifications contained in Microchip’s Data Sheets. Most likely, the person doing so is engaged in theft of
intellectual property.
• Microchip is willing to work with the customer who is concerned about the integrity of their code.
• Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code
protection does not mean that we are guaranteeing the product as “unbreakable.”
Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection
features of our products. Attempts to break Microchip’s code protection feature may be a violation of the Digital
Millennium Copyright Act. If such acts allow unauthorized access to your software or other copyrighted work, you
may have a right to sue for relief under that Act.

Legal Notice
Information contained in this publication regarding device applications and the like is provided only for your
convenience and may be superseded by updates. It is your responsibility to ensure that your application meets with

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 17


AN3326

your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER


EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY OR OTHERWISE, RELATED TO THE INFORMATION,
INCLUDING BUT NOT LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR
FITNESS FOR PURPOSE. Microchip disclaims all liability arising from this information and its use. Use of Microchip
devices in life support and/or safety applications is entirely at the buyer’s risk, and the buyer agrees to defend,
indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting from such
use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights unless
otherwise stated.

Trademarks

The Microchip name and logo, the Microchip logo, Adaptec, AnyRate, AVR, AVR logo, AVR Freaks, BesTime,
BitCloud, chipKIT, chipKIT logo, CryptoMemory, CryptoRF, dsPIC, FlashFlex, flexPWR, HELDO, IGLOO, JukeBlox,
KeeLoq, Kleer, LANCheck, LinkMD, maXStylus, maXTouch, MediaLB, megaAVR, Microsemi, Microsemi logo, MOST,
MOST logo, MPLAB, OptoLyzer, PackeTime, PIC, picoPower, PICSTART, PIC32 logo, PolarFire, Prochip Designer,
QTouch, SAM-BA, SenGenuity, SpyNIC, SST, SST Logo, SuperFlash, Symmetricom, SyncServer, Tachyon,
TempTrackr, TimeSource, tinyAVR, UNI/O, Vectron, and XMEGA are registered trademarks of Microchip Technology
Incorporated in the U.S.A. and other countries.
APT, ClockWorks, The Embedded Control Solutions Company, EtherSynch, FlashTec, Hyper Speed Control,
HyperLight Load, IntelliMOS, Libero, motorBench, mTouch, Powermite 3, Precision Edge, ProASIC, ProASIC Plus,
ProASIC Plus logo, Quiet-Wire, SmartFusion, SyncWorld, Temux, TimeCesium, TimeHub, TimePictra, TimeProvider,
Vite, WinPath, and ZL are registered trademarks of Microchip Technology Incorporated in the U.S.A.
Adjacent Key Suppression, AKS, Analog-for-the-Digital Age, Any Capacitor, AnyIn, AnyOut, BlueSky, BodyCom,
CodeGuard, CryptoAuthentication, CryptoAutomotive, CryptoCompanion, CryptoController, dsPICDEM,
dsPICDEM.net, Dynamic Average Matching, DAM, ECAN, EtherGREEN, In-Circuit Serial Programming, ICSP,
INICnet, Inter-Chip Connectivity, JitterBlocker, KleerNet, KleerNet logo, memBrain, Mindi, MiWi, MPASM, MPF,
MPLAB Certified logo, MPLIB, MPLINK, MultiTRAK, NetDetach, Omniscient Code Generation, PICDEM,
PICDEM.net, PICkit, PICtail, PowerSmart, PureSilicon, QMatrix, REAL ICE, Ripple Blocker, SAM-ICE, Serial Quad
I/O, SMART-I.S., SQI, SuperSwitcher, SuperSwitcher II, Total Endurance, TSHARC, USBCheck, VariSense,
ViewSpan, WiperLock, Wireless DNA, and ZENA are trademarks of Microchip Technology Incorporated in the U.S.A.
and other countries.
SQTP is a service mark of Microchip Technology Incorporated in the U.S.A.
The Adaptec logo, Frequency on Demand, Silicon Storage Technology, and Symmcom are registered trademarks of
Microchip Technology Inc. in other countries.
GestIC is a registered trademark of Microchip Technology Germany II GmbH & Co. KG, a subsidiary of Microchip
Technology Inc., in other countries.
All other trademarks mentioned herein are property of their respective companies.
© 2019, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved.
ISBN: 978-1-5224-5301-7
AMBA, Arm, Arm7, Arm7TDMI, Arm9, Arm11, Artisan, big.LITTLE, Cordio, CoreLink, CoreSight, Cortex, DesignStart,
DynamIQ, Jazelle, Keil, Mali, Mbed, Mbed Enabled, NEON, POP, RealView, SecurCore, Socrates, Thumb,
TrustZone, ULINK, ULINK2, ULINK-ME, ULINK-PLUS, ULINKpro, µVision, Versatile are trademarks or registered
trademarks of Arm Limited (or its subsidiaries) in the US and/or elsewhere.

Quality Management System

For information regarding Microchip’s Quality Management Systems, please visit http://www.microchip.com/quality.

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 18


Worldwide Sales and Service
AMERICAS ASIA/PACIFIC ASIA/PACIFIC EUROPE
Corporate Office Australia - Sydney India - Bangalore Austria - Wels
2355 West Chandler Blvd. Tel: 61-2-9868-6733 Tel: 91-80-3090-4444 Tel: 43-7242-2244-39
Chandler, AZ 85224-6199 China - Beijing India - New Delhi Fax: 43-7242-2244-393
Tel: 480-792-7200 Tel: 86-10-8569-7000 Tel: 91-11-4160-8631 Denmark - Copenhagen
Fax: 480-792-7277 China - Chengdu India - Pune Tel: 45-4450-2828
Technical Support: Tel: 86-28-8665-5511 Tel: 91-20-4121-0141 Fax: 45-4485-2829
http://www.microchip.com/support China - Chongqing Japan - Osaka Finland - Espoo
Web Address: Tel: 86-23-8980-9588 Tel: 81-6-6152-7160 Tel: 358-9-4520-820
http://www.microchip.com China - Dongguan Japan - Tokyo France - Paris
Atlanta Tel: 86-769-8702-9880 Tel: 81-3-6880- 3770 Tel: 33-1-69-53-63-20
Duluth, GA China - Guangzhou Korea - Daegu Fax: 33-1-69-30-90-79
Tel: 678-957-9614 Tel: 86-20-8755-8029 Tel: 82-53-744-4301 Germany - Garching
Fax: 678-957-1455 China - Hangzhou Korea - Seoul Tel: 49-8931-9700
Austin, TX Tel: 86-571-8792-8115 Tel: 82-2-554-7200 Germany - Haan
Tel: 512-257-3370 China - Hong Kong SAR Malaysia - Kuala Lumpur Tel: 49-2129-3766400
Boston Tel: 852-2943-5100 Tel: 60-3-7651-7906 Germany - Heilbronn
Westborough, MA China - Nanjing Malaysia - Penang Tel: 49-7131-72400
Tel: 774-760-0087 Tel: 86-25-8473-2460 Tel: 60-4-227-8870 Germany - Karlsruhe
Fax: 774-760-0088 China - Qingdao Philippines - Manila Tel: 49-721-625370
Chicago Tel: 86-532-8502-7355 Tel: 63-2-634-9065 Germany - Munich
Itasca, IL China - Shanghai Singapore Tel: 49-89-627-144-0
Tel: 630-285-0071 Tel: 86-21-3326-8000 Tel: 65-6334-8870 Fax: 49-89-627-144-44
Fax: 630-285-0075 China - Shenyang Taiwan - Hsin Chu Germany - Rosenheim
Dallas Tel: 86-24-2334-2829 Tel: 886-3-577-8366 Tel: 49-8031-354-560
Addison, TX China - Shenzhen Taiwan - Kaohsiung Israel - Ra’anana
Tel: 972-818-7423 Tel: 86-755-8864-2200 Tel: 886-7-213-7830 Tel: 972-9-744-7705
Fax: 972-818-2924 China - Suzhou Taiwan - Taipei Italy - Milan
Detroit Tel: 86-186-6233-1526 Tel: 886-2-2508-8600 Tel: 39-0331-742611
Novi, MI China - Wuhan Thailand - Bangkok Fax: 39-0331-466781
Tel: 248-848-4000 Tel: 86-27-5980-5300 Tel: 66-2-694-1351 Italy - Padova
Houston, TX China - Xian Vietnam - Ho Chi Minh Tel: 39-049-7625286
Tel: 281-894-5983 Tel: 86-29-8833-7252 Tel: 84-28-5448-2100 Netherlands - Drunen
Indianapolis China - Xiamen Tel: 31-416-690399
Noblesville, IN Tel: 86-592-2388138 Fax: 31-416-690340
Tel: 317-773-8323 China - Zhuhai Norway - Trondheim
Fax: 317-773-5453 Tel: 86-756-3210040 Tel: 47-72884388
Tel: 317-536-2380 Poland - Warsaw
Los Angeles Tel: 48-22-3325737
Mission Viejo, CA Romania - Bucharest
Tel: 949-462-9523 Tel: 40-21-407-87-50
Fax: 949-462-9608 Spain - Madrid
Tel: 951-273-7800 Tel: 34-91-708-08-90
Raleigh, NC Fax: 34-91-708-08-91
Tel: 919-844-7510 Sweden - Gothenberg
New York, NY Tel: 46-31-704-60-40
Tel: 631-435-6000 Sweden - Stockholm
San Jose, CA Tel: 46-8-5090-4654
Tel: 408-735-9110 UK - Wokingham
Tel: 408-436-4270 Tel: 44-118-921-5800
Canada - Toronto Fax: 44-118-921-5820
Tel: 905-695-1980
Fax: 905-695-2078

© 2019 Microchip Technology Inc. Application Note DS00003326A-page 19

You might also like