AN1873 Host API Design for MM7150 Motion Module Author: Tom Tse / Arjun M. Das Microchip Technology Inc. INTRODUCTION This application note provides detailed design information regarding how to write application firmware to access the MM7150 motion module’s data by using the defined API (application programming interface) and virtual registers. This specification and design is also used in the MM7150 with Explorer 16 (PIC24FJ) development board’s Sensor Fusion Sample Code, which is available to customers. Audience This document is written for developers who have a background in embedded controller firmware development, as well as basic knowledge of the HID over I2C protocol. References The following documents should be referenced when using this application note. Please contact your Microchip representative for availability. • • • • Microsoft HID over I2C protocol specification, v1.0 on April 24, 2012 (available on msdn.microsoft.com) HID Sensor Usage Tables (Request #: HUTRR39, available on usb.org) Microchip MM7150 Motion Module/PICTail on Explorer 16 Development Board User’s Manual, Rev. A Microchip MM7150 with Explorer 16 (PIC24) Sensor Fusion Sample Code v1.3.1 or later Glossary of Terms and AcronymsHost API Design for MM7150 Motion Module This section describes glossary terms and acronyms used in this document. TABLE 1-1: GLOSSARY Term HID Definition Human Interface Device I2C Inter-Integrated Circuit HOST Refers to the application processor in the embedded systems that is used to communicate to the MM7150, which is PIC24FJ128GA010 in the Exp 16 sample code Device / EC Refers to the MM7150 Motion Module or the SSC7150 Sensor Hub Device VREG Virtual Registers Acc, Mag, Gyro Accelerometer, Magnetometer, Gyroscope (physical sensors) Ori, Incl, Cmp Orientation, Inclinometer, Compass (virtual sensors) SF Sensor Fusion 2014 Microchip Technology Inc. Advance Information DS00001873A-page 1 AN1873 1.0 SYSTEM OVERVIEW Host space will be divided into two separate entities: • Host user space • Host SF lib (library) space FIGURE 1-1: User Space HOST LAYOUT SF Lib Space Host applications should reside in the Host user space, and the SF related infrastructure should reside in the SF lib space. Any host application can make use of the host SF lib through read/write of virtual registers. The virtual registers are the uppermost layer of Host SF lib that is exposed to the user application, which eventually drives down through all the layers of host SF lib. FIGURE 1-2: Host User Space User Application DS00001873A-page 2 HOST DEVICE LAYOUT Host SF Lib Space V Read/Write R E G VREG to HID/I2C Translation HID/I2C Parser 2 I C/ SMBus Driver Advance Information I2C CLK/DAT Alert Line Wake Up MM7150 Motion Module 2014 Microchip Technology Inc. AN1873 2.0 HOST SF LIB FEATURES This section provides the summary table to describe all the features that are currently supported or will be supported in the Host SF Library. TABLE 2-1: HOST SF LIB FEATURES Features Descriptions 2 Reset Supports HID/I C reset command of MM7150 module, also resets the virtual registers. Sensor Hub Enable Enables the sensor hub. Sensor Hub Sleep When enabled, enters D3 deepest sleep state. Sensor List Lists the sensors supported in the MM7150 motion module. Sensor Sensitivity Sensitivity of sensors. Sensor Data Rate/SPS Rate at which the sensor can update data (Report Interval). Sensor Enable Enables reporting from sensor. Sensor Data Read data from an enabled sensor. PID,VID,DID Read the various IDs. Vendor Collection Reads MM7150 Firmware ID, update sensor coefficients, update configuration file, and supports flash update. 2014 Microchip Technology Inc. Advance Information DS00001873A-page 3 AN1873 3.0 HOST SF LIB Host SF lib space is comprised of the following four layers: • • • • Virtual Register layer VREG to HID translation layer HID/I2C parser layer I2C/SMBus driver layer The various layers are depicted below. 3.1 Virtual Registers Virtual registers are 16-bit registers implemented in RAM which can be accessed by the User application to configure and read/write the MM7150 motion module. TABLE 3-1: DEFINITION TERMS USED IN VIRTUAL REGISTERS Term / Acronym Definition R “R” is an access type. It is used to indicate if a register or bit is read-only. Bits and registers that are read-only return the current value in the register when read. Reading or writing the bits or registers has no effect on the value. W “W” is an access type. It is used to indicate if a register or bit is write-only. Bits and registers that are write-only can only be written to. Reading the bits or registers returns 0. R/W “R/W” is an access type. It is used to indicate if a register or bit is read-write. Bits and registers that are read-write return the current value in the register when read. Writing a value will cause the register or bit to be updated. Reading the bits or registers has no effect on the value. Some characteristics of the virtual registers are: • • • • Writing the same value again to a VREG has no effect. Some VREGs have auto-clearing bits i.e., the bits are automatically cleared after the operation is completed. VREG strictly follows the access type. Many of the VREGs have corresponding bits in an associated status registers to indicate if the operation corresponding to a VREG write has been successful. • Some VREGs are valid only if that particular sensor is available on the module (Sensor List register); otherwise those related registers are reserved. Please see the Appendix B: "Virtual registers map" for details information. 3.1.1 REGISTER DESCRIPTION 3.1.1.1 Register 00h: Sensor Hub Configuration (SHC) - Access Type: R/W - POR Default: 0x0001 TABLE 3-2: VREG - 00H BIT15 BIT14 BIT13 RES RES Raw Gyro EN BIT7 BIT6 BIT5 BIT4 Ori EN Cmp EN Gyro EN Acc EN DS00001873A-page 4 BIT12 BIT11 BIT10 BIT9 BIT8 RES RES Incl EN BIT3 BIT2 BIT1 BIT0 MM_Reset MM_Start MM_Sleep MM_Wake Raw Mag EN Raw Acc EN Advance Information 2014 Microchip Technology Inc. AN1873 TABLE 3-3: VREG - 00H BITS DESCRIPTION Bits Description 0 - MM_Wake This bit is set by default. It is cleared automatically when sleep bit is set. It has to be set to wake up the host from sleep. 1 - MM_Sleep By setting this bit, the MM7150 motion module enters D3 deepest sleep state. To wake from this sleep, the HOST SF Lib must issue a wake signal by setting MM_Wake bit 0. This is a self-clearing bit. Any other combination of bits other than what is given in the below table, do not set or clear this register. • MM_Wake = 1, MM_Sleep = 0, MM7150 is Active • MM_Wake = 0, MM_Sleep = 1, MM7150 is Sleep This bit is effective, only if all sensors are disabled. If any sensor is enabled, this bit cannot be set. If this bit is set and the operation is successful (status register), then the next VREG write must be to set MM_Wake. If any other VREG write is issued instead of setting MM_Wake after MM_Sleep, then that VREG write is ignored. 2 - MM_Start This bit must be set before any sensor is enabled. It can be set only once, after POR. This bit must be set in HOST SF lib initialization. It is only cleared on POR. This bit is required to start the sensor hub. If this bit is not enabled, the sensor enable bits cannot be set. This bit should not be set by user application and should always read as “1” for the user application. 3 - MM_Reset On setting this bit, the HOST SF lib issues a HID/I2C reset. This also resets the SHC (except MM_Start), Sensitivity, data rate and data virtual registers to POR values. This is an auto clearing bit. 4 - Acc EN On setting this bit, the Acc is enabled. Its data can be read from the Acc data register. 5 - Gyro EN On setting this bit, the Gyro is enabled. Its data can be read from the Gyro data register. 6 - Cmp EN On setting this bit, the Cmp is enabled. Its data can be read from the Cmp data register. 7 - Ori EN On setting this bit, the Ori is enabled. Its data can be read from the Ori data register. 8 - Incl EN On setting this bit, the Incl is enabled. Its data can be read from the Incl data register. 9, 10 - RES Reserved bits for future use. 11 - Raw Acc EN On setting this bit, the user is enabled to read raw data of Acc from the raw Acc data register 12 - Raw Gyro EN On setting this bit, the user is enabled to read raw data of Gyro from the raw Gyro data register 13 - Raw Mag EN On setting this bit, the user is enabled to read raw data of Mag from the raw Mag data register. 14, 15- RES Reserved bits for future use Note: Raw sensors require their corresponding physical / virtual sensors to be enabled. Please refer to Section 3.2.2.1 “Register 00h: Sensor Hub Config (SHC)” for more information. 2014 Microchip Technology Inc. Advance Information DS00001873A-page 5 AN1873 3.1.1.2 Register 01h: Sensor List (SL) - Access Type: R - POR Default: 0x0000 TABLE 3-4: VREG - 01H BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8 RES RES RES RES RES RES RES RES BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 RES RES Cmp Ori Incli Gyro Mag Acc This SL Register is used to track all the sensors (physical and virtual) available in the sensor hub solution. For instance if BIT0 is set, then Acc sensor is available in the sensor Hub solution. If a sensor’s corresponding bit is not set in the SL register, it indicates that the particular sensor is not present on the Sensor Hub and all the registers and bits related to that sensor becomes reserved and not accessible by user. Note: 3.1.1.3 The SL register is populated after the MM_Start bit is set in SHC register. Register 02h-0Bh: xxxx Sensitivity - Access Type: R/W - POR Default: 0x0000 Registers from offset 02h-0Bh are used to set the sensitivity of each respective sensor. For instance ACSEN (Acc Sensitivity) register is used to set the sensitivity of the Acc sensor. This register can be read to identify the current Sensitivity of the sensor. 3.1.1.4 Register 0Ch-15h: xxxx Data Rate - Access Type: R/W - POR Default: 0x0000 Registers from offset 0Ch-15h are used to set the Data Rate of each respective sensor in milliseconds. The minimum report interval supported is 10 milliseconds. For instance, the ACDR Register is used to set the data rate or report interval for the Accelerometer sensor. In order to get a data sample every 30 milliseconds, this register must be set to 0x001E. This register can be read to identify the current Data Rate /Report interval of the desired sensor. 3.1.1.5 Register 16h-35h: xxxx Data - Access Type: R - POR Default: 0x0000 Registers from offset 16h-35h are used to get the Data of each respective sensor. Sensor Data can be read only if the sensor is enabled in the SHC register. Sensor data is updated based on the default report interval supported by the sensor or the user modified report interval; the report interval will be available in the data rate registers. It should be noted that the user application must read the data of a sensor in ascending order of the register offsets. For instance Accelerometer has 3 data registers – AccX, AccY,AccZ, these registers must be read in the order AccX, AccY and then AccZ. If the sensors are disabled, these registers are cleared. Note: 3.1.1.6 Mag FluxX Data, Mag FluxY Data, Mag FluxZ Data registers are updated when compass is enabled. Register 36h: Product ID - Access Type: R - POR Default: 0x0000 This register provides the product ID of the device. This register is populated after the MM_Start bit is set in SHC register and is cleared only on POR. DS00001873A-page 6 Advance Information 2014 Microchip Technology Inc. AN1873 3.1.1.7 Register 37h: Vendor ID - Access Type: R - POR Default: 0x0000 This register provides the product ID of the device. This register is populated after the MM_Start bit is set in SHC register and is cleared only on POR. 3.1.1.8 Register 38h: Device ID - Access Type: R - POR Default: 0x0000 This register provides the product ID of the device. This register is populated after the MM_Start bit is set in SHC register and is cleared only on POR. 3.1.1.9 Register 39-3Eh: Exponents - Access Type: R - POR Default: 0x0000 Registers 0x39-0x3B gives the unit exponent value of each sensor’s data register. Registers 0x3A-0x3E gives the unit exponent value of each sensor’s sensitivity register. TABLE 3-5: EXPONENTS REGISTER BITS DEFINITION Registers Exponent1(0x39) Exponent2(0x3A) Exponent3(0x3B) ExponentCS1(0x3C) ExponentCS2(0x3D) ExponentCS3(0x3E) 2014 Microchip Technology Inc. Bits Sensors 0-3 Acc data exponent value 4-7 Gyro data exponent value 8-11 Cmp data exponent value 12-15 Ori data exponent value 0-3 Incl data exponent value 4-11 Reserved 12-15 Raw Acc data exponent value 0-3 Raw Mag data exponent value 4-7 Raw Gyro data exponent value 8-15 Reserved 0-3 Acc sensitivity exponent value 4-7 Gyro sensitivity exponent value 8-11 Cmp sensitivity exponent value 12-15 Ori sensitivity exponent value 0-3 Incl sensitivity exponent value 4-11 Reserved 12-15 Raw Acc sensitivity exponent value 0-3 Raw Mag sensitivity exponent value 4-7 Raw Gyro sensitivity exponent value 8-15 Reserved Advance Information DS00001873A-page 7 AN1873 TABLE 3-6: UNIT EXPONENT ENCODING AND MEANINGS Value Exponent 0x00 Power of Ten 1x10E0 1 0x01 1x10E1 10 0x02 1x10E2 100 0x03 1x10E3 1 000 0x04 1x10E4 10 000 0x05 1x10E5 100 000 0x06 1x10E6 1 000 000 0x07 1x10E7 10 000 000 0x08 1x10E-8 0.00 000 001 0x09 1x10E-7 0.0 000 001 0x0A 1x10E-6 0.000 001 0x0B 1x10E-5 0.00 001 0x0C 1x10E-4 0.0 001 0x0D 1x10E-3 0.001 0x0E 1x10E-2 0.01 0x0F 1x10E-1 0.1 3.1.1.10 Register 3F-42h: xxxx Status - Access Type: R/W - POR Default: 0x0000 These registers are used to give the status of operation supported in SHC/xxxx sensitivity/xxxx Data rate registers. It will indicate whether the intended operation has been completed or if there has been an error. There are 4 status registers in all. All the status registers have the same sequence to clear the status. Once the status is cleared, the VREG operation is repeated again. 3.1.1.11 Register 3F: Status 1, Register 40: Status 2 Bit0-Bit3 These bits hold the status for sensor enable bits in SHC register. 2 Bits are allocated for every sensor enable bit. The status register can be cleared only when they hold a sensor enable/disable failed status or after a reset. The 2 bits indicate the following status: TABLE 3-7: STATUS OF SENSORS ENABLE xxxx status1 xxxx status0 0 0 Clear status register 0 1 Sensor enable successful 1 0 Sensor disable successful 1 1 Sensor enable/disable failed DS00001873A-page 8 Description Advance Information 2014 Microchip Technology Inc. AN1873 3.1.1.12 Register 40: Status 2 Bit4-Bit15, Register 41-42: Status 3, 4 The status 2, 3, 4 registers also hold the status bits for Sensor sensitivity change and sensor data rate VREG. 3 bits are allocated for every sensor‘s sensitivity and data rate register. The 3 bits indicate the following status: TABLE 3-8: STATUS OF SENSORS DATA RATE AND SENSITIVITY CHANGES xxxx CS/Data2 (Error bit) xxxx CS/Data1 (Data rate bit) xxxx CS/Data0 (Sensitivity bit) 0 0 0 Clear Data rate status bits. 0 1 0 Update Data rate successful 0 0 1 Update sensitivity successful 0 1 1 Both data rate and sensitivity update successful 1 0 0 Clear Sensitivity status bits. 1 1 0 Update Data rate error 1 0 1 Update sensitivity error 1 1 1 Both data rate and sensitivity error 3.1.1.13 Description Register 42: Bit 3-6 The bits 3 and 4 have status for the MM_Start bit in the SHC register. The following table indicates the status: TABLE 3-9: STATUS OF MM_START BIT MM_Start status1 MM_Start status0 Description 0 0 Clear status register 0 1 MM_Start successful 1 0 Don’t care 1 1 MM_Start error Similarly, bits 5 and 6 have status for the reset bit in the SHC register. The following table indicates the status: : TABLE 3-10: STATUS OF MM_RESET BIT MM_Reset status1 MM_Reset status0 0 0 0 1 MM_Reset successful 1 0 Don’t care 1 1 MM_Reset error 3.1.1.14 Description Clear status register Register 42: Bit 7-9 3 bits are allocated for MM_Sleep and MM_Wake up. The 3 bits indicate the following status: TABLE 3-11: STATUS OF MM_SLEEP & MM_WAKE BITS xxxx CS/Data2 (Error bit) xxxx CS/Data1 (SH wake bit) 0 0 0 Clear MM_Wake status bits 0 1 0 MM_Wake successful 0 0 1 MM_Sleep successful 0 1 1 Don’t care 1 0 0 Clear MM_Sleep status bits. 1 1 0 MM_Wake error 1 0 1 MM_Sleep error 1 1 1 Don’t care 2014 Microchip Technology Inc. xxxx CS/Data0 (SH sleep bit) Description Advance Information DS00001873A-page 9 AN1873 3.1.2 VREG ACCESS Two APIs will be available to the user for all the VREGs in the VREG map. These APIs are: • HOST_SF_Lib_VREG_write • HOST_SF_Lib_VREG_read 3.1.2.1 Function Prototype UINT8 HOST_SF_LIB_VREG_read (UINT8 offset, UINT16* data) Function to read the content of virtual registers Where offset offset is the offset/register address of the virtual register data* data is the pointer to which the VREG data is read into. return Returns 0 if success, else returns Error code UINT8 HOST_SF_LIB_VREG_write (UINT8 offset, UINT16 data) Function to queue the write request to virtual registers Where offset offset is the offset/register address of the virtual register data data is the content that has to be written to the VREG return Returns 0 if success, else returns Error code Note: 3.1.2.2 Both VREG_write and VREG_read are non-blocking calls. VREG Write mechanism Any user application can issue a VREG write with a desired 2 byte value. On success, the 2 byte value is written to the selected VREG. If the write is not successful, an error code is returned. However a VREG write success does not indicate that the desired operation is successful. The status bits of the status VREG give the status of the VREG related operations. 3.1.2.3 VREG Read Mechanism Every time an application issues a VREG read, it is immediately serviced by HOST SF Lib and the registers two byte value is returned. Only for the data registers, the register needs to be read in ascending order of their offsets for a particular sensor. 3.1.2.4 VREG Write/Read Error Codes TABLE 3-12: VREG ERROR CODE Error Codes Description 0x00 Success 0x01 Error in access type 0x02 Unrecognized VREG offset DS00001873A-page 10 Advance Information 2014 Microchip Technology Inc. AN1873 3.1.3 VREG INITIALIZATION (HOST SF LIB INITIALIZATION) The following sequence of operations must be done during initialization of SF lib: • • • • • Configure the I2C CLK and Data lines Configure the GPIO interrupt attention line Configure the GPIO wake up line Initialize all the virtual registers Set MM_Start bit in SHC register (this bit must be set by Host SF lib init) Initialization process will require up to ~5s since HID/I2C reset of the device can take up to 5s as per HID/ I2C spec. Note: 3.2 VREG to HID translation Every virtual register setting needs to be handled and most of them translate directly or indirectly into a HID/I2C packet. This section gives an overview on how to access these registers. It also provides information on the HID translation required for each Bit/Registers provided in the VREG map. TRANSLATION OF VIRTUAL REGISTERS TO HID/I2C PROTOCOL 3.2.1 The translation of HID/I2C protocol with respect to virtual register content is carried out under this topic. The virtual registers can be divided into two categories based on HID/I2C back-end support: • Command request based • Device data reading based 3.2.2 COMMAND REQUEST BASED The Virtual Registers that come under this category are based on Class specific requests (as per HID/I2C spec). The registers are: • Sensor Hub Configuration Register • Sensor Sensitivity Registers • Sensor Data Rate Registers 3.2.2.1 Register 00h: Sensor Hub Config (SHC) TABLE 3-13: Bits MM_Wake SENSOR HUB CONFIGURATION OPERATIONS HID/I2C requests sequence When this bit is set, the HOST SF LIB needs to issue wake signal, and wait for 11ms and send the following HID/I2C request sequence: 1. SET POWER (ON) Note: MM_Sleep 2014 Microchip Technology Inc. The following actions are to be taken: 1. After successful wake up, BIT1 (MM_Sleep bit) of this register must be cleared. Wait for another 30ms before sending other command to Motion Module When this bit is set, HOST SF LIB must send the following HID/I2C request: 1. SET POWER (SLEEP) Note: Action to be taken before/after the HID requests This bit is effective, only if all sensors are disabled. If any sensor is enabled, then this bit is not valid and will abort the operation that is trying to set it. Wait for 70ms after sleep command is sent before issuing the wake signal. Advance Information DS00001873A-page 11 AN1873 TABLE 3-13: SENSOR HUB CONFIGURATION OPERATIONS (CONTINUED) HID/I2C requests sequence Bits 2 Action to be taken before/after the HID requests MM_Start HID/I C request sequences: 1. Get HID descriptor 2. SET POWER (ON) 3. RESET 4. Get Report descriptor 5. Get Feature Report for all available sensors If step 1 fails, the operation is aborted immediately with an error. If step 4 fails, the operation is returned with an error. The following actions are to be taken: 1. Parse HID descriptor • Retrieve max input report length • Retrieve register addresses of report descriptor, request register and data register • Retrieve length of report descriptor 2. Parse Report descriptor • Retrieve the sensors available and populate sensor list (VREG) accordingly • Identify the report IDs of various sensors • Retrieve the sizes of all feature reports • Identify the offset of sensor data field in input report • Identify the offset of default sensitivity and data rate in the feature reports 3. Parse Feature Reports • Retrieve the default sensitivity and data rate of all sensors and populate the appropriate sensor’s data rate and sensitivity virtual registers with the retrieved values • Get the exponent values of all sensors and populate the sensor exponent virtual registers MM_Reset When this bit is set, HOST SF LIB must send the following HID/I2C request: 1. RESET If step 1 fails, the operation is aborted with an error. The following actions are to be taken: 1. On a successful reset, this bit is cleared 2. The Sensitivity, data rate and status virtual registers need to be reset to POR values except MM_Start status bits 3. All the bits in the SHC must be cleared, since on reset all sensors are disabled except MM_Start bit DS00001873A-page 12 Advance Information 2014 Microchip Technology Inc. AN1873 TABLE 3-13: SENSOR HUB CONFIGURATION OPERATIONS (CONTINUED) HID/I2C requests sequence Bits Acc EN Gyro EN Cmp EN Ori EN Incl EN Raw Acc EN Raw Gyro EN Raw Mag EN When any of these bits are set, HOST SF LIB must send the following HID/I2C request: 1. GET FEATURE REPORT 2. SET FEATURE REPORT • Set sensor power state to HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_- Action to be taken before/after the HID requests The following actions are to be taken: 1. Issue the get feature report with the appropriate report ID for the chosen sensor 2. The feature report length must also be obtained from the report descriptor 3. Only if this bit is set, the sensor data virtual register must be readable FULL_POWER_ENUM • Set sensor reporting state to HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_ENUM 3. SET FEATURE REPORT If step 1,2 or 3 fails, the operation is aborted with an error. Feature report set in step 2, must be same as what is received in step 3, else steps 2 and 3 needs to be repeated upto 3 times. If the command sequence still fails, return with an error. If this bit is cleared, do the same operation as above but in step 2 set sensor power state to HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_ENUM RES Reserved bits for future use In addition to the above table, for any raw sensor to be enabled properly, the corresponding sensors given below must also be enabled. Note: It is advised to set the sensitivity registers of both – Raw sensor and Corresponding sensor to Zero to achieve the desired data rates for raw sensors. Non-zero values for sensitivity for either the raw sensor or the corresponding sensor might not guarantee data rate (especially if desired data rate is more than 60ms) in the data rate register for raw sensors. If multiple bits are set, then the following priority table is followed. If MM_Reset bit is set, it will override the other bits and will reset the device and also all the other bits in this register. MM_Wake and MM_Sleep are always complimentary, if they are given the same values, then both of them are not modified. MM_Sleep is only set if all the other bits (except MM_Start) are cleared. TABLE 3-14: SENSOR HUB CONFIGURATION PRIORITY Bits Priorities MM_Wake - MM_Sleep - MM_Start - MM_Reset High Acc EN Medium Gyro EN Medium Cmp EN Medium Ori EN Medium Incl EN Medium Raw Acc EN Medium Raw Gyro EN Medium Raw Mag EN Medium 2014 Microchip Technology Inc. Advance Information DS00001873A-page 13 AN1873 Note: 3.2.2.2 It is always advised to enable accelerometer, before enabling any other sensor. This will ensure appropriate data rate by detecting any movements of the device. Register 02h-0Bh: xxxx Sensitivity When this Register is written, the following HID/I2C requests must be issued: 1. 2. 3. GET FEATURE REPORT SET FEATURE REPORT GET FEATURE REPORT The following actions are to be taken: 1. 2. Issue the set feature report with all the fields same except the sensitivity field which will have the new value now. Verify the SET FEATURE REPORT with a GET FEATURE REPORT and if the sensitivity has not been changed, re-issue the SET FEATURE report. This sequence has to be repeated three times. If sensitivity is still not set, then return with an error. 3.2.2.3 Register 0Ch-15h: xxxx DataRate When this Register is written, the following HID/I2C requests must be issued: 1. 2. 3. GET FEATURE REPORT SET FEATURE REPORT GET FEATURE REPORT The following actions are to be taken: 1. 2. Issue the set feature report with all the fields same except the report interval field which will have the new value now. Verify the SET FEATURE REPORT with a GET FEATURE REPORT and if the report interval has not been changed, re-issue the SET FEATURE report. This sequence has to be repeated three times. If report interval is still not set, then return with an error. Note: 3.2.3 Set sensitivity to zero, to achieve correct Data Rate without any movement. DEVICE DATA READING BASED The Virtual Registers that come under this category are based on the data read from MM7150: • Sensor Data Registers 3.2.3.1 Register 16h-35h: xxxx Data When the alert line is pulled low by MM7150, the most recent data is read from the host. On reading the input report, the following actions are to be taken: 1. 2. Whenever an Input Report is read, the Report must be parsed to identify the report ID. After identifying the sensor related to the Report ID, the data must be parsed and filled into the appropriate sensor data registers. It should be taken care that the sensor data registers must be locked when being written to. However, before locking the sensor data registers, the previous data in sensor data registers must be stored into another shadow registers. The user must be able to read the data register at all times when the sensor is enabled. When the user tries to read data when the sensor data registers are being updated (or locked), then user must be given the previous data. Once the user completes reading the last data register of a particular sensor then the previous data registers are cleared. If the sensor is disabled, the data register of that sensor must read 0x0000. DS00001873A-page 14 Advance Information 2014 Microchip Technology Inc. AN1873 3.2.4 3.2.4.1 OTHER REGISTERS AND FUNCTIONALITIES Register 01h: Sensor List (SL) This Register is not directly related to HID/I2C. This register holds data based on the sensors available on the hardware. This register is to be populated whenever the MM_Start bit in SHC is set. This register is written only once and will be cleared only on POR. 3.2.4.2 PID, VID, DID Registers These registers are to be populated whenever the MM_Start bit in SHC is set. These registers are written only once and will be cleared only on POR. 3.2.4.3 Register 39-3Eh: Exponent Registers These registers are to be populated whenever the MM_Start bit in SHC is set. These registers are written only once and will be cleared only on POR. 3.2.4.4 Status registers All the write accessible bits in registers have corresponding bits in the status registers. These status bits needs to be populated based on success/failure of a VREG write on a particular VREG. 3.2.5 VREG IMPLEMENTATION BRIEF Every VREG bit has a corresponding operation related to it. Based on the VREG bits, the VREG to HID translation must take place and the status registers must be updated with the appropriate status. If the user needs to re-issue any operation based on VREG bit, then the corresponding status bit must be cleared. Host SF lib must start the VREG to HID translation on the following conditions: • Check if Bit is set in VREG • Check if the corresponding status bits are in cleared state 3.3 HID/I2C Parser The HID/I2C parser is the layer that provides the HID APIs. The whole HID I2C protocol is carried out under this topic, the I2C request from HOST SF LIB request control flow is sub divided into two parts: • Descriptor request sequence • Device Command request sequence 3.3.1 3.3.1.1 DESCRIPTOR REQUEST SEQUENCE HID Descriptor The HOST SF LIB must perform I2C combined read for the device descriptor reading sequence and must read 0x1E bytes. FIGURE 3-1: Note: EXAMPLE FOR DEVICE DESCRIPTOR RETRIEVAL Device Descriptor address is 0x0001 in this case. Device descriptor Register needs to be available in a specified location in flash. 2014 Microchip Technology Inc. Advance Information DS00001873A-page 15 AN1873 3.3.1.2 Report Descriptor The HOST SF LIB requests for the Report descriptor on successful read of the Device descriptor, HOST SF LIB issues the report address specified in the device descriptor for the report descriptor retrieval. I2C combined write read is used for this reading sequence. FIGURE 3-2: Note: EXAMPLE FOR REPORT DESCRIPTOR RETRIEVAL Report Descriptor Address is 0x0002 in this case. 3.3.2 DEVICE COMMAND REQUEST SEQUENCE The various commands which must be taken care in the HOST SF LIB are as follows: • • • • Reset Get Report Set Report Set Power 3.3.2.1 Reset The reset command is a request that the HOST SF LIB can issue to the DEVICE at any time. 3.3.2.1.1 Reset Request Reset request type will be as follows: TABLE 3-15: RESET REQUEST TYPE Data Value Remarks High Byte RESERVED 0000b This value is reserved and must be set to 0000b OpCode 0001b This value is reserved for the RESET Command RESERVED 00b This value is reserved and must be set to 00b Report Type 00b The HOST SF LIB shall always set this to the specified value. The DEVICE shall ignore this value and treat it as null. 0000b The HOST SF LIB shall always set this to the specified value. The DEVICE shall ignore this value and treat it as null. Low Byte Report ID 3.3.2.1.2 Reset Response After the HOST SF LIB sends the RESET command to the Command Register, the DEVICE shall RESET itself back to the initialized state. At the end of the reset, the DEVICE also writes a 2 Byte value to the Input Register with the sentinel value of 0x0000 (2 Bytes containing 0) and asserts the Interrupt to indicate that it has been initialized. The HOST SF LIB must read the input register on reset and interpret the device has been reset if these values have been written. Note: Device needs to respond within 5 seconds for this request – otherwise HOST SF LIB must consider the device as inoperable. DS00001873A-page 16 Advance Information 2014 Microchip Technology Inc. AN1873 3.3.2.1.3 Reset Command Sequence The following is the sequence of operations on the HOST SF LIB end and the DEVICE end for this specific request: TABLE 3-16: RESET COMMAND OPERATIONS Host SF LIB Side Step 1 Device (MM7150) Side HOST SF LIB sends RESET to Command Register Step 2 DEVICE reinitializes itself completely, updates the input register data length field with 0x0000 and then triggers the interrupt. FIGURE 3-3: 3.3.2.2 EXAMPLE OF RESET COMMAND Get Report The Get report command is a request (Input or Feature reports) that the HOST SF LIB can issue to the DEVICE at any time after initialization to get a singular report from the DEVICE. 3.3.2.2.1 Get report Request Get report request type will be as follows: TABLE 3-17: GET REPORT REQUEST TYPE Data Value Remarks High Byte RESERVED 0000b This value is reserved and must be set to 0000b OpCode 0001b This value is reserved for the GET_REPORT Command RESERVED 00b This value is reserved and must be set to 00b Report Type {Input (01) | Feature (11)} The HOST SF LIB shall always set this to the specified value based on the report type the HOST SF LIB is trying to get. The DEVICE shall honor this value and return data only if supported in the Report Descriptor for the specified report. xxxxb The HOST SF LIB shall always set this to the specified value based on the TLC specific report the HOST SF LIB is trying to get. The DEVICE shall honor this value per the rules outlined in the notes section below Low Byte Report ID 3.3.2.2.2 Get Report Response After the HOST SF LIB sends the GET_REPORT command to the Command Register, the DEVICE will fill the report in to the DATA Register. A DEVICE may optionally stretch the clock for the subsequent HOST SF LIB read per repeated start. The Data shall be packaged as follows: • Length of Report (2 Bytes) • Report including Report ID 2014 Microchip Technology Inc. Advance Information DS00001873A-page 17 AN1873 The HOST SF LIB does not issue a new command to the Device (except the RESET Command) until this command has been completed and data has been sent back to the HOST SF LIB. If the DEVICE fails to respond back within a HOST SF LIB defined period of time (generally longer than 5 seconds) the HOST SF LIB is allowed to RESET the DEVICE. 3.3.2.2.3 Get Report Command Sequence The following is the sequence of operations on the HOST SF LIB end and the DEVICE end for this specific request: TABLE 3-18: GET REPORT COMMAND OPERATIONS Host SF LIB Side Step 1 Device (MM7150) Side HOST SF LIB sends GET_REPORT to Command Register Step 2 DEVICE fills the Data Register (with length of report and data) to report back to HOST SF LIB. Step 3 HOST SF LIB reads the first 2 Bytes of DATA register to identify length of report and then reads remainder of data (length identified above) from DATA Register FIGURE 3-4: 3.3.2.3 EXAMPLE OF GET REPORT COMMAND Set Report The Set Report command is a specific request that the HOST SF LIB may issue to the DEVICE at any time after initialization to set a singular report on the DEVICE. 3.3.2.3.1 Set report Request The HOST SF LIB shall issue this to the command register and then fill the data register with the report being sent to the DEVICE. The Data shall be packaged as follows: • Length of Report (2 Bytes) • Report including Report ID TABLE 3-19: SET REPORT REQUEST TYPE Data Value Remarks High Byte RESERVED 0000b This value is reserved and must be set to 0000b OpCode 0011b This value is reserved for the SET_REPORT Command 00b This value is reserved and must be set to 00b Low Byte RESERVED DS00001873A-page 18 Advance Information 2014 Microchip Technology Inc. AN1873 TABLE 3-19: SET REPORT REQUEST TYPE (CONTINUED) Data Value Report Type Report ID 3.3.2.3.2 Remarks {Output (10) | Feature (11)} The HOST SF LIB shall always set this to the specified value based on the report type the HOST SF LIB is trying to set. The DEVICE shall honor and accept this report if the report type is supported in the Report Descriptor for the specified TLC. xxxxb The HOST SF LIB shall always set this to the specified value based on the TLC specific report the HOST SF LIB is trying to set. The DEVICE shall honor this value per the rules outlined in the notes section below Set Report Response The DEVICE shall not need to respond back after receiving the data on the device register. 3.3.2.3.3 Set Report Command Sequence The following is the sequence of operations on the HOST SF LIB end and the DEVICE end for this specific request: TABLE 3-20: SET REPORT COMMAND OPERATIONS Host SF LIB Side Step 1 HOST SF LIB sends SET_REPORT to Command Register Step 2 HOST SF LIB fills the Data Register with length and report and writes to the DEVICE. Step 3 DEVICE interprets the command and performs the necessary actions. The DEVICE does not need to respond back to HOST SF LIB. FIGURE 3-5: 3.3.2.4 Device (MM7150) Side EXAMPLE OF SET REPORT COMMAND Set Power The Set Power command is a specific request that the HOST SF LIB may issue to the DEVICE to identify the Power State that the DEVICE should Transition to. 3.3.2.4.1 Set Power Request The Low Byte uses a special format in the case of SET_POWER Request. The Low byte contains the Power State. The following are the defined Power State values: 00 = ON 01 = SLEEP 1x = RESERVED 2014 Microchip Technology Inc. Advance Information DS00001873A-page 19 AN1873 TABLE 3-21: SET POWER REQUEST TYPE Data Value Remarks High Byte RESERVED 0000b This value is reserved and must be set to 0000b OpCode 1000b This value is reserved for the SET_POWER Command RESERVED 000000b This value is reserved and must be set to 000000b Power State {On (00) | SLEEP (01)} The HOST SF LIB shall always set this to the Power State that the DEVICE is required to transition to. Low Byte 3.3.2.4.2 Set Power Response The DEVICE shall not respond back after receiving the command. The DEVICE is mandated to enter that power state imminently. 3.3.2.4.3 Set Power Sequence The following is the sequence of operations on the HOST SF LIB end and the DEVICE end for this specific request: TABLE 3-22: SET POWER COMMAND OPERATIONS Host SF LIB Side Step 1 Device (MM7150) Side HOST SF LIB sends SET_POWER to Command Register Step 2 DEVICE interprets the command and transitions to the appropriate power state. The DEVICE does not need to respond back to HOST SF LIB. FIGURE 3-6: SET POWER FOR DEVICE ON FIGURE 3-7: SET POWER FOR DEVICE SLEEP DS00001873A-page 20 Advance Information 2014 Microchip Technology Inc. AN1873 3.3.3 3.3.3.1 FUNCTION PROTOTYPE: HID I2C Descriptor handler VOID hid_i2c_descriptor_handler (UINT8 cmd_req); Where Command request from HOST SF LIB returns success/error code cmd_reg Return The various HOST SF LIB command requests are as follows. GET_HID_DESC GET_RPT_DESC 01 02 The pseudo code for the function is as follows: UINT8 hid_i2c_descriptor_handler (UINT8 cmd_req) { UINT8 status; Switch (cmd_req) { Case GET_HID_DESC: Issue the Get HID descriptor request Read the HID descriptor and store it. status = success/error code break; Case GET_RPT_DESC: Issue the Get Report descriptor request Read the Report descriptor and store it. status = success/error code break; } Return status } 3.3.3.2 HID I2C command handler UINT8 hid_i2c_cmd_process (UINT8 * buffer, UINT8 cmd_req, UINT8 report_id); Where *Buffer cmd_reg report_id Return Data Buffer pointer for the IN/OUT packet control Command request from HOST SF LIB Report ID for the command request from HOST SF LIB if applicable Returns success/error code The various HOST SF LIB command requests are as follows. RESET POWER_ON SLEEP HID_GET_RPT_INPT HID_GET_RPT_FEAT HID_SET_RPT_OUTP HID_SET_RPT_FEAT 01 02 03 04 05 06 07 The pseudo code for the function is as follows: UINT8 hid_i2c_cmd_process (UINT8 * buffer, UINT8 cmd_req, UINT8 report_id) { UINT8 status; Switch (cmd_req) { Case RESET: Issue the Reset command 2014 Microchip Technology Inc. Advance Information DS00001873A-page 21 AN1873 Read input register to verify if device has been reset status = success/error code break; Case POWER_ON: Issue the wake signal and wait for 11ms Issue the Power On command status = success/error code break; Case SLEEP: Issue the Sleep command status = success/error code break; Case HID_GET_RPT_INPT: Issue command for HID get report input for the particular report_id Fill in the * buffer with the data packet that is read back status = success/error code break; Case HID_GET_RPT_FEAT: Issue command for HID get report feature for the particular report_id Fill in the buffer with the Feature report data that is read back status = success/error code break; Case HID_SET_RPT_OUTP: Issue command for HID set report output for the particular report_id Set the output report data into the buffer for transfer status = success/error code break; Case HID_SET_RPT_FEAT: Issue command for HID set report Feature for the particular report_id Set the feature report data in the buffer that needs to be send status = success/error code break; default: status = error code break; } return status; } 3.3.3.3 Error codes Following Error codes are returned as status in the HID/I2C parser layer: TABLE 3-23: ERROR CODE FOR HID/I2C PARSER LAYER Error Code Description 00 Success 01 HID descriptor retrieval failed: No response from device, wrong HID descriptor register address 02 HID descriptor retrieval failed: VID, PID is zero 03 Report descriptor retrieval failed: No response from device, wrong report descriptor register address 04 Report descriptor retrieval failed: Did not receive the complete report descriptor, error in Report descriptor length that’s given in the HID descriptor 05 Report descriptor retrieval failed: Invalid Report Descriptor, end of collection is not found 06 Get feature report Failed: Report id field is null 07 Set Feature Report Failed 08 Reset failed, input register not having 00 00 values DS00001873A-page 22 Advance Information 2014 Microchip Technology Inc. AN1873 I2C/SMBus driver layer 3.4 This is the physical layer that directly interacts with the MM7150 motion module. The physical layer might be an I2C stack or a SMBus stack based on the hardware support in the MM7150 HOST SoC. The functionality of this layer can be split into 3 main components: • Master read • Master write • Alert line handling Apart from supporting read/write, this layer also needs to support alert line handling. 3.4.1 ALERT LINE HANDLING Alert Pin is a HOST SF LIB GPIO pin configured as per HID/I2C alert pin specification. The corresponding GPIO interrupt must also be enabled. When the alert line is pulled low, the HOST SF Lib must issue an I2C read for MAX INPUT REPORT LENGTH of bytes. 3.4.1.1 Data reading Sequence The following sequence of operations explains the process of retrieval of the Input Report: TABLE 3-24: INPUT REPORT OPERATIONS Sequence Host SF LIb Side Step 1 Step 2 Device (MM7150) Side DEVICE asserts the Interrupt indicating that it has an Input Report to send to HOST SF LIB. HOST SF LIB issues a READ request over the I2C protocol, after it receives the interrupt. Step 3 DEVICE returns the length (2 Bytes) and the entire Input Report. Step 4 If the DEVICE has no more Input Reports to send, it de-asserts the interrupt line. 2014 Microchip Technology Inc. Advance Information DS00001873A-page 23 AN1873 3.5 Vendor Collection Host SF lib supports sensor collection with the VREGs. To support Vendor collections, Host SF lib will give direct access to the HID/I2C layer within the HOST SF lib, thus giving access to issue HID get report, set report commands. 3.5.1 USER APIS Two APIs will be available to the user for implementing applications based on vendor collections: • HOST_SF_Lib_HID_Get_Feature • HOST_SF_Lib_HID_Set_Feature 3.5.1.1 Function Prototype UINT8 HOST_SF_LIB_ HID_Get_Report (UINT8 type, VOID* ReportBuffer, UINT8 size ) Function to read the content of virtual registers Where type ReportBuffer * size return type refers to feature or input report; type = 3 – feature, 1 - input ReportBuffer is the pointer to which the feature report is read into Specifies the size, in bytes, of the report buffer Returns 0 if success, else returns Error code UINT8 HOST_SF_LIB_ HID_Set_Feature (UINT8 type, VOID* ReportBuffer, UINT8 size) Function to queue the write request to virtual registers Where type ReportBuffer* size return Note: 3.5.1.2 type refers to feature or output report; type = 3 – feature, 2 - output ReportBuffer is the pointer data that needs to be sent to the device Specifies the size, in bytes, of the report buffer Returns 0 if success, else returns Error code The caller must set the first byte of the ReportBuffer parameter to a nonzero report ID. HOST_SF_LIB_ HID_Get_Report mechanism Any user application can issue a Get_report request, which will directly pass to the HID/I2C layer of Host SF lib to retrieve the desired report. The user application needs to wait till the transaction is complete (Blocking call). 3.5.1.3 HOST_SF_LIB_ HID_Set_Report mechanism Any user application can issue a Set_report request, which will directly pass to the HID/I2C layer of Host SF lib to send the desired report. The user application needs to wait till the transaction is complete (Blocking call). 3.5.1.4 Error code The error code returned by APIs will be the same as the error codes returned by the HID I2C parser layer (see Section 3.3, HID/I2C Parser for more information). Note: Any applications that use vendor collection will need to use these APIs to build their application. DS00001873A-page 24 Advance Information 2014 Microchip Technology Inc. AN1873 4.0 SAMPLE FLOW CHART FOR ACCELEROMETER POR H o s t S F L ib In itia liz a tio n M o tio n M o d u le W a ke A cc E n (in S H C ) No Yes C hange S e n so r C o n fig u re Yes A cc C o n fig u ra tio n: C h a n g e s e n sitivity o r re p o rt in te rva l No R e a d A cc D a ta fro m ACCXD, ACCYD, ACCZD Yes R e a d D a ta a g a in No D isa b le A cc S le e p Yes No ID L E 2014 Microchip Technology Inc. Advance Information DS00001873A-page 25 AN1873 APPENDIX A: SAMPLE CODE FOR ACCELEROMETER Sample application code that uses HOST SF lib to enable and use accelerometer. /* App init task: the Applications initialization function. */ void App init task (void) { return code = VREG_write (SHC, 0xYY)//Enable accelerometer return code = VREG_write (Accel_Sensitivity,02)//set sensitivity return code = VREG_write (Accel_data_rate, 10)//set data rate } //Note: VREG writes fail if a read-only register offset is given or an unsupported offset is given /* App main task: the Application’s main function. */ void App main task (void) { while (1) { return = VREG_read (status register, status) //Check if acc enable has been successful if (status == operation completed) { VREG_read (accel data) /*Do the required processing */ VREG_write (Accel_data_rate, 20) //change report interval based on some state return = VREG_read(status register, status) if (status == operation completed){ /*Do the desired operations*/ } else { if (status! = error) /*Do the task with current report interval, wait for the change report interval in next iteration*/ else /*If error is detected and Change report interval failed, then do error handling*/ } } else { if (status == error) //Issue Accel enable again or exit with accel enable failed } } } DS00001873A-page 26 Advance Information 2014 Microchip Technology Inc. 2014 Microchip Technology Inc. APPENDIX B: VREG ADDR (offset) REG ACC TYPE 00 R/W 01 R 02 R/W 03 VIRTUAL REGISTERS MAP REGISTER NAME ABBR BIT 15 BIT 14 BIT 13 BIT 12 BIT 11 BIT 10 BIT 9 BIT 8 BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 POR Advance Information SHC RES RES Raw Gyro EN Raw Mag EN Raw Acc EN RES RES Incl EN Ori EN Cmp EN Gyro EN Acc EN MM_R eset MM_S tart MM_Sl eep MM_ Wake 0x01 Sensor List SL RES RES RES RES RES RES RES RES RES RES RES Incl Ori Cmp Gyro Acc 0x00 Acc Sensitivity ACSEN ACSE N15 ACSE N14 ACSE N13 ACSE N12 ACSE N11 ACSE N10 ACSE N9 ACSE N8 ACSE N7 ACSE N6 ACSE N5 ACSE N4 ACSE N3 ACSE N2 ACSE N1 ACSE N0 0x00 R/W Gyro Sensitivity GYSEN GYSE N15 GYSE N14 GYSE N13 GYSE N12 GYSE N11 GYSE N10 GYSE N9 GYSE N8 GYSE N7 GYSE N6 GYSE N5 GYSE N4 GYSE N3 GYSE N2 GYSE N1 GYSE N0 0x00 04 R/W Cmp Sensitivity CMSEN CMSE N15 CMSE N14 CMSE N13 CMSE N12 CMSE N11 CMSE N10 CMSE N9 CMSE N8 CMSE N7 CMSE N6 CMSE N5 CMSE N4 CMSE N3 CMSE N2 CMSE N1 CMSE N0 0x00 05 R/W Ori Sensitivity ORSEN ORSE N15 ORSE N14 ORSE N13 ORSE N12 ORSE N11 ORSE N10 ORSE N9 ORSE N8 ORSE N7 ORSE N6 ORSE N5 ORSE N4 ORSE N3 ORSE N2 ORSE N1 ORSE N0 0x00 06 R/W Incl Sensitivity INSEN INSEN 15 INSEN 14 INSEN 13 INSEN 12 INSEN 11 INSEN 10 INSEN 9 INSEN 8 INSEN 7 INSEN 6 INSEN 5 INSEN 4 INSEN 3 INSEN 2 INSEN 1 INSEN 0 0x00 07 R/W Reserved - RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES 0x00 08 R/W Reserved - RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES 0x00 09 R/W Raw Acc Sensitivity RACSE N RACS EN15 RACS EN14 RACS EN13 RACS EN12 RACS EN11 RACS EN10 RACS EN9 RACS EN8 RACS EN7 RACS EN6 RACS EN5 RACS EN4 RACS EN3 RACS EN2 RACS EN1 RACS EN0 0x00 0A R/W Raw Mag Sensitivity RMGSE N RMGS EN15 RMGS EN14 RMGS EN13 RMGS EN12 RMGS EN11 RMGS EN10 RMGS EN9 RMGS EN8 RMGS EN7 RMGS EN6 RMGS EN5 RMGS EN4 RMGS EN3 RMGS EN2 RMGS EN1 RMGS EN0 0x00 0B R/W Raw Gyro Sensitivity RGYSE N RGYS EN15 RGYS EN14 RGYS EN13 RGYS EN12 RGYS EN11 RGYS EN10 RGYS EN9 RGYS EN8 RGYS EN7 RGYS EN6 RGYS EN5 RGYS EN4 RGYS EN3 RGYS EN2 RGYS EN1 RGYS EN0 0x00 0C R/W Acc Data Rate ACDXR ACDX R15 ACDX R14 ACDX R13 ACDX R12 ACDX R11 ACDX R10 ACDX R9 ACDX R8 ACDX R7 ACDX R6 ACDX R5 ACDX R4 ACDX R3 ACDX R2 ACDX R1 ACDX R0 0x00 0D R/W Gyro Data Rate GYDR GYDR 15 GYDR 14 GYDR 13 GYDR 12 GYDR 11 GYDR 10 GYDR 9 GYDR 8 GYDR 7 GYDR 6 GYDR 5 GYDR 4 GYDR 3 GYDR 2 GYDR 1 GYDR 0 0x00 0E R/W Cmp Data Rate CMDR CMDR 15 CMDR 14 CMDR 13 CMDR 12 CMDR 11 CMDR 10 CMDR 9 CMDR 8 CMDR 7 CMDR 6 CMDR 5 CMDR 4 CMDR 3 CMDR 2 CMDR 1 CMDR 0 0x00 AN1873 DS00001873A-page 27 Sensor Hub Configure REG ACC TYPE 0F R/W Ori Data Rate 10 R/W 11 R/W 12 R/W 13 REGISTER NAME Advance Information 2014 Microchip Technology Inc. BIT 15 BIT 14 BIT 13 BIT 12 BIT 11 BIT 10 BIT 9 BIT 8 BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 POR ORDR ORDR 15 ORDR 14 ORDR 13 ORDR 12 ORDR 11 ORDR 10 ORDR 9 ORDR 8 ORDR 7 ORDR 6 ORDR 5 ORDR 4 ORDR 3 ORDR 2 ORDR 1 ORDR 0 0x00 Incl Data Rate INDR INDR1 5 INDR1 4+F32 INDR1 3 INDR1 2 INDR1 1 INDR1 0 INDR9 INDR8 INDR7 INDR6 INDR5 INDR4 INDR3 INDR2 INDR1 INDR0 0x00 Reserved - RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES 0x00 Reserved - RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES 0x00 R/W Raw Acc Data Rate RACDR RACD R15 RACD R14 RACD R13 RACD R12 RACD R11 RACD R10 RACD R9 RACD R8 RACD R7 RACD R6 RACD R5 RACD R4 RACD R3 RACD R2 RACD R1 RACD R0 0x00 14 R/W Raw Mag Data Rate RMGDR RMGD R15 RMGD R14 RMGD R13 RMGD R12 RMGD R11 RMGD R10 RMGD R9 RMGD R8 RMGD R7 RMGD R6 RMGD R5 RMGD R4 RMGD R3 RMGD R2 RMGD R1 RMGD R0 0x00 15 R/W Raw Gyro Data Rate RGYDR RGYD R15 RGYD R14 RGYD R13 RGYD R12 RGYD R11 RGYD R10 RGYD R9 RGYD R8 RGYD R7 RGYD R6 RGYD R5 RGYD R4 RGYD R3 RGYD R2 RGYD R1 RGYD R0 0x00 16 R/W AccX Data ACXD ACXD 15 ACXD 14 ACXD 13 ACXD 12 ACXD 11 ACXD 10 ACXD 9 ACXD 8 ACXD 7 ACXD 6 ACXD 5 ACXD 4 ACXD 3 ACXD 2 ACXD 1 ACXD 0 0x00 17 R/W AccY Data ACYD ACYD 15 ACYD 14 ACYD 13 ACYD 12 ACYD 11 ACYD 10 ACYD 9 ACYD 8 ACYD 7 ACYD 6 ACYD 5 ACYD 4 ACYD 3 ACYD 2 ACYD 1 ACYD 0 0x00 18 R/W AccZ Data ACZD ACZD 15 ACZD 14 ACZD 13 ACZD 12 ACZD 11 ACZD 10 ACZD 9 ACZD 8 ACZD 7 ACZD 6 ACZD 5 ACZD 4 ACZD 3 ACZD 2 ACZD 1 ACZD 0 0x00 19 R/W Raw AccX Data RACXD ACXD 15 ACXD 14 ACXD 13 ACXD 12 ACXD 11 ACXD 10 ACXD 9 ACXD 8 ACXD 7 ACXD 6 ACXD 5 ACXD 4 ACXD 3 ACXD 2 ACXD 1 ACXD 0 0x00 1A R/W Raw AccY Data RACYD ACYD 15 ACYD 14 ACYD 13 ACYD 12 ACYD 11 ACYD 10 ACYD 9 ACYD 8 ACYD 7 ACYD 6 ACYD 5 ACYD 4 ACYD 3 ACYD 2 ACYD 1 ACYD 0 0x00 1B R/W Raw AccZ Data RACZD ACZD 15 ACZD 14 ACZD 13 ACZD 12 ACZD 11 ACZD 10 ACZD 9 ACZD 8 ACZD 7 ACZD 6 ACZD 5 ACZD 4 ACZD 3 ACZD 2 ACZD 1 ACZD 0 0x00 1C R/W GyroX Data GYXD GYXD 15 GYXD 14 GYXD 13 GYXD 12 GYXD 11 GYXD 10 GYXD 9 GYXD 8 GYXD 7 GYXD 6 GYXD 5 GYXD 4 GYXD 3 GYXD 2 GYXD 1 GYXD 0 0x00 1D R/W GyroY Data GYYD GYYD 15 GYYD 14 GYYD 13 GYYD 12 GYYD 11 GYYD 10 GYYD 9 GYYD 8 GYYD 7 GYYD 6 GYYD 5 GYYD 4 GYYD 3 GYYD 2 GYYD 1 GYYD 0 0x00 1E R/W GyroZ Data GYZD GYZD 15 GYZD 14 GYZD 13 GYZD 12 GYZD 11 GYZD 10 GYZD 9 GYZD 8 GYZD 7 GYZD 6 GYZD 5 GYZD 4 GYZD 3 GYZD 2 GYZD 1 GYZD 0 0x00 1F R/W Raw GyroX RGYXD Data RGYX D15 RGYX D14 RGYX D13 RGYX D12 RGYX D11 RGYX D10 RGYX D9 RGYX D8 RGYX D7 RGYX D6 RGYX D5 RGYX D4 RGYX D3 RGYX D2 RGYX D1 RGYX D0 0x00 ABBR AN1873 DS00001873A-page 28 VREG ADDR (offset) 2014 Microchip Technology Inc. VREG ADDR (offset) REG ACC TYPE 20 REGISTER NAME Advance Information BIT 15 BIT 14 BIT 13 BIT 12 BIT 11 BIT 10 BIT 9 BIT 8 BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 POR R/W Raw GyroY RGYYD Data RGYY D15 RGYY D14 RGYY D13 RGYY D12 RGYY D11 RGYY D10 RGYY D9 RGYY D8 RGYY D7 RGYY D6 RGYY D5 RGYY D4 RGYY D3 RGYY D2 RGYY D1 RGYY D0 0x00 21 R/W Raw GyroZ Data RGYZD RGYZ D15 RGYZ D14 RGYZ D13 RGYZ D12 RGYZ D11 RGYZ D10 RGYZ D9 RGYZ D8 RGYZ D7 RGYZ D6 RGYZ D5 RGYZ D4 RGYZ D3 RGYZ D2 RGYZ D1 RGYZ D0 0x00 22 R/W Cmp Data CMD CMD1 5 CMD1 4 CMD1 3 CMD1 2 CMD1 1 CMD1 0 CMD9 CMD8 CMD7 CMD6 CMD5 CMD4 CMD3 CMD2 CMD1 CMD0 0x00 23 R/W Mag FluxX Data MGFXD MGFX D15 MGFX D14 MGFX D13 MGFX D12 MGFX D11 MGFX D10 MGFX D9 MGFX D8 MGFX D7 MGFX D6 MGFX D5 MGFX D4 MGFX D3 MGFX D2 MGFX D1 MGFX D0 0x00 24 R/W Mag FluxY Data MGFYD MGFY D15 MGFY D14 MGFY D13 MGFY D12 MGFY D11 MGFY D10 MGFY D9 MGFY D8 MGFY D7 MGFY D6 MGFY D5 MGFY D4 MGFY D3 MGFY D2 MGFY D1 MGFY D0 0x00 25 R/W Mag FluxZ Data MGFZD MGFZ D15 MGFZ D14 MGFZ D13 MGFZ D12 MGFZ D11 MGFZ D10 MGFZ D9 MGFZ D8 MGFZ D7 MGFZ D6 MGFZ D5 MGFZ D4 MGFZ D3 MGFZ D2 MGFZ D1 MGFZ D0 0x00 26 R/W Raw MagX Data RMGXD RMGX D15 RMGX D14 RMGX D13 RMGX D12 RMGX D11 RMGX D10 RMGX D9 RMGX D8 RMGX D7 RMGX D6 RMGX D5 RMGX D4 RMGX D3 RMGX D2 RMGX D1 RMGX D0 0x00 27 R/W Raw MagY Data RMGYD RMGY D15 RMGY D14 RMGY D13 RMGY D12 RMGY D11 RMGY D10 RMGY D9 RMGY D8 RMGY D7 RMGY D6 RMGY D5 RMGY D4 RMGY D3 RMGY D2 RMGY D1 RMGY D0 0x00 28 R/W Raw MagZ Data RMGZD RMGZ D15 RMGZ D14 RMGZ D13 RMGZ D12 RMGZ D11 RMGZ D10 RMGZ D9 RMGZ D8 RMGZ D7 RMGZ D6 RMGZ D5 RMGZ D4 RMGZ D3 RMGZ D2 RMGZ D1 RMGZ D0 0x00 29 R/W OriX Data ORXD ORXD 15 ORXD 14 ORXD 13 ORXD 12 ORXD 11 ORXD 10 ORXD 9 ORXD 8 ORXD 7 ORXD 6 ORXD 5 ORXD 4 ORXD 3 ORXD 2 ORXD 1 ORXD 0 0x00 2A R/W OriY Data ORYD ORYD 15 ORYD 14 ORYD 13 ORYD 12 ORYD 11 ORYD 10 ORYD 9 ORYD 8 ORYD 7 ORYD 6 ORYD 5 ORYD 4 ORYD 3 ORYD 2 ORYD 1 ORYD 0 0x00 2B R/W OriZ Data ORZD ORZD 15 ORZD 14 ORZD 13 ORZD 12 ORZD 11 ORZD 10 ORZD 9 ORZD 8 ORZD 7 ORZD 6 ORZD 5 ORZD 4 ORZD 3 ORZD 2 ORZD 1 ORZD 0 0x00 2C R/W OriW Data ORWD ORW D15 ORW D14 ORW D13 ORW D12 ORW D11 ORW D10 ORW D9 ORW D8 ORW D7 ORW D6 ORW D5 ORW D4 ORW D3 ORW D2 ORW D1 ORW D0 0x00 2D R/W InclX Data INXD INXD1 5 INXD1 4 INXD1 3 INXD1 2 INXD1 1 INXD1 0 INXD9 INXD8 INXD7 INXD6 INXD5 INXD4 INXD3 INXD2 INXD1 INXD0 0x00 2E R/W InclY Data INYD INYD1 5 INYD1 4 INYD1 3 INYD1 2 INYD1 1 INYD1 0 INYD9 INYD8 INYD7 INYD6 INYD5 INYD4 INYD3 INYD2 INYD1 INYD0 0x00 2F R/W InclZ Data INZD INZD1 5 INZD1 4 INZD1 3 INZD1 2 INZD1 1 INZD1 0 INZD9 INZD8 INZD7 INZD6 INZD5 INZD4 INZD3 INZD2 INZD1 INZD0 0x00 30 R/W Reserved - RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES 0x00 AN1873 DS00001873A-page 29 ABBR REG ACC TYPE 31 R/W 32 R/W 33 REGISTER NAME ABBR BIT 15 BIT 14 BIT 13 BIT 12 BIT 11 BIT 10 BIT 9 BIT 8 BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 POR Advance Information 2014 Microchip Technology Inc. - RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES 0x00 Reserved - RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES 0x00 R/W Reserved - RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES 0x00 34 R/W Reserved - RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES 0x00 35 R/W Reserved - RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES RES 0x00 36 R Product ID PID PID15 PID14 PID13 PID12 PID11 PID10 PID9 PID8 PID7 PID6 PID5 PID4 PID3 PID2 PID1 PID0 0x00 37 R Vendor ID VID VID15 VID14 VID13 VID12 VID11 VID10 VID9 VID8 VID7 VID6 VID5 VID4 VID3 VID2 VID1 VID0 0x00 38 R DID DID15 DID14 DID13 DID12 DID11 DID10 DID9 DID8 DID7 DID6 DID5 DID4 DID3 DID2 DID1 DID0 0x00 39 R Exponent1 exp1 expO expO expO expO expC3 expC2 expC1 expC0 expG3 expG2 expG1 expG0 expA3 expA2 expA1 expA0 0x00 3A R Exponent2 exp2 expRA 3 expRA 2 expRA 1 expRA 0 RES RES RES RES RES RES RES RES expIn3 expIn2 expIn1 expIn0 0x00 3B R Exponent3 exp3 Res Res Res Res Res Res Res Res expRG 3 expRG 2 expRG 1 expRG 0 expR M3 expR M2 expR M1 expR M0 0x00 3C R ExponentC S1 expCSs 1 expCS sO expCS O expCS O expCS O expCS C3 expCS C2 expCS C1 expCS C0 expCS G3 expCS G2 expCS G1 expCS G0 expCS A3 expCS A2 expCS A1 expCS A0 0x00 3D R ExponentC S2 expCS2 expCS RA3 expCS RA2 expCS RA1 expCS RA0 RES RES RES RES RES RES RES RES expCS In3 expCS In2 expCS In1 expCS In0 0x00 3E R ExponentC S3 expCS3 Res Res Res Res Res Res Res Res expCS RG3 expCS RG2 expCS RG1 expCS RG0 expCS RM3 expCS RM2 expCS RM1 expCS RM0 0x00 3F R/W Status 1 stat1 Raw Acc status 1 Raw Acc status 0 RES RES RES RES Inc status 1 Inc status 0 Ori status 1 Ori status 0 Cmp status 1 Cmp status 0 GyroSt atus1 GyroSt atus0 AccSt atus1 AccSt atus0 0x00 40 R/W Status 2 stat2 Ori CS/ data2 Ori CS/ data1 Ori CS/ data0 Cmp CS/ data2 Cmp CS/ data1 Cmp CS/ data0 Gyro CS/ data2 Gyro CS/ data1 Gyro CS/ data0 Acc CS/ data2 Acc CS/ data1 Acc CS/ data0 Raw gyro Status 1 Raw gyro Status 0 Raw Mag Status 1 Raw Mag Status 0 0x00 Reserved Device ID AN1873 DS00001873A-page 30 VREG ADDR (offset) 2014 Microchip Technology Inc. VREG ADDR (offset) REG ACC TYPE 41 R/W Status 3 stat3 42 R/W Status 4 stat4 REGISTER NAME ABBR BIT 15 BIT 14 BIT 13 BIT 12 BIT 11 BIT 10 BIT 9 BIT 8 BIT 7 BIT 6 BIT 5 BIT 4 RES Raw Mag CS/ data2 Raw Mag CS/ data1 Raw Mag CS/ data0 Raw Acc CS/ data2 Raw Acc CS/ data1 Raw Acc CS/ data0 RES RES RES RES RES RES RES RES RES RES RES MM sleep / wake status 2 MM sleep / wake status 1 MM sleep / wake status 0 MM Reset status 1 MM Reset status 0 MM Start status 1 BIT 3 BIT 2 BIT 1 BIT 0 RES Incl CS/ data2 Incl CS/ data1 Incl CS/ data0 0x00 MMSt art status 0 Raw Mag CS/ data2 Raw Mag CS/ data1 Raw Mag CS/ data0 0x00 POR Advance Information AN1873 DS00001873A-page 31 AN1873 APPENDIX C: TABLE C-1: APPLICATION NOTE REVISION HISTORY REVISION HISTORY Revision Level & Date DS00001873A (12-22-14) DS00001873A-page 32 Section/Figure/Entry Correction Document Release Advance Information 2014 Microchip Technology Inc. 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. 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 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. Trademarks The Microchip name and logo, the Microchip logo, dsPIC, FlashFlex, flexPWR, JukeBlox, KEELOQ, KEELOQ logo, Kleer, LANCheck, MediaLB, MOST, MOST logo, MPLAB, OptoLyzer, PIC, PICSTART, PIC32 logo, RightTouch, SpyNIC, SST, SST Logo, SuperFlash and UNI/O are registered trademarks of Microchip Technology Incorporated in the U.S.A. and other countries. The Embedded Control Solutions Company and mTouch are registered trademarks of Microchip Technology Incorporated in the U.S.A. Analog-for-the-Digital Age, BodyCom, chipKIT, chipKIT logo, CodeGuard, dsPICDEM, dsPICDEM.net, ECAN, In-Circuit Serial Programming, ICSP, Inter-Chip Connectivity, KleerNet, KleerNet logo, MiWi, MPASM, MPF, MPLAB Certified logo, MPLIB, MPLINK, MultiTRAK, NetDetach, Omniscient Code Generation, PICDEM, PICDEM.net, PICkit, PICtail, RightTouch logo, REAL ICE, SQI, Serial Quad I/O, 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. Silicon Storage Technology is a registered trademark of Microchip Technology Inc. in other countries. GestIC is a registered trademarks 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. © 2014, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved. ISBN: 9781632768872 QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV == ISO/TS 16949 == 2014 Microchip Technology Inc. Microchip received ISO/TS-16949:2009 certification for its worldwide headquarters, design and wafer fabrication facilities in Chandler and Tempe, Arizona; Gresham, Oregon and design centers in California and India. The Company’s quality system processes and procedures are for its PIC® MCUs and dsPIC® DSCs, KEELOQ® code hopping devices, Serial EEPROMs, microperipherals, nonvolatile memory and analog products. In addition, Microchip’s quality system for the design and manufacture of development systems is ISO 9001:2000 certified. Advance Information DS00001873A-page 33 Worldwide Sales and Service AMERICAS ASIA/PACIFIC ASIA/PACIFIC EUROPE Corporate Office 2355 West Chandler Blvd. Chandler, AZ 85224-6199 Tel: 480-792-7200 Fax: 480-792-7277 Technical Support: http://www.microchip.com/ support Web Address: www.microchip.com Asia Pacific Office Suites 3707-14, 37th Floor Tower 6, The Gateway Harbour City, Kowloon Hong Kong Tel: 852-2943-5100 Fax: 852-2401-3431 India - Bangalore Tel: 91-80-3090-4444 Fax: 91-80-3090-4123 Austria - Wels Tel: 43-7242-2244-39 Fax: 43-7242-2244-393 Denmark - Copenhagen Tel: 45-4450-2828 Fax: 45-4485-2829 Australia - Sydney Tel: 61-2-9868-6733 Fax: 61-2-9868-6755 Atlanta Duluth, GA Tel: 678-957-9614 Fax: 678-957-1455 China - Beijing Tel: 86-10-8569-7000 Fax: 86-10-8528-2104 Austin, TX Tel: 512-257-3370 China - Chengdu Tel: 86-28-8665-5511 Fax: 86-28-8665-7889 Boston Westborough, MA Tel: 774-760-0087 Fax: 774-760-0088 Chicago Itasca, IL Tel: 630-285-0071 Fax: 630-285-0075 Cleveland Independence, OH Tel: 216-447-0464 Fax: 216-447-0643 Dallas Addison, TX Tel: 972-818-7423 Fax: 972-818-2924 Detroit Novi, MI Tel: 248-848-4000 Houston, TX Tel: 281-894-5983 Indianapolis Noblesville, IN Tel: 317-773-8323 Fax: 317-773-5453 Los Angeles Mission Viejo, CA Tel: 949-462-9523 Fax: 949-462-9608 New York, NY Tel: 631-435-6000 San Jose, CA Tel: 408-735-9110 Canada - Toronto Tel: 905-673-0699 Fax: 905-673-6509 DS00001873A-page 34 China - Chongqing Tel: 86-23-8980-9588 Fax: 86-23-8980-9500 China - Hangzhou Tel: 86-571-8792-8115 Fax: 86-571-8792-8116 China - Hong Kong SAR Tel: 852-2943-5100 Fax: 852-2401-3431 China - Nanjing Tel: 86-25-8473-2460 Fax: 86-25-8473-2470 China - Qingdao Tel: 86-532-8502-7355 Fax: 86-532-8502-7205 China - Shanghai Tel: 86-21-5407-5533 Fax: 86-21-5407-5066 China - Shenyang Tel: 86-24-2334-2829 Fax: 86-24-2334-2393 China - Shenzhen Tel: 86-755-8864-2200 Fax: 86-755-8203-1760 China - Wuhan Tel: 86-27-5980-5300 Fax: 86-27-5980-5118 China - Xian Tel: 86-29-8833-7252 Fax: 86-29-8833-7256 India - New Delhi Tel: 91-11-4160-8631 Fax: 91-11-4160-8632 India - Pune Tel: 91-20-3019-1500 Japan - Osaka Tel: 81-6-6152-7160 Fax: 81-6-6152-9310 Japan - Tokyo Tel: 81-3-6880- 3770 Fax: 81-3-6880-3771 Korea - Daegu Tel: 82-53-744-4301 Fax: 82-53-744-4302 Korea - Seoul Tel: 82-2-554-7200 Fax: 82-2-558-5932 or 82-2-558-5934 France - Paris Tel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79 Germany - Dusseldorf Tel: 49-2129-3766400 Germany - Munich Tel: 49-89-627-144-0 Fax: 49-89-627-144-44 Germany - Pforzheim Tel: 49-7231-424750 Italy - Milan Tel: 39-0331-742611 Fax: 39-0331-466781 Italy - Venice Tel: 39-049-7625286 Malaysia - Kuala Lumpur Tel: 60-3-6201-9857 Fax: 60-3-6201-9859 Netherlands - Drunen Tel: 31-416-690399 Fax: 31-416-690340 Malaysia - Penang Tel: 60-4-227-8870 Fax: 60-4-227-4068 Poland - Warsaw Tel: 48-22-3325737 Philippines - Manila Tel: 63-2-634-9065 Fax: 63-2-634-9069 Singapore Tel: 65-6334-8870 Fax: 65-6334-8850 Taiwan - Hsin Chu Tel: 886-3-5778-366 Fax: 886-3-5770-955 Spain - Madrid Tel: 34-91-708-08-90 Fax: 34-91-708-08-91 Sweden - Stockholm Tel: 46-8-5090-4654 UK - Wokingham Tel: 44-118-921-5800 Fax: 44-118-921-5820 Taiwan - Kaohsiung Tel: 886-7-213-7830 Taiwan - Taipei Tel: 886-2-2508-8600 Fax: 886-2-2508-0102 Thailand - Bangkok Tel: 66-2-694-1351 Fax: 66-2-694-1350 China - Xiamen Tel: 86-592-2388138 Fax: 86-592-2388130 China - Zhuhai Tel: 86-756-3210040 Fax: 86-756-3210049 Advance Information 03/25/14 2014 Microchip Technology Inc.