AT11412: UART to Ethernet Gateway with SAM4S
Transcription
AT11412: UART to Ethernet Gateway with SAM4S
APPLICATION NOTE AT11412: UART to Ethernet Gateway with SAM4S SMART ARM-Based Microcontroller Introduction This application note aims at describing the LwIP stack and how to use it to design a UART to Ethernet Gateway. This application note will elaborate the software architecture, internal data transmission scheme and memory footprint to help users make their own Gateway easily according to the real requirement. Figure 1. The UART to Ethernet Gateway Features Atmel® SAM4S ARM® Cortext®-M4-based MCU LwIP stack support DHCP mode support UDP server support TCP client/server support Support 15 clients in TCP server mode Ethernet data flow control support TCP client/server with keep-alive detection and auto reconnection Multiple UART data package mode High speed data transfer by DMA Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 Table of Contents 1. Kits Overview ..................................................................................... 3 1.1 1.2 SAM4S Xplained Pro Evaluation Kit.................................................................. 3 Ethernet1 Xplained Pro ..................................................................................... 3 2. Application Scenarios......................................................................... 4 3. Software Implementation.................................................................... 5 3.1 3.2 3.3 APIs Introduction ............................................................................................... 5 3.1.1 LwIP Stack Overview .......................................................................... 5 3.1.2 Main APIs Introduction ........................................................................ 5 Internal Mechanism of Data Transmission ........................................................ 8 3.2.1 Data Transfer from UART to Ethernet ................................................ 8 3.2.1.1 UART Data Package Format ............................................ 8 3.2.1.2 UART Data Transfer ......................................................... 8 3.2.1.3 Flow Control for UART Port .............................................. 9 3.2.2 Data Transfer from Ethernet to UART............................................... 10 Quick-start Setup ............................................................................................ 11 4. Footprint........................................................................................... 13 5. Conclusion ....................................................................................... 14 Appendix A. A.1 Additional Information .................................................. 15 LwIP Configuration .......................................................................................... 15 Appendix B. Revision History ........................................................... 16 AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 2 1. Kits Overview 1.1 SAM4S Xplained Pro Evaluation Kit The Atmel® SAM4S Xplained Pro evaluation kit is a hardware platform to evaluate the ATSAM4SD32C microcontroller. Supported by the Atmel Studio integrated development platform (IDE), the kit provides easy access to the features of the Atmel ATSAM4SD32C and explains how to integrate the device in a custom design. The Xplained Pro MCU series evaluation kits include an on-board Embedded Debugger, and no external tools are necessary to program or debug the ATSAM4SD32C. The Xplained Pro extension series evaluation kits offer additional peripherals to extend the features of the board and ease the development of custom designs. More details about the SAM4S Xplained Pro evaluation kit are available here: http://www.atmel.com/tools/ATSAM4S-XPRO.aspx. Figure 1-1. SAM4S Xplained Pro Evaluation Kit 1.2 Ethernet1 Xplained Pro Ethernet1 Xplained Pro is a basic extension board for the Xplained Pro platform. The Ethernet is controlled via a SPI interface up to 40MHz for high throughput Ethernet applications. Ethernet1 Xplained Pro connects to any Xplained Pro standard extension header on any Xplained Pro MCU board. More details about Ethernet1 Xplained Pro extension board is available here: http://www.atmel.com/tools/ETHERNET1_XPRO.aspx. AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 3 Figure 1-2. Ethernet1 Xplained Pro Extension Board 2. Application Scenarios The Gateway can be used in some IoT applications or other scenarios which need both UART and Ethernet. The Gateway features one TCP server, one TCP client and one UDP server. The TCP server can allow maximum 15 TCP clients to connect at the same time. The UDP server can receive broadcast message and reply the Gateway IP information to the remote sender if necessary. In this demonstration, the IP address of the Gateway is allocated by the DHCP and the external clients can’t know the Gateway IP address when they want to connect to the Gateway. In order to solve this issue, the Gateway features a UDP server which can tell the external clients in the same network the IP address of the Gateway when it receives a broadcast message that contains “Atmel-Gateway” at the header of the message. For example, if there is a mobile phone that connects to the same network as Gateway, the mobile phone can send a broadcast message “AtmelGateway” through UDP protocol and then the Gateway will reply with a message in the form of “IP address, MAC address, Description”. External clients can extract the IP address information from this message and then can connect to the Gateway using this IP address. More clients can connect to the Gateway after they get the Gateway IP address. The Gateway also behaves as a TCP clients and it will try to connect to a pre-defined server every 5mins if the connection is not established. There is one application scenario that the Gateway can be used in a ZigBee network. Figure 2-1 illustrates the application scenario. The Gateway connects the ZigBee coordinator via UART and connects itself to Ethernet through network cable. The remote clients can send a UDP broadcast message that contains certain information to get the Gateway IP address and then connect it to the Gateway. After that, the remote clients can control or get information from the ZigBee network through the Gateway, such as light infomation. Each client can control the light on or off and if the light status changed, the Gateway will send this information to all the clients. The Gateway can also connect itself to a remote server to upload data to remote server or receive command from the server, such as changing configuration parameters or firmware update. AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 4 Figure 2-1. Example of Application Scenario Remote Clients ZigBee Cordinator SerialNet AT Command UART to Ethernet Gateway Internet Remote Server 3. Software Implementation 3.1 APIs Introduction 3.1.1 LwIP Stack Overview The Lightweight TCP/IP stack is designed for embedded systems. The focus of the LwIP TCP/IP implementation is to reduce resource usage while still having a full scale TCP. This makes LwIP suitable for use in embedded systems with tens of kilobytes of free RAM and room for around 40 kilobytes of code ROM. LwIP features: IP (Internet Protocol) including packet forwarding over multiple network interfaces ICMP (Internet Control Message Protocol) for network maintenance and debugging IGMP (Internet Group Management Protocol) for multicast traffic management UDP (User Datagram Protocol) including experimental UDP-lite extensions TCP (Transmission Control Protocol) with congestion control, RTT estimation and fast recovery/fast retransmit DNS (Domain Name Server) Specialized raw API for enhanced performance Optional Berkeley-alike socket API DHCP (Dynamic Host Configuration Protocol) PPP (Point-to-Point Protocol) PPPoE (Point to Point Protocol over Ethernet) ARP (Address Resolution Protocol) for Ethernet For more details about the LwIP, refer to LwIP Wiki: http://lwip.wikia.com/wiki/LwIP_Wiki or the Atmel AT04055: Using the LwIP Network Stack application note. 3.1.2 Main APIs Introduction The main APIs used for the Gateway Ethernet part are the LwIP RAW APIs. The Raw API is a non-blocking, eventdriven API designed to be used without an operating system that implements zero-copy send and receive. AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 5 Table 3-1. TCP RAW APIs used in this Application API Function Description netif_add Add a network interface to the list of LwIP netifs tcp_new Creates a new connection PCB (Protocol Control Block). A PCB is a structure used to store connection status. tcp_bind Binds the pcb to a local IP address and port number tcp_listen Commands a pcb to start listening for incoming connections tcp_accept Sets the callback function to call when a new connection arrives on a listening connection tcp_connect Connects to a remote TCP host tcp_write Queues up data to be sent tcp_sent Sets the callback function that should be called when data has successfully been sent and acknowledged by the remote host Receiving TCP data tcp_recv Sets the callback function that will be called when new data arrives tcp_recved Informs LwIP core that the application has processed the data Callback argument tcp_arg Specify the argument that should be passed callback functions tcp_close Closes a TCP connection with a remote host tcp_err Sets the callback function to call when a connection is aborted because of an error tcp_abort Aborts a TCP connection Network interface Management TCP connection setup Sending TCP data Closing and aborting connections Network interface management In LwIP device drivers for physical network hardware are represented by a network interface structure similar to that in BSD. To create a new network interface, a new space should be allocated for the struct netif and call netif_add(): struct netif *netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, struct ip_addr *gw, void *state, err_t (* init)(struct netif *netif), err_t (* input)(struct pbuf *p, struct netif *netif)) In this application, DHCP mode is used and the ip address, netmask and default gateway don’t need to be specified when calling netif_add function. These parameters will be set automatically when DHCP client gets a leased address from the DHCP server successfully. The init parameter specifies a driver-initialization function that should be called once the netif structure has been prepared by netif_add. The final parameter input is the function that a driver will call when it has received a new packet. TCP connection setup functions AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 6 TCP connection setup struct tcp_pcb * tcp_new(void) Creates a new connection control block (PCB). The connection is initially in the "closed" state. If memory is not available for creating the new PCB, NULL is returned. err_t tcp_bind(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) Binds the PCB to a local IP address and port number. The IP address can be specified as IP_ADDR_ANY in order to bind the connection to all local IP addresses. If the IP address is not given (i.e., ipaddr == NULL), the IP address of the outgoing network interface is used instead. If the port is specified as zero, the function selects an available port. The connection must be in the "closed" state. If another connection is bound to the same port, the function will return ERR_USE, otherwise ERR_OK is returned. struct tcp_pcb * tcp_listen (struct tcp_pcb *pcb) The "pcb" parameter specifies a connection, which must be in the "closed" state and must have been bound to a local port with the tcp_bind() function. This functions sets up the local port to listen for incoming connections. After calling tcp_listen(), tcp_accept()must be called. Until doing so, incoming connections for this port will be aborted. tcp_listen() may return NULL if no memory was available for the listening connection. void tcp_accept(struct tcp_pcb *pcb, err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err)) Commands a PCB to start listening for incoming connections. tcp_listen()must have been previously called. When a new connection arrives on the local port, the specified function will be called with the PCB for the new connection. err_t tcp_connect(struct tcp_pcb * pcb, struct ip_addr * ipaddr, u16_t port, err_t (* connected)(void * arg, struct tcp_pcb * tpcb, err_t err)); Sets up the pcb to connect to the remote host and sends the initial SYN segment which opens the connection. If the connection has not already been bound to a local port, a local port is assigned to it. The tcp_connect() function returns immediately; it does not wait for the connection to be properly setup. Instead, it will call the function specified as the fourth argument (the "connected" argument) when the connection is established. If the connection could not be properly established, either because the other host refused the connection or because the other host didn't answer, the error handling function will be called with an the "err" argument set accordingly. The tcp_connect() function can return ERR_MEM if no memory is available for enqueueing the SYN segment. If the SYN indeed was enqueued successfully, the tcp_connect() function returns ERR_OK. Sending TCP data err_t tcp_write(struct tcp_pcb *pcb, const void *data, u16_t len, u8_t apiflags) Enqueues the data pointed to by the argument dataptr. The length of the data is passed as the len parameter. The apiflags argument can have either of the following bits: TCP_WRITE_FLAG_COPY indicates that LwIP should allocate new memory and copy the data into it. If not specified, no new memory should be allocated and the data should only be referenced by pointer. TCP_WRITE_FLAG_MORE indicates that the push flag should not be set in the TCP segment. AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 7 The tcp_write() function will fail and return ERR_MEM if the length of the data exceeds the current send buffer size or if the length of the queue of outgoing segment is larger than the upper limit defined in lwipopts.h (TCP_SND_QUEUELEN). If the function returns ERR_MEM, the application should wait until some of the currently enqueued data has been successfully received by the other host and try again. tcp_sent(struct tcp_pcb *pcb, tcp_sent_fn sent) Used to specify the function that should be called when TCP data has been successfully delivered to the remote host. Receiving TCP data void tcp_recv(struct tcp_pcb *pcb, err_t (* recv)(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)) TCP data reception is callback based; an application-specified callback function is called when new data arrives. Sets the callback function that will be called when new data arrives. If there are no errors and the callback function returns ERR_OK, then it is responsible for freeing the pbuf. Otherwise, it must not free the pbuf so that LwIP core code can store it. If the remote host closes the connection, the callback function will be called with a NULL pbuf to indicate that fact. Close connection tcp_close(struct tcp_pcb *pcb) Closes the connection. The function may return ERR_MEM if no memory was available for closing the connection.If the close succeeds, the function returns ERR_OK. 3.2 Internal Mechanism of Data Transmission The UART to Ethernet Gateway works between two interfaces. The purpose UART to Ethernet Gateway software is to get all the information at one interface and send it to the other as quickly as possible. Due to the low speed of serial port and high speed of Ethernet, several features must be considered during development, such as the data flow control. In this application, data flow control for the Ethernet interface and data buffer schemes are implemented. There will be a detail description of internal mechanism of data transmission in the below sections. 3.2.1 Data Transfer from UART to Ethernet 3.2.1.1 UART Data Package Format There are no package header and tail. The data received will be considered as a valid package if no data received in a time interval. The time interval can be specified according to the real application. It is 10ms in this Gateway Demo. 3.2.1.2 UART Data Transfer There are two 2048 bytes data buffer for the UART port. These two buffers work as a ping-pong buffer. One buffer can be used to receive data from UART and the other can be used to transfer data to Ethernet at the same time. A dynamically allocated buffer link-list is used for the Ethernet part. Normally, the Ethernet interface is faster than the UART port, so the buffer link-list is rarely used. However, the network congestion may occur sometimes and in this case the UART data can be stored in the buffer link-list temporarily. AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 8 Figure 3-1. Flowchart of forwarding UART Data to Network TCP Send Buffer TCP/IP Connection 0 TCP Send Buffer TCP/IP Connection 1 A A TCP Send Buffer TCP/IP Connection N Buffer0 RX UART Buffer1 ... ... ... A Two 2048 Bytes data buffer Dynamically allocated buffer list In this application, the Gateway will forward the UART data to all the TCP/IP clients that connect to the Gateway. The TCP send buffer is defined by TCP_SND_BUF in the file lwipopts.h. Figure 3-2. Flowchart of Software UART Data Received N Valid Frame? Drop frame Y Copy data to allocated buffer TCP is idle? N Add data buffer to the link-list Y Copy data to TCP Send Buffer Sending data through TCP Free allocated buffer N All the data in the buffer link-list has been transferred? Y TCP in idle state Note that the data doesn’t need to be copied into the TCP send buffer in order to save RAM. In this case, the data is referenced by the pointer and the memory behind the data pointer must not change until the data is ACKed by the remote host. 3.2.1.3 Flow Control for UART Port Although there is a dynamically allocated buffer list for the UART data to be stored temporarily in case of network congestion, it’s better to have a data flow control for the UART port because maybe there aren’t sufficient RAM to be allocated in some low RAM micro controllers. There are two flow control schemes, one is hardware flow control and the other is software flow control. Using hardware flow control, two extra pins (clear-to-send (CTS) and request-to-send (RTS)) in addition to TxD and RxD are used to stop or start communication at both UART sides. For software flow control, start (XON) and stop (XOFF) commands are sent as characters, as part of data communication. Only two pins are used (RxD and TxD). However, an extra software layer must be added to UART software drivers to have this feature. AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 9 In this Gateway demo application, there is no flow control implementation for the UART port. 3.2.2 Data Transfer from Ethernet to UART The network data is much faster than the UART data transmission, so a data flow control for the network data is mandatory. Fortunately, TCP provides the data flow control scheme. TCP can negotiate packet lengths to be sent from one Ethernet device to the other. When one side’s windows buffer becomes full, the other side can slow down its data rate or even stop until the remote side’s window buffer is available. The DMA is used for the UART port to speed up the data transmission and to reduce the CPU usage. Figure 3-3. Flowchart of forwarding Network Data to UART Packets TX UART 0 1 …... N TCP Window Buffer TCP/IP Connection 0 TCP Window Buffer TCP/IP Connection 1 DMA A ... ... A TCP/IP Connection N TCP Window Buffer The TCP window buffer is defined by TCP_WND in the file lwipopts.h. Figure 3-4. Flowchart of Software Polling Task Ethernet Task Check the data buffer pool Network data packet received Network data exist? Copy data to allocated buffer N Y The same TCP info found in the buffer pool? DMA is free? Y N Y Start DMA to transfer data through UART N Find a free Buffer pool to store the TCP info Data transfer finished? Add data to TCP buffer link-list N Y Free allocated buffer Inform remote side the data has been taken N All the data in the buffer link-list has been transferred? Y Remove the TCP info from the buffer pool AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 10 In the Ethernet task, when the network data packet is received, the data is copied into an allocated buffer. Then, check the buffer pool if there are data packets in the buffer pool that have not been transferred to UART for the same TCP connection. If yes, add the data buffer to the tail of the link-list. Otherwise, find a free buffer for this TCP connection and add data to the TCP buffer link-list. In the polling task, if there is network data in the buffer pool and the DMA is not in use, the DMA will be started and data will be transferred. At the end of data transfer, the allocated buffer will be freed and the Gateway will inform the remote side the data has been received, so the remote side can transfer proper size of data packet to the Gateway next time according to the Gateway available window buffer. If all the data in the buffer link-list has been transferred, the TCP info will be removed from the buffer pool. 3.3 Quick-start Setup To evaluate the functionality of this Gateway, a TCP/IP packet tool on PC can be used to setup a quickly and simply testing. Connect the Ethernet1 Xplained PRO board to the EXT1 header of SAM4S Xplained PRO board Power the SAM4S Xplained PRO board via the DEBUG USB interface and connect this board to a network router through the Ethernet1 Xplained PRO board. Make sure the PC and the board is in the same local area network. Figure 3-5. Hardware Setup Compile the source code and download the firmware image to the board via the on-board embedded debugger Open the serial tool, such as putty or terminal window in Atmel Studio which can be downloaded from Atmel Gallery Power up the board and broadcast “Atmel-Gateway” message using UDP protocol in packet sender tool to get the IP address of the board Open the TCP/IP packet tool. Packet Sender is taken as the PC tool just for test purpose which can be found here: http://packetsender.com/. AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 11 Figure 3-6. Get the Board IP Address The UDP port number is defined in file src/network/updsev.h Retrieve the IP address from the received UDP data packet and use this IP address (192.168.1.3) to do data transfer through TCP protocol Figure 3-7. Data Transfer through TCP Protocol The TCP port number is defined in file src/network/server.h. Packet Sender tool always closes the TCP connection after each data packet transferred. For this reason, data transfer from serial port to Ethernet can’t be tested. Users can write a test code that can keep long TCP connection between client and server to do a full test of the Gateway functionalities. AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 12 4. Footprint Figure 4-1 and Figure 4-2 illustrate the Flash and RAM spaces that each module used in the software of this demonstration. Figure 4-1. UART to Ethernet Gateway RAM Footprint [KB] Other 2.08 Application 0.19 Low level driver 0.14 UART 4.35 LwIP 26.34 PHY 1.78 Table 4-1. Primary uses of RAM within LwIP [KB] UDP PCB TCP PCB TCP SEG PBUF POOL ARP Table Others 0.09 2.5 0.47 22.5 0.2 0.58 Figure 4-2. UART to Ethernet Gateway Flash Footprint [KB] Other 8.06 Application 3.01 Low level driver 3.35 UART 0.77 LwIP 24.07 PHY 2.58 AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 13 The RAM consumed by LwIP stack depends on how many clients will connect to the Gateway. From the RAM footprint, the pbuf consumes most of the RAM. The number pbuf pool can be decreased according to the real requirement if there are fewer clients that connected to the Gateway. In addition, the system must have sufficient RAM reserved for heap since the dynamically allocated buffer will be used to store the data that will be sent or received. Much RAM will be needed if there is network congestion while UART sends data continuously or many clients send data to the Gateway simultaneously. 5. Conclusion This document describes the basic software architecture, the main LwIP APIs used in this application, the internal scheme of data transmission between UART and Ethernet and a short description about data flow control for both side. This implementation features a small memory footprint TCP/IP to serial communication for a low-end microcontroller solution. It does not require in-depth knowledge of Ethernet TCP/IP and can be easily modified to meet different real application scenarios. AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 14 Appendix A. A.1 Additional Information LwIP Configuration Table A-1 lists the LwIP stack configuration in this application, and these configurations can be modified according to real application in file config/lwipopts.h. Table A-1. LwIP Options for UART to Ethernet Gateway Demonstration Option Value Description LWIP_TCP 1 Turn on TCP LWIP_UDP 1 Turn on UDP LWIP_DHCP 1 Enable DHCP module MEMP_NUM_TCP_PCB 16 The number of simultaneously active TCP connections MEMP_NUM_UDP_PCB 3 The number of UDP protocol control blocks MEMP_NUM_TCP_PCB_LISTEN 1 The number of listening TCP connections MEMP_NUM_TCP_SEG 30 The number of simultaneously queued TCP segments MEMP_NUM_PBUF 2 The number of memp struct pbufs PBUF_POOL_SIZE 15 The number of buffers in the pbuf pool PBUF_POOL_BUFSIZE TCP_MSS+40+PBUF_LINK_HLEN+4 The size of each pbuf in the pbuf pool TCP_MSS 1460 TCP Maximum segment size TCP_WND 2 * TCP_MSS The size of a TCP window TCP_SND_BUF 2 * TCP_MSS TCP sender buffer space MEM_LIBC_MALLOC 1 Use malloc/free/realloc provided by Clibrary AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 15 Appendix B. Revision History Doc. Rev. Date Comments 42429A 03/2015 Initial document release AT11412: UART to Ethernet Gateway with SAM4S [APPLICATION NOTE] Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015 16 Atmel Corporation 1600 Technology Drive, San Jose, CA 95110 USA T: (+1)(408) 441.0311 F: (+1)(408) 436.4200 │ www.atmel.com © 2015 Atmel Corporation. / Rev.: Atmel-42429A-UART-to-Ethernet-Gateway-with-SAM4S-AT11412_Application-Note_032015. Atmel®, Atmel logo and combinations thereof, Enabling Unlimited Possibilities®, and others are registered trademarks or trademarks of Atmel Corporation in U.S. and other countries. ARM®, Cortex®, ARM Connected® logo, and others are the registered trademarks or trademarks of ARM Ltd. Windows® is a registered trademark of Microsoft Corporation in U.S. and or other countries. Other terms and product names may be trademarks of others. DISCLAIMER: The information in this document is provided in connection with Atmel products. No license, express or implied, b y estoppel or otherwise, to any intellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN THE ATMEL TERMS AN D CONDITIONS OF SALES LOCATED ON THE ATMEL WEBSITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON -INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS AND PROFITS, BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no representations or warranties with respect to the accuracy or complet eness of the contents of this document and reserves the right to make changes to specifications and products descriptions at any ti me without notice. Atmel does not make any commitment to update the information contained herein. Unless specifically provided otherwise, Atmel products are not suitable for, and sha ll not be used in, automotive applications. Atmel products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life. SAFETY-CRITICAL, MILITARY, AND AUTOMOTIVE APPLICATIONS DISCLAIMER: Atmel products are not designed for and will not be used in conne ction with any applications where the failure of such products would reasonably be expected to result in significant personal injury or death (“Safety -Critical Applications”) without an Atmel officer's specific written consent. Safety-Critical Applications include, without limitation, life support devices and systems, equipment or systems for the operation of nuclear facilities and weapons systems. Atmel products are not designed nor intended for use in military or aerospace applications or environments unless sp ecifically designated by Atmel as military-grade. Atmel products are not designed nor intended for use in automotive applications unless specifically designated by Atmel as automoti ve-grade.