UM1948 User manual EVALSTPM3x-3PH evaluation board firmware Introduction The document describes the software implementation of the EVALSTPM3X-3PH power meter based on the STM8S903K3 microcontroller and the STPM33 and the STPM34 metrology devices, with a firmware within 8 kilobytes. Besides 3-phase power meter can also be used as a reference for 1-phase power meter. The evaluation board can be supposed as a whole “chip” (virtual 3-phase IC) application, to be connected with an STM32 family microcontroller by SPI or UART. Setting the STM8S903K3 microcontroller dummy, the STPM34 or the STPM33 can be controlled by the external microcontroller independently via SPI interface. In this case, the firmware in the STM8S903K3 can be ported into external microcontroller such as an STM32 family device. This manual includes the software structure introduction, the used microcontroller resources, the main function interfaces and the program flowchart. Regarding to the STM8S903K3, refer to datasheet "STM8S903K3 STM8S903F3" and RM0016 reference manual for more details. December 2015 DocID028346 Rev 1 1/18 www.st.com Contents UM1948 Contents 1 2 Overview .......................................................................................... 3 1.1 System architecture .......................................................................... 3 1.2 Used resources ................................................................................. 4 1.2.1 Hardware connections ........................................................................ 4 1.2.2 Software configuration ........................................................................ 5 1.2.3 MCU peripheral use............................................................................ 6 1.2.4 Firmware layer description ................................................................. 8 Main interfaces ................................................................................ 9 2.1 Interfaces of the STPM3x driver ........................................................ 9 2.1.1 void stpm3x_HwInit(TBool bUseSPI) ................................................ 9 2.1.2 TBool stpm3x_DataIO(TU16 nRdWtAddr,TU8*pTxDat,TBool bUseCRC, TU8 *pRxDat) ................................................................................... 9 2.1.3 void stpm3x_IO_EnableLED(TBool bEnable) ................................. 10 2.1.4 TBool stpm3x_ReadReg32(TU8 nAddr, TU8 *pnVal) ...................... 10 2.1.5 TBool stpm3x_WriteReg32(TU8 nAddr, TU8 *pnVal) ...................... 10 2.1.6 TBool stpm3x_ReadTarReg32(TU8 nTarRow, TU8 *pnVal) ........... 10 2.1.7 TBool stpm3x_ReadRegBits(TU8 nAddr, TU8 nOffset, TU8 nBitNum, TU32 * pnVal) ................................................................................... 10 2.1.8 TBool stpm3x_WriteRegBits(TU8 nAddr, TU8 nOffset, TU8 nBitNum, TU32 nVal) ....................................................................................... 11 3 2.1.9 TBool stpm3x_RegRead(TU8 nReg, TU32 *pnVal) ......................... 11 2.1.10 TBool stpm3x_RegWrite(TU8 nReg, TU32 nVal) ............................ 11 2.2 Flowchart......................................................................................... 12 2.3 GUI communication command ........................................................ 12 Software design calibration .......................................................... 13 3.1 Pulse output generation .................................................................. 13 3.2 No-load condition judgement........................................................... 14 3.3 STM8 limitation ............................................................................... 14 4 Accuracy results ........................................................................... 15 5 Revision history ............................................................................ 17 2/18 DocID028346 Rev 1 UM1948 Overview 1 Overview 1.1 System architecture The software is designed by following a platform independent approach. The driver and the application layer can be ported to the other part number in the STM8, STM32 or even Win32 platform. The below figure shows the system architecture. It could be divided into 3 layers. Figure 1: Project organization Host Interface (host_if.h, host_if.c) Meas_app (meas_app_3p.c, meas_epulse_3p.c meas_store_3p.c) Driver / application program interface (API) layer drv_stpm3x.c drv_stpm3x_v3p.c drv_stpm3x_reg_spi.c Hardware abstraction layer (HAL) STPM3x Drv HW access on STM8S (Drv_stpm3x_reg_ spi_stm8.c) STM8 utilities (ST_hal_util.c) UART HW access (host_uart_stm8.c) SPI HW access (host_spi_stm8.c) General HW access (st_ha l_ge n_stm8.c) Configuration (st_app_hw_def_stm8.h) Application layer code implementing 3-phase power meter functions Platform independent code HW accessing code STM8, STM32 or Win32 The entities below the hardware abstraction layer (HAL) belong to the hardware (HW) access layer. It implements the clock initialization, UART initialization, GPIOs initialization, HW connection initialization between either the STPM34 or the STPM33 and the microcontroller, software timer implementation, interrupt setting and so on. The whole system can work on many target controllers such as the STM32, STM8 or even Win32, if corresponding HW access layer is implemented. In the STM8 implementation, all the HW information is defined in st_app_hw_def_stm8.h of each project directory. User could simply modify this file and related source files to port software on different STM8 and even STM32 microcontrollers. The 2nd layer, hardware independent, is the driver layer/application program interface layer. This layer supplies all interface functions between the STPM3x and the microcontroller (STM8), and some special function routines, which implement the controlling operation to the STPM3x. Above this layer, the application layer develops all functions by just calling API layer functions, without need to focus on the STPM3x details and the bottom HW implementation. DocID028346 Rev 1 3/18 Overview UM1948 The application layer is the final goal of the entire application design. In this software, it includes the energy pulse generation, energy data storing in EEPROM, energy related data collecting and implementation of UART commands from the EVALSTPM3x-3PH GUI, which is human-machine interface. Among the energy related data, energy values only are read from the STPM3x registers (by API layer), power values are calculated by the STM8 (not by API layer). Further necessary and important information is obtained on GUI by accessing the STPM3x registers (by API layer) via UART commands. At the same time, calibration information is also transferred by GUI to microcontroller, then to STMP3x registers (by API layer). 1.2 Used resources 1.2.1 Hardware connections The block diagram of the entire application is shown below: Figure 2: Application block diagram HW UART USB O_M ISO STPM34 ZCR 1, LED1, LED2 SCS1 RS485 I_M OSI, EN, SYN, SCL, 16M Hz STM8 O_M ISO’ Energy pulses ZCR 2, LED3, LED4 STPM33 SCS2 HW SP I SPI The below table describes the pin assignment of the STM8 on HW PCB V1.1. Table 1: STM8S903K3 pin assignment 4/18 Pin Net name Description Remark 1 NRST Reset pin 2 OSCIN Resonator/ crystal in 3 OSCOUT Resonator/ crystal out 4 VSS GND 5 VCAP 1.8 V regulator capacitor 6 VDD Digital power supply 21 PC4 I_CLK_MTR 8 PF4 O_Q_LED 9 PB7 O_P_LED 10 PB6 I_SCS1 Pin selection for the STPM34 29 PD4 I_SCS2 Pin selection for the STPM33 11 PB5 I_SYN Supply 16 MHz to the STPM34 and the STPM33 DocID028346 Rev 1 UM1948 Overview Pin Net name Description Remark 13 PB3 I_EN 14 PB2 O_MISO 15 PB1 I_MOSI 16 PB0 I_SCL 25 PD0 O_MISO' MISO is just for the STPM33 19 PC2 O_ZCR1 Timer1_channel2 20 PC3 O_ZCR2 Timer1_channel3 32 PD7 O_RTS_STM8 27 PD2 I_CTS_STM8 30 PD5 O_TX_STM8 31 PD6 I_RX_STM8 22 PC5 I_SCK_STM8 23 PC6 I_MOSI_STM8 24 PC7 O_MISO_STM8 18 PC1 O_LED1 7 PA3 O_LED2 17 PE5 O_LED3 28 PD3 O_LED4 12 PB4 O_INTCB 26 PD1 IO_SWIM Software SPI, MISO is just for the STPM34 UART interface Hardware SPI (PC5,PC6,PC7) STPM34 LED pulse output 1.2.2 STPM33 LED pulse output Software configuration The latest HW PCB version is V1.1, for which “HW_STPM3X_3P_V2” macro must be defined in file st_app_hw_def.h. To be flexible and save memory, many macro definitions could be found in file stpm3x_app_config.h. Using IAR EWSTM8 1.41.1 compiler and the below configuration, at least 7862 bytes Flash and at least 570 bytes RAM are required under none optimization condition. Table 2: Macro definition Macro Configuration Remark Off Used as a convenient access (registers) method, mask the detailed info of registers. Refer to and to Section 2.1.10: "TBool stpm3x_RegWrite(TU8 nReg, TU32 nVal)" STPM3x_CFG_USE_V3P_REG Off Used as a convenient access (registers) method, in virtual 3-phase measurement chip. The STPM34 and STPM33 are in a unique virtual address, not split chips STPM3x_CFG_USE_SW_EPULSE On Used to select different pulse output implementation method. Refer to Section 3.1: "Pulse output generation" STPM3x_CFG_USE_NAMED_REG DocID028346 Rev 1 5/18 Overview 1.2.3 UM1948 Macro Configuration Remark STPM3x_CFG_USE_HOST_UART On Used to select different interfaces to GUI. In the software, UART is selected STPM3x_CFG_USE_HOST_SPI Off Used to select different interfaces to GUI. If on, select SPI interface STPM3x_CFG_USE_PACK_INIT On Used to select different initialization methods. If on, all registers are initialized by 32-bit register writing method once; If off, all registers are initialized by register bit writing method one by one STPM3x_CFG_CALC_ACT_POWER On Used for power (active, reactive) calculations. It is always on STPM3x_CFG_POLY_PHASE On Used to select different application purposes. If on, 3-phase power meter is available; if off, 1-phase power meter is available STPM3x_CFG_ENERGY_ACCU On Used for energy accumulation calculations. It is always on MCU peripheral use All used peripherals on the STM8S903K3 are described in the below table. Table 3: Application peripheral usage Peripherals TIMER 1 (16-bit) TIMER 5 (16-bit) Application Interrupt function Interrupt priority STPM34 ZCR output of voltage channel 1 or voltage channel 2 TIM1_CH2 input capture interrupt 2 STPM33 ZCR output of voltage channel TIM1_CH3 input capture interrupt 2 When STPM3x_CFG_USE_SW_EPULS E is configured as on, the timer generates 64 ms time base to update energy and power Update interrupt 2 Update interrupt 3 (STPM3x_CFG_USE _SW_EPULSE on); 2 (STPM3x_CFG_USE _SW_EPULSE off) 0.25 ms time base: TIMER 6 (8-bit) 6/18 Multiplied by 4 to get 1 ms as system tick When STPM3x_CFG_USE_SW _EPULSE is configured as on, it accumulates energy fragment by 0.25 ms time slot to decide if the generated energy pulses When STPM3x_CFG_USE_SW _EPULSE is configured as off, it detects 80 ms time out for pulse width control DocID028346 Rev 1 UM1948 Overview Peripherals Application Interrupt function Interrupt priority PC1 rising edge to indicate P pulse from the STPM34 (used when STPM3x_CFG_USE_SW_EPULS E is configured as off) EXTI 3 PA3 rising edge to indicate Q pulse from the STPM34 (used when STPM3x_CFG_USE_SW_EPULS E is configured as off) EXTI 3 PE5 rising edge to indicate P pulse from the STPM33 (used when STPM3x_CFG_USE_SW_EPULS E is configured as off) EXTI 3 PD3 rising edge is to indicate Q pulse from the STPM33 (used when STPM3x_CFG_USE_SW_EPULS E is configured as off) EXTI 3 PB4 falling edge to indicate the STPM3x event (the STM8S should read related registers to inquire which event in which chip) EXTI 2 UART UART interface to GUI UART Rx interrupt 1 (the lowest priority) SPI SPI interface to GUI SPI Rx and Tx interrupt 1 (the lowest priority) EEPROM Stores energy data to EEPROM inside the STM8 No EXTI GPIO GPIO simulation of SPI to communicate with the STPM3x CCO to provide 16 MHz to the STPM3x GPIO level polling to detect CTS from GUI GPIO level control to generate P and Q energy pulses respectively No DocID028346 Rev 1 7/18 Overview 1.2.4 UM1948 Firmware layer description The below table lists the main files of different firmware layers. Table 4: Main files Layer File name Hardware abstraction layer Driver layer Application layer Interrupt .h files Brief Host_spi_stm8.c STM8 SPI based communication with GUI Host_uart_stm8.c STM8 UART based communication with GUI St_hal_gen_stm8.c HAL implementation on the STM8 Drv_stpm3x_reg_spi_stm8.c STPM3x SPI initialization for the STM8 St_hal_util.c Utility function implementation to software timer and other utilities Drv_stpm3x.c Definition of the STPM3x driver Drv_stpm3x_reg_spi.c STPM3x register SPI access implementation Drv_stpm3x_v3p.c Virtual 3-ph metering IC based on the STPM3x Host_if.c HOST communication demo with private protocol Meas_app_3p.c 3-ph meter measurement based on the STPM3x Meas_epulse_3p.c 3-ph energy pulse generation operations based on the STPM3x Meas_store_3p.c 3-ph meter storage definition for the STPM3x base meter Stm8s_it.c Main interrupt service routines Stpm3x_app_config.h Configuration file of the STPM3x application St_app_hw_def.h Hardware definition on the STM8 Drv_stpm3x.h Definition of the STPM3x driver Drv_stpm3x_reg.h Definition of the STPM3x register operations Drv_stpm3x_v3p.h Virtual 3-ph metering IC based on the STPM3x Stpm3x_app_config.h is the basic system function configuration file. Different options may change the software implementation methods, or select different applications, or mask some unimportant functions to save memory according to applications. Please refer to Table 2: "Macro definition" for detailed description. St_app_hw_def.h is the hardware definition file related to connection. It is necessary to change it accordingly if some pin connection has changed (and possibly, it is also necessary to change some routines in Stm8s_it.c). Drv_stpm3x.h is the STPM3x driver prototype definition file. In the file, all interface functions between the STPM3x and MCU are declared. Drv_stpm3x_v3p.h is the driver prototype definition file (based on Drv_stpm3x.h) when all the STPM3x chips are looked as a whole, that is, a virtual 3-ph metering chip. 8/18 DocID028346 Rev 1 UM1948 Main interfaces 2 Main interfaces 2.1 Interfaces of the STPM3x driver The interface to application layer is mainly driver layer since it involves the communication between the STPM3x and microcontroller. It can also be used by other applications based on different platforms. Besides, some initialization functions related to platform are also introduced here because of their importance. 2.1.1 void stpm3x_HwInit(TBool bUseSPI) Description: hardware initialization of pins connected to the STPM3x and setting of the STPM3x communication interface. Parameters: bUseSPI True, sets SPI interface False, sets UART interface Return value: none. Remarks: the timing sequence is strict, so control if different system clocks or platforms are used. 2.1.2 TBool stpm3x_DataIO(TU16 nRdWtAddr,TU8*pTxDat,TBool bUseCRC, TU8 *pRxDat) Description: GPIO simulation of SPI communication (4-line) with the STPM3x. If CRC is used, 5-byte frame is sent and 5-byte frame is received. Parameters: nRdWrAddr: register address for read or write High byte stores write address Low byte stores read address When read, it sets high byte to 0xFF When write, it sets low byte to 0xFF *pTxDat: stores the 5-byte frame to be sent *pRxDat: stores the 5-byte frame to be received bUseCRC True, the frame is 5 bytes False, the frame is 4 bytes Return value: true, CRC of received frame is right; false, CRC of received frame is wrong. Remarks: SCL simulation should be 50% duty. DocID028346 Rev 1 9/18 Main interfaces 2.1.3 UM1948 void stpm3x_IO_EnableLED(TBool bEnable) Description: Enable EXTI for LED pins. EXTI can only be enabled after the STPM3x register initialization. Parameters: bEnable True, enable EXTI False, disable EXTI Return value: none. 2.1.4 TBool stpm3x_ReadReg32(TU8 nAddr, TU8 *pnVal) Description: Read 32-bit data of some registers. Parameters: nAdd: register address (even number), listed in the register map of datasheet *pnVal: 32-bit data read from the register Return value: true, success; false, fail. 2.1.5 TBool stpm3x_WriteReg32(TU8 nAddr, TU8 *pnVal) Description: write 32-bit data to some registers. Parameters: nAddr: register address (even number), listed in register map of datasheet *pnVal: 32-bit data to be written to the register Return value: true, success; false, fail. 2.1.6 TBool stpm3x_ReadTarReg32(TU8 nTarRow, TU8 *pnVal) Description: read 32-bit data of some registers from the STPM34 or STPM33. Parameters: nTarRow: MSB indicates which chip to choose, other bits are register’s row address, listed in the register map of datasheet *pnVal: 32-bit data read from the register Return value: true, success; false, fail. 2.1.7 TBool stpm3x_ReadRegBits(TU8 nAddr, TU8 nOffset, TU8 nBitNum, TU32 * pnVal) Description: some continuous bits of the register 32-bit data are read. Parameters: nAddr: register address (even number), listed in the register map of datasheet nOffset: offset of the 32-bit data, the value can be 0 to 31 nBitNum: bit number beginning from the offset of 32-bit data, the value can be 1 to 32 *pnVal: data read from the register with the offset and bit number setting Return value: true-success; false-fail. 10/18 DocID028346 Rev 1 UM1948 2.1.8 Main interfaces TBool stpm3x_WriteRegBits(TU8 nAddr, TU8 nOffset, TU8 nBitNum, TU32 nVal) Description: some continuous bits are written to the register position beginning from offset. Parameters: nAddr: register address (even number), listed in register map of datasheet nOffset: offset of the 32-bit data, the value can be 0 to 31 nBitNum: bit number beginning from the offset of 32-bit data, the value can be 1 to 32 nVal: data to be written to the register with the offset and bit number setting Return value: true-success; false-fail. 2.1.9 TBool stpm3x_RegRead(TU8 nReg, TU32 *pnVal) Description: some continuous bits of the register predefined by the array and index are read. The detailed information (register address, offset and bit number) is encapsulated inside the array. Parameters: nReg: element index of the predefined array. The value is related to some enum definition, showing the register meaning *pnVal: data readout Return value: true-success; false-fail. 2.1.10 TBool stpm3x_RegWrite(TU8 nReg, TU32 nVal) Description: some continuous bits are written to the register predefined by the array and index. The detailed information (register address, offset and bit number) is encapsulated inside the array. Parameters: nReg: element index of the predefined array. The value is related to some enum definition, showing the register meaning nVal: data to be written Return value: true-success; false-fail. DocID028346 Rev 1 11/18 Main interfaces 2.2 UM1948 Flowchart Figure 3: Application flowchart 2.3 GUI communication command GUI command frame format: TX: { STX | Target(4b):Func(4b) | Addr | Val[2] (LSBF) | Addr2 | 00 | CS8 } RX: { STX | Target(4b):Func(4b) | ErrCode | Val[4] (LSBF) | CS8 } STX: 0x68 Target: 01/02/03/08, to the STPM34/STPM33/both/virtual 3-PH, @refer ESTPM3xTar Func: 00/01/02/03/04, /Reset/Latch/Direct IO/Read/Write, @refer ESTPM3xFunc Addr: 255 x 4B STPM3x RAM/virtual 3-PH RAM (needs to be even number to read) Val[2]: the value to be written, LSBF Addr2: only available in direct IO mode, when Addr is ReadAddr and Addr2 is WriteAddr Val[4]: the value read, LSBF CS8: 8-bit check sum of the frame 12/18 DocID028346 Rev 1 UM1948 Software design calibration 3 Software design calibration 3.1 Pulse output generation Pulse output generation is a key point of the application, since accuracy tests are carried out using the pulses/kWh produced by the power meter. There are two methods to generate the energy pulses. Software pulse method (STPM3x_CFG_USE_SW_EPULSE is configured as on) The pulse is generated by adding up the energy (DeltaE) every time slot (0.25 ms) when the current time slot elapses one by one. Once the accumulated energy exceeds the threshold, which represents the energy of just one pulse, MCU outputs 80 ms-width pulse to light P LED or Q LED. Obviously, the shorter time slot, the more accurate the measurement results. However, a tradeoff between the time slot and MCU efficiency is necessary, since too short time slot leads to a heavy MCU workload. Hardware pulse method (STPM3x_CFG_USE_SW_EPULSE is configured as off) The pulse is generated by external interrupts from 4 LED pins of the STPM34 and STPM33. In the interrupt service routine, when the number of active energy LED pulses exceeds the threshold, MCU outputs 80 ms-width pulse to P LED (and the same for reactive energy to Q LED). The number of pulses/kWh from all LED pin STPM3x chips is the threshold for the 3-ph power meter to output just one active energy pulse on LED P. This threshold depends on the application design and particularly from analog font end component choice. Microcontroller continuously counts interrupt occurrences to light P or Q LED at proper time. Note: 1. 2. 3. 4. 5. The threshold is clearly different in two methods. In software pulse method, it indicates a fixed energy value. In hardware pulse method, it indicates a fixed number derived from pulse constant (imp/kwh). However, the threshold is both determined by hardware parameters (R1, R2, kS ) and software configuration (LEDPWM in DSP_CR1 and DSP_CR2), just different in unit (ws or impulse number). To obtain better accuracy, the operation of ending P and Q pulse after 80 ms is also in 0.25 ms interrupt service routine, since both of edges need to be accurate. As explained in the application peripheral usage table, the used MCU resources are different between the two methods. In the hardware pulse method, the pulse output depends on 4-pin interrupt number, so 4 EXTI are necessary. However, in the software method, the energy is calculated by adding up the “energy fragment” after each time slot, so the 4-pin interrupt is not needed. But a proper time slot (0.25 ms) is necessary; moreover, the “energy fragment” must be updated in a short interval if the current power changes fast. It is 64 ms (2^6) generated from hardware timer so that the interrupt and processing timing is in good condition and the power of two is convenient for multiplication and division on the STM8 platform. It is less than the shortest interval (about 124 ms) at maximum power load (3*100A, 110%Un). Only 0.25 ms and 64 ms timings are coming from MCU timer directly, while all other timers (second, minute, hour, day, week, month and year) are software timers, derived indirectly from 0.25 ms. In the above 2 methods, the accuracy influence factors are different: DocID028346 Rev 1 13/18 Software design calibration 3.2 UM1948 In the hardware pulse method, setting the highest EXTI priority, and the interval time (longer or shorter) of energy register reading is an important factor for the accuracy of energy displayed on GUI. In software pulse method, the fixed time slot interrupt and the time interval accuracy of energy register reading (update energy fragment) have the highest impact on accuracy. No-load condition judgement When STPM3x_CFG_CALC_ACT_POWER is configured as on, if active power is less than 2.2 W ( PowerThreshold*Plsb) on A, B, C single phase or 3-ph totally, a no-load flag is set to 1. When STPM3x_CFG_CALC_ACT_POWER is configured as off, no-load condition is determined through apparent power, Vrms*Irms (please note Vlsb*Ilsb=Plsb>>2.2 W). 3.3 STM8 limitation Some application attention points are reported below: 1. 2. 3. 4. 14/18 The STM8 is MSBF, but the STPM3x is LSBF, by default, this has to be taken into account in data conversion between the STM8 and the STPM3x. Considering that the STM8 is 8-bit microcontroller, single byte variable is proper in most cases. The STM8 computation performance is poor, especially the float number multiplication and division. Only the power calculation is finished by STM8, which is well done by left and right shift according to proper time slot (2N). Other calculations, for example, frequencies, phase angle, power factor are calculated on GUI. In hardware pulse method, O_LED1, O_LED2, O_LED3 and O_LED4 are located in different ports (port A, port C, port D, port E respectively). This is necessary because pins of the same port share the same interrupt by logical OR, so in some cases it is impossible to distinguish them correctly, if they are very close to each other. DocID028346 Rev 1 UM1948 4 Accuracy results Accuracy results With the above firmware implementation and after the device calibration, the following accuracy curves, for active power, have been taken on P LEDs. Testing conditions are: VN = 230 V IN = 5 A fline = 50 Hz CP = 400 pulses/kWh In figures below, accuracy results are benchmarked with IEC 62053-22 normative requirement for class 0.2 meters. Table 5: Active power error overcurrent Applied current [A] Full scale percentage [%] 10 Percentage error [%] cosphi = 1 cosphi = 0.5 ind cosphi = 0.5 cap 200 0,067 0,046 0,124 5 100 0,068 0,028 0,128 2.5 50 0,078 0,016 0,088 1 20 0,066 0,038 0,060 0.5 10 0,091 -0,300 -0,250 0.25 5 0,065 0,046 0,124 0.1 2 -0,097 0.028 0,128 0.05 1 -0,271 Figure 4: Active power accuracy at cosphi = 1 DocID028346 Rev 1 15/18 Accuracy results UM1948 Figure 5: Active power accuracy at cosphi = 0.5 inductive and capacitive 16/18 DocID028346 Rev 1 UM1948 5 Revision history Revision history Table 6: Document revision history Date Revision 09-Dec-2015 1 Changes Initial version. DocID028346 Rev 1 17/18 UM1948 IMPORTANT NOTICE – PLEASE READ CAREFULLY STMicroelectronics NV and its subsidiaries (“ST”) reserve the right to make changes, corrections, enhancements, modifications, and improvements to ST products and/or to this document at any time without notice. Purchasers should obtain the latest relevant information on ST products before placing orders. ST products are sold pursuant to ST’s terms and conditions of sale in place at the time of order acknowledgement. Purchasers are solely responsible for the choice, selection, and use of ST products and ST assumes no liability for application assistance or the design of Purchasers’ products. No license, express or implied, to any intellectual property right is granted by ST herein. Resale of ST products with provisions different from the information set forth herein shall void any warranty granted by ST for such product. ST and the ST logo are trademarks of ST. All other product or service names are the property of their respective owners. Information in this document supersedes and replaces information previously supplied in any prior versions of this document. © 2015 STMicroelectronics – All rights reserved 18/18 DocID028346 Rev 1