]> begriffs open source - cmsis/blob - CMSIS/DoxyGen/Driver/src/General.txt
Doxygen: Fix warnings.
[cmsis] / CMSIS / DoxyGen / Driver / src / General.txt
1 /**
2 \mainpage Overview
3
4 The CMSIS-Driver specification is a software API that describes peripheral driver interfaces for middleware stacks and user
5 applications. The CMSIS-Driver API is designed to be generic and independent of a specific RTOS making it reusable across a
6 wide range of supported microcontroller devices. The CMSIS-Driver API covers a wide range of use cases for the supported
7 peripheral types, but can not take every potential use-case into account. Over time, it is indented to extend the
8 CMSIS-Driver API with further groups to cover new use-cases.
9
10 The CMSIS Software Pack publishes the API Interface under the Component Class \b CMSIS \b Driver with header files and a
11 documentation. These header files are the reference for the implementation of the standardized peripheral driver interfaces. 
12 These implementations are published typically in the Device Family Pack of a related microcontroller family under the
13 Component Class \b CMSIS \b Driver. A Device Family Pack may contain additional interfaces in the Component Class \b Device
14 to extend the standard Peripheral Drivers covered by this CMSIS-Driver specification with additional device specific
15 interfaces for example for Memory BUS, GPIO, or DMA.
16
17 The standard peripheral driver interfaces connect microcontroller peripherals for example with middleware that implements
18 communication stacks, file systems, or graphic user interfaces. Each peripheral driver interface may provide multiple
19 instances reflecting the multiple physical interfaces of the same type in a device. For example the two physical SPI
20 interfaces are reflected with a separate \ref AccessStruct for SPI1 and SPI2. The \ref AccessStruct is the interface of a
21 driver to the middleware component or the user application.
22
23 \image html driver.png  "Peripheral Driver Interfaces and Middleware"
24
25 The following CMSIS-Driver API groups are defined:
26   - \ref can_interface_gr "CAN": Interface to CAN bus peripheral.
27   - \ref eth_interface_gr "Ethernet": Interface to Ethernet MAC and PHY peripheral.
28   - \ref i2c_interface_gr "I2C": Multi-master Serial Single-Ended Bus interface driver.
29   - \ref mci_interface_gr "MCI": Memory Card Interface for SD/MMC memory.
30   - \ref nand_interface_gr "NAND": NAND Flash Memory interface driver.
31   - \ref flash_interface_gr "Flash": Flash Memory interface driver.
32   - \ref sai_interface_gr "SAI": Serial audio interface driver (I2s, PCM, AC'97, TDM, MSB/LSB Justified).
33   - \ref spi_interface_gr "SPI": Serial Peripheral Interface Bus driver.
34   - \ref storage_interface_gr "Storage": Storage device interface driver.
35   - \ref usart_interface_gr "USART": Universal Synchronous and Asynchronous Receiver/Transmitter interface driver.
36   - \ref usb_interface_gr "USB": Interface driver for USB Host and USB Device communication.
37   - \ref vio_interface_gr "VIO": API for virtual I/Os (VIO).
38   - \ref wifi_interface_gr "WiFi": Interface driver for wireless communication.
39
40 \note Usually, WiFi chips and modules have their own networking stack incorporated. This means that payload data is sent via
41 a serial interface (SPI or USART) to the WiFi chip/module and the Ethernet frames are assembled inside. If you intend to use
42 a TCP/IP stack from a middleware component with a WiFi chip/module, make sure that the WiFi driver has a \ref wifi_bypass_gr.
43 This allows to send the Ethernet frames assembled by the TCP/IP component transparently through the WiFi chip/module.
44
45 <hr>
46
47 CMSIS-Driver in ARM::CMSIS Pack
48 -------------------------------
49
50 The following files relevant to CMSIS-Driver are present in the <b>ARM::CMSIS</b> Pack directories:
51 | Directory                      | Content                                                                |
52 |--------------------------------|------------------------------------------------------------------------|
53 |\b CMSIS/Documentation/Driver   | This documentation                                                     |
54 |\b CMSIS/Driver/Include         | Driver header files (Driver_<i>interface</i>.h, Driver_Common.h)       |
55 |\b CMSIS/Driver/DriverTemplates | Driver implementation template files (Driver_<i>interface</i>.c)       |
56
57 <hr>
58 */
59
60 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
61 /**
62 \page driver_revisionHistory Revision History of CMSIS-Driver
63
64
65 <table class="cmtable" summary="Revision History">
66     <tr>
67       <th>Version</th>
68       <th>Description</th>
69     </tr>
70     <tr>
71       <td>2.8.0</td>
72       <td>
73         - Changed: removed volatile from status related typedefs APIs
74         - Enhanced WiFi Interface API with support for polling Socket Receive/Send
75         - Added VIO API 0.1.0 (Preview)
76       </td>
77     </tr>
78     <tr>
79       <td>2.7.1</td>
80       <td>
81         - Finalized WiFi Interface API 1.0.0.
82       </td>
83     </tr>
84     <tr>
85       <td>2.7.0</td>
86       <td>
87         - Added WiFi Interface API 1.0.0-beta.
88         - Added custom driver selection to simplify implementation of new CMSIS-Driver.
89       </td>
90     </tr>
91     <tr>
92       <td>2.6.0</td>
93       <td>
94         - Enhanced CAN-Driver API with explicit BUSOFF state.
95         - Enhanced NAND-Driver API for ECC handling.
96       </td>
97     </tr>
98     <tr>
99       <td>2.05</td>
100       <td>
101         - Changed: All typedefs related to status have been made volatile. 
102       </td>
103     </tr>
104     <tr>
105       <td>2.04</td>
106       <td>
107         - Added: template files for CAN interface driver.
108       </td>
109     </tr>
110     <tr>
111       <td>2.03</td>
112       <td>
113         - Added: CAN API for an interface to CAN peripherals
114         - Added: Overview of the \ref driverValidation "CMSIS-Driver Validation" Software Pack.
115         - Enhanced: documentation and clarified behavior of the \ref CallSequence.
116       </td>
117     </tr>
118     <tr>
119       <td>2.02</td>
120       <td>
121         - Minor API changes, for exact details refer to the header file of each driver.
122         - Added: Flash Interface, NAND interface.
123       </td>
124     </tr>
125     <tr>
126       <td>2.00</td>
127       <td>API with non-blocking data transfer, independent of CMSIS-RTOS.</td>
128     </tr>
129     <tr>
130       <td>1.10</td>
131       <td>Initial release</td>
132     </tr>
133 </table>
134 */
135
136 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
137 /**
138 \page theoryOperation Theory of Operation
139
140 [TOC]
141
142 This section gives an overview of the general operation of CMSIS-Drivers. It explains the \ref DriverFunctions that are
143 common in all CMSIS-Drivers along with the \ref CallSequence. The topic \ref Data_Xfer_Functions describes how data
144 read/write operations to the peripheral are implemented.
145
146 Each CMSIS-Driver defines an \ref AccessStruct for calling the various driver functions and each peripheral (that is accessed
147 via a CMSIS-Driver) has one \ref DriverInstances "Driver Instance".
148
149
150 \section DriverFunctions Common Driver Functions
151
152 Each CMSIS-Driver contains these functions:
153
154  - \b GetVersion: can be called at any time to obtain version information of the driver interface.
155  
156  - \b GetCapabilities: can be called at any time to obtain capabilities of the driver interface.
157  
158  - \b Initialize: must be called before powering the peripheral using \b PowerControl. This function performs the following:
159      - allocate I/O resources.
160          - register an optional \b SignalEvent callback function.
161
162  - \b SignalEvent: is an optional callback function that is registered with the \b Initialize function. This callback
163    function is initiated from interrupt service routines and indicates hardware events or the completion of a data block
164    transfer operation.
165
166  - \b PowerControl: Controls the power profile of the peripheral and needs to be called after \b Initialize. Typically, three
167    power options are available:
168      - \c ARM_POWER_FULL: Peripheral is turned on and fully operational. The driver initializes the peripheral registers, interrupts, and (optionally) DMA.
169      - \c ARM_POWER_LOW: (optional) Peripheral is in low power mode and partially operational; usually, it can detect
170        external events and wake-up.
171      - \c ARM_POWER_OFF: Peripheral is turned off and not operational (pending operations are terminated). This is the state
172        after device reset.
173  
174  - \b Uninitialize: Complementary function to Initialize. Releases the I/O pin resources used by the interface.
175
176  - \b Control: Several drivers provide a control function to configure communication parameters or execute miscellaneous
177    control functions.
178
179 The section \ref CallSequence contains more information on the operation of each function. Additional functions are specific
180 to each driver interface and are described in the individual sections of each driver.
181
182 \subsection ProcessorMode Cortex-M Processor Mode
183
184 The CMSIS-Driver functions access peripherals and interrupts and are designed to execute in \b Privileged mode.
185 When calling CMSIS-Driver functions from RTOS threads, it should be ensure that these threads execute in \b Privileged mode.
186
187
188 \section CallSequence Function Call Sequence
189
190 For normal operation of the driver, the API functions \b GetVersion, \b GetCapabilities, \b Initialize, \b PowerControl, \b Uninitialize are 
191 called in the following order:
192
193 \msc
194  a [label="", textcolor="indigo", linecolor="indigo", arclinecolor="indigo"],
195  b [label="", textcolor="blue", linecolor="blue", arclinecolor="blue"];
196
197  a rbox a [label="Middleware", linecolor="indigo"],
198  b rbox b [label="Driver", linecolor="blue"];
199  --- [label="Verify API version"];
200  a=>b [label="GetVersion ()", textcolor="gray", linecolor="gray"];
201  --- [label="Obtain driver features"];
202  a=>b [label="GetCapabilities (...)", textcolor="gray", linecolor="gray"];
203  ---  [label="Setup software resources"];
204  a=>b [label="Initialize (...)", textcolor="red", linecolor="red"];
205  --- [label="Setup the peripheral"];
206  a=>b  [label="PowerControl (ARM_POWER_FULL)", textcolor="red", linecolor="red"];
207  --- [label="Operate with the peripheral"];
208  a=>b [label="Data Transfer Functions"];
209  a<=b  [label="SignalEvent (...)"];
210  --- [label="Wait for external hardware events"];
211  a=>b  [label="PowerControl (ARM_POWER_LOW)"];
212  a<=b  [label="SignalEvent (...)"];
213  --- [label="Stop working with peripheral"];
214  a=>b [label="PowerControl (ARM_POWER_OFF)", textcolor="red", linecolor="red"];
215  a=>b [label="Uninitialize (...)", textcolor="red", linecolor="red"];
216 \endmsc
217
218 The functions \b GetVersion and \b GetCapabilities can be called any time to obtain the required information from the driver.
219 These functions return always the same information.
220
221
222 \subsection CS_start Start Sequence
223
224 To start working with a peripheral the functions \b Initialize and \b PowerControl need to be called in this order:
225 \code
226   drv->Initialize (...);                 // Allocate I/O pins
227   drv->PowerControl (ARM_POWER_FULL);    // Power up peripheral, setup IRQ/DMA
228 \endcode
229
230 - \b Initialize typically allocates the I/O resources (pins) for the peripheral. The function can be called multiple times;
231   if the I/O resources are already initialized it performs no operation and just returns with \ref ARM_DRIVER_OK.
232 - \b PowerControl (\c ARM_POWER_FULL) sets the peripheral registers including interrupt (NVIC) and optionally DMA.
233   The function can be called multiple times; if the registers are already set it performs no operation and just returns with \ref ARM_DRIVER_OK.
234   
235 \subsection CS_stop Stop Sequence
236
237 To stop working with a peripheral the functions \b PowerControl and \b Uninitialize need to be called in this order:
238 \code
239   drv->PowerControl (ARM_POWER_OFF);     // Terminate any pending transfers, reset IRQ/DMA, power off peripheral
240   drv->Uninitialize (...);               // Release I/O pins
241 \endcode
242 The functions \b PowerControl and \b Uninitialize always execute and can be used to put the peripheral into a <b>Safe State</b>,
243 for example after any data transmission errors.  To restart the peripheral in a error condition, you should first execute
244 the \ref CS_stop and then the \ref CS_start.
245
246 - \b PowerControl (\c ARM_POWER_OFF) terminates any pending data transfers with the peripheral, disables the peripheral and 
247   leaves it in a defined mode (typically the reset state).
248     - when DMA is used it is disabled (including the interrupts)
249     - peripheral interrupts are disabled on NVIC level
250     - the peripheral is reset using a dedicated reset mechanism (if available) or by clearing the peripheral registers
251     - pending peripheral interrupts are cleared on NVIC level
252     - driver variables are cleared
253 - \b Uninitialize always releases I/O pin resources.
254
255 \section Share_IO Shared I/O Pins
256
257 All CMSIS-Driver provide a \ref CS_start and \ref CS_stop. Therefore two different drivers can share the same I/O pins, 
258 for example UART1 and SPI1 can have overlapping I/O pins. In this case the communication channels can be used as shown below:
259
260 \code 
261   SPI1drv->Initialize (...);                // Start SPI1
262   SPI1drv->PowerControl (ARM_POWER_FULL);
263    ...                                      // Do operations with SPI1
264   SPI1drv->PowerControl (ARM_POWER_OFF);    // Stop SPI1
265   SPI1drv->Uninitialize ();
266    ...
267   USART1drv->Initialize (...);              // Start USART1
268   USART1drv->PowerControl (ARM_POWER_FULL);
269    ...                                      // Do operations with USART1
270   USART1drv->PowerControl (ARM_POWER_OFF);  // Stop USART1
271   USART1drv->Uninitialize ();
272 \endcode
273  
274 \section Data_Xfer_Functions Data Transfer Functions
275
276 A CMSIS-Driver implements non-blocking functions to transfer data to a peripheral. This means that the driver configures the
277 read or write access to the peripheral and instantly returns to the calling application.  The function names for data
278 transfer end with:
279  - \b Send to write data to a peripheral.
280  - \b Receive to read data from a peripheral.
281  - \b Transfer to indicate combined read/write operations to a peripheral.
282
283 During a data transfer, the application can query the number of transferred data items using functions named
284 <b>Get<i>xxx</i>Count</b>. On completion of a data transfer, the driver calls a callback function with a specific event code.
285
286 During the data exchange with the peripheral, the application can decide to:
287  - Wait (using an RTOS scheduler) for the callback completion event. The RTOS is controlled by the application code which
288    makes the driver itself RTOS independent.
289  - Use polling functions that return the number of transferred data items to show progress information or partly read or fill
290    data transfer buffers.
291  - Prepare another data transfer buffer for the next data transfer.
292  
293 The following diagram shows the basic communication flow when using the \b _Send function in an application.
294
295 \image html Non_blocking_transmit_small.png  "Non-blocking Send Function"
296
297 \section AccessStruct Access Struct
298
299 A CMSIS-Driver publishes an \ref AccessStruct with the data type name ARM_DRIVER_xxxx that gives to access the driver
300 functions.
301
302 \b Code \b Example: \b Function \b Access \b of \b the \b SPI \b driver
303 \code
304 typedef struct _ARM_DRIVER_SPI {
305   ARM_DRIVER_VERSION   (*GetVersion)      (void);
306   ARM_SPI_CAPABILITIES (*GetCapabilities) (void);
307   int32_t              (*Initialize)      (ARM_SPI_SignalEvent_t cb_event);
308   int32_t              (*Uninitialize)    (void);
309   int32_t              (*PowerControl)    (ARM_POWER_STATE state);
310   int32_t              (*Send)            (const void *data, uint32_t num);
311   int32_t              (*Receive)         (      void *data, uint32_t num);
312   int32_t              (*Transfer)        (const void *data_out, void *data_in, uint32_t num);
313   uint32_t             (*GetDataCount)    (void);
314   int32_t              (*Control)         (uint32_t control, uint32_t arg);
315   ARM_SPI_STATUS       (*GetStatus)       (void);
316 } const ARM_DRIVER_SPI;
317 \endcode
318
319 \subsection DriverInstances Driver Instances
320
321 A device may offer several peripherals of the same type. For such devices, the CMSIS-Driver publishes multiple instances
322 of the \ref AccessStruct. The name of each driver instance reflects the names of the peripheral available in the device.
323
324 \b Code \b Example: \ref AccessStruct \b for \b three \b SPIs \b in \b a \b microcontroller \b device.
325 \code
326 ARM_DRIVER_SPI Driver_SPI1;     // access functions for SPI1 interface
327 ARM_DRIVER_SPI Driver_SPI2;     // access functions for SPI2 interface
328 ARM_DRIVER_SPI Driver_SPI3;     // access functions for SPI3 interface
329 \endcode
330
331 The access functions can be passed to middleware to specify the driver instance that the middleware should use for communication.
332
333 \b Naming \b Convention
334
335 The access structs need to follow this naming convention: the keyword "Driver" followed by an underscore "_", the interface
336 name "IFNAME" (usually in upper case letters), and the instance number "n". Here's the full list of access struct names for
337 all drivers (n to be replaced with the actual instance number):
338 \code
339 Driver_CANn
340 Driver_ETH_MACn
341 Driver_ETH_PHYn
342 Driver_Flashn
343 Driver_I2Cn
344 Driver_MCIn
345 Driver_NANDn
346 Driver_SAIn
347 Driver_SPIn
348 Driver_Storagen
349 Driver_USARTn
350 Driver_USBDn
351 Driver_USBHn
352 Driver_WiFin
353 \endcode
354
355
356 \b Example:
357 \code
358 void init_middleware (ARM_DRIVER_SPI *Drv_spi) ...
359 \\ inside the middleware the SPI driver functions are called with:
360 \\   Drv_spi->function (...);
361 \endcode
362  
363 \code
364 \\ setup middleware
365 init_middleware (&Driver_SPI1);      // connect middleware to SPI1 interface
366   :
367 init_middleware (&Driver_SPI2);      // connect middleware to SPI2 interface
368 \endcode
369
370
371 \section DriverConfiguration Driver Configuration
372
373 For a device family, the drivers may be configurable. The \ref referenceImplementation stores configuration options in a
374 central file with the name \b RTE_Device.h. However, the configuration of the drivers itself is not part of the CMSIS-Driver
375 specification.
376
377 \section CodeExample Code Example
378
379 The following example code shows the usage of the SPI interface.
380
381 \include SPI_Demo.c
382 */
383
384 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
385 /**
386 \page referenceImplementation Reference Implementation
387
388 The API of the CMSIS-Drivers is published in the \ref DriverHeaderFiles.
389
390 To simplify the development of a CMSIS-Driver both \ref DriverTemplates and \ref DriverExamples are provided.
391
392 ARM offers also a Software Pack for CMSIS-Driver Validation as described in \ref driverValidation.
393
394 \section DriverHeaderFiles Driver Header Files
395
396 The API of each CMSIS-Driver is published in a header file. It is recommended to include the header file that is part of the
397 CMSIS specification in the implementation file of the CMSIS-Driver. 
398
399 The following header files are available in the directory <b>.\\CMSIS\\Driver\\Include</b>.
400
401 | Header File          | Description
402 |----------------------|-------------------------
403 | %Driver_Common.h     | \ref common_drv_gr
404 | %Driver_CAN.h        | \ref can_interface_gr
405 | %Driver_ETH.h        | \ref eth_interface_gr
406 | %Driver_ETH_MAC.h    | \ref eth_mac_interface_gr
407 | %Driver_ETH_PHY.h    | \ref eth_phy_interface_gr
408 | %Driver_Flash.h      | \ref flash_interface_gr
409 | %Driver_I2C.h        | \ref i2c_interface_gr
410 | %Driver_MCI.h        | \ref mci_interface_gr
411 | %Driver_NAND.h       | \ref nand_interface_gr
412 | %Driver_SPI.h        | \ref spi_interface_gr
413 | %Driver_Storage.h    | \ref storage_interface_gr
414 | %Driver_SAI.h        | \ref sai_interface_gr
415 | %Driver_USART.h      | \ref usart_interface_gr
416 | %Driver_USB.h        | \ref usb_interface_gr
417 | %Driver_USBD.h       | \ref usbd_interface_gr
418 | %Driver_USBH.h       | \ref usbh_interface_gr
419 | %Driver_WiFi.h       | \ref wifi_interface_gr
420
421
422 \section DriverTemplates Driver Template Files
423
424 Driver template files are code skeletons that provide the structure of a CMSIS-Driver.  The following templates are 
425 available in the directory <b>.\\CMSIS\\Driver\\DriverTemplates</b>.
426
427 | Source File       | Description
428 |-------------------|------------------------------------
429 | %Driver_CAN.c     | \ref can_interface_gr
430 | %Driver_ETH_MAC.c | \ref eth_mac_interface_gr
431 | %Driver_ETH_PHY.c | \ref eth_mac_interface_gr
432 | %Driver_Flash.c   | \ref flash_interface_gr
433 | %Driver_I2C.c     | \ref i2c_interface_gr
434 | %Driver_MCI.c     | \ref mci_interface_gr
435 | %Driver_SAI.c     | \ref sai_interface_gr
436 | %Driver_SPI.c     | \ref spi_interface_gr
437 | %Driver_Storage.c | \ref storage_interface_gr
438 | %Driver_USART.c   | \ref usart_interface_gr
439 | %Driver_USBD.c    | \ref usbd_interface_gr
440 | %Driver_USBH.c    | \ref usbh_interface_gr
441
442
443 \section DriverExamples Driver Examples
444
445 The driver examples are full working CMSIS-Drivers that may be adapted to a different hardware. Examples are currently
446 available for the NXP LPC1800 series and provide the implementation of a complete CMSIS-Driver. The following examples are 
447 available in the directory <b>.\\CMSIS\\Pack\\Example\\CMSIS_Driver</b>.
448
449 | Source File       | Header File       | Description
450 |-------------------|-------------------|-------------------------------
451 | %EMAC_LPC18xx.c   | %EMAC_LPC18xx.h   | \ref eth_mac_interface_gr
452 | %SSP_LPC18xx.c    | %SSP_LPC18xx.h    | \ref spi_interface_gr
453 | %I2C_LPC18xx.c    | %I2C_LPC18xx.h    | \ref i2c_interface_gr
454 | %I2S_LPC18xx.c    | %I2S_LPC18xx.h    | \ref sai_interface_gr
455 | %MCI_LPC18xx.c    | %MCI_LPC18xx.h    | \ref mci_interface_gr
456 | %USART_LPC18xx.c  | %USART_LPC18xx.h  | \ref usart_interface_gr
457 | %USBn_LPC18xx.c   | %USB_LPC18xx.h    | common files for \ref usbd_interface_gr and \ref usbh_interface_gr
458 | %USBDn_LPC18xx.c  | <i>none</i>       | \ref usbd_interface_gr
459 | %USBHn_LPC18xx.c  | <i>none</i>       | \ref usbh_interface_gr
460
461
462 These CMSIS-Drivers use additional modules for GPIO and DMA control:
463
464 | Source File       | Header File      | Description
465 |-------------------|------------------|---------------------------------------
466 | %GPIO_LPC18xx.c   | %GPIO_LPC18xx.h  | GPIO Interface for LPC1800 series
467 | %GPDMA_LPC18xx.c  | <i>none</i>      | DMA Interface for LPC1800 series
468 | %SCU_LPC18xx.c    | %SCU_LPC18xx.h   | SCU Interface for LPC1800 series
469
470 The CMSIS-Drivers for the LPC1800 device have also many configuration options that are controls using \#define statements in
471 the file <b>.\\CMSIS\\Pack\\Example\\CMSIS_Driver\\Config\\RTE_Device.h</b>. Using this file, the I/O pin and DMA assignment
472 can be set among other parameters such as USB speed and PHY interfaces. 
473
474 Further driver reference implementations are available in Device Family Packs (DFP) labeled with version 2.0.0 or higher. 
475 */
476
477 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
478 /**
479 \page driverValidation Driver Validation
480
481 The <a href="https://www.keil.com/pack/" target=_blank>Software Pack</a> named <b>ARM::CMSIS-Driver_Validation</b> contains the following:
482
483  - Source code of a CMSIS-Driver Validation Suite along with configuration file.
484  - Documentation of the CMSIS-Driver Validation Suite.
485  - Examples that shows the usage of the CMSIS-Driver Validation Suite on various target platforms.
486
487 The CMSIS-Driver Validation Suite performs the following tests:
488  - Generic Validation of API function calls
489  - Validation of Configuration Parameters
490  - Validation of Communication with loopback tests
491  - Validation of Communication Parameters such as baudrate
492  - Validation of Event functions
493
494 The following CMSIS-Drivers can be tested with the current release:
495  - \ref can_interface_gr : with loop back test of communication.
496  - \ref eth_interface_gr : MAC and PHY with loop back test of communication.
497  - \ref i2c_interface_gr : only API and setup; does not test data transfer.
498  - \ref mci_interface_gr : only API and setup; does not test data transfer.
499  - \ref spi_interface_gr : with loop back test of communication.
500  - \ref usart_interface_gr : with loop back test of communication.
501  - \ref usbd_interface_gr : only API and setup; does not test data transfer.
502  - \ref usbh_interface_gr : only API and setup; does not test data transfer.
503  - \ref wifi_interface_gr : extensive tests for WiFi Driver.
504  
505 The Driver Validation output can be printed to a console or saved in an XML file, via standard output (usually ITM).
506  
507 \section test_output Sample Test Output
508 \verbatim
509 CMSIS-Driver USART Test Report   Dec  6 2019   11:44:30 
510
511 TEST 01: USART_GetCapabilities            PASSED
512 TEST 02: USART_Initialization             PASSED
513 TEST 03: USART_PowerControl               
514   DV_USART.c (301): [WARNING] Low power is not supported
515                                           PASSED
516 TEST 04: USART_Config_PolarityPhase       PASSED
517 TEST 05: USART_Config_DataBits            
518   DV_USART.c (387): [WARNING] Data Bits = 9 are not supported
519                                           PASSED
520 TEST 06: USART_Config_StopBits            
521   DV_USART.c (425): [WARNING] Stop Bits = 1.5 are not supported
522   DV_USART.c (429): [WARNING] Stop Bits = 0.5 are not supported
523                                           PASSED
524 TEST 07: USART_Config_Parity              PASSED
525 TEST 08: USART_Config_Baudrate            PASSED
526 TEST 09: USART_Config_CommonParams        PASSED
527 TEST 10: USART_Send                       PASSED
528 TEST 11: USART_AsynchronousReceive        PASSED
529 TEST 12: USART_Loopback_CheckBaudrate     PASSED
530 TEST 13: USART_Loopback_Transfer          PASSED
531 TEST 14: USART_CheckInvalidInit           PASSED
532
533 Test Summary: 14 Tests, 14 Passed, 0 Failed.
534 Test Result: PASSED
535 \endverbatim
536
537 \section loop_back_setup Setup for Loop Back Communication
538
539 To perform loop back communication tests it is required to connect the input and the output of the peripherals as shown in this table:
540
541 Peripheral       | Loop Back Configuration
542 :----------------|:----------------------------
543 Ethernet         | Connect TX+ (Pin 1) with RX+ (Pin 3), TX- (Pin 2) with RX- (Pin 6)
544 SPI              | Connect MISO to MOSI
545 USART            | Connect TX with RX
546
547 The following picture shows the necessary external loop back connections for the Keil MCBSTM32F400 evaluation board:
548  - SPI: PB14 (SPI2_MISO) and PB15 (SPI2_MOSI)
549  - USART: PB6 (USART1_TX) and PB7 (USART1_RX)
550  - Ethernet: Pin 1 (TX+) and Pin 3 (RX+), Pin 2 (TX-) and Pin 6 (RX-) 
551
552 \image html image006.png  "Connections for Loop Back Communication Tests on Keil MCBSTM32F400"
553
554
555 */