]> begriffs open source - cmsis-driver-validation/blob - Doxygen/DriverValidation.txt
Add SPI_Server and USART_Server applications for STM32F429I-DISC1 board
[cmsis-driver-validation] / Doxygen / DriverValidation.txt
1 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
2 /**
3 \mainpage Introduction
4
5 This manual explains the scope and the usage of the Software Pack for <b>CMSIS-Driver Validation</b>.<br>
6 <a href="http://www.keil.com/pack/doc/CMSIS/Driver/html/index.html" target="_blank">CMSIS-Driver</a> specifies the 
7 software API for peripheral driver interfaces that connect microcontroller peripherals with middleware or the user application. 
8
9 The CMSIS-Driver Validation is used to validate the driver implementation compliance to the CMSIS-Driver specification.
10
11 The CMSIS-Driver Validation provides:
12   - Configurable validation tests for various CMSIS-Driver interfaces
13   - Example projects that show the usage of the CMSIS-Driver Validation
14   - Various Servers used for testing
15
16 The CMSIS-Driver Validation tests and verifies:
17   - <b>API interface</b> using the driver capabilities as well as valid and invalid parameters
18   - <b>Data communication</b> with various transfer sizes and communication parameters:
19     - <b>Loopback testing</b> (for some interfaces) for testing of the underlying hardware with usage of a local loopback
20     - <b>Server testing</b> (for some interfaces) for extensive testing of the underlying hardware with usage of a dedicated Server
21   - <b>Transfer speed</b> of the data communication with time measurement of data transfer duration
22   - <b>Event</b> signaling
23
24 The CMSIS-Driver Validation requires
25 <a href="http://www.keil.com/pack/doc/CMSIS/RTOS2/html/index.html" target="_blank">CMSIS-RTOS2</a> functionality and can be
26 used to verify the setup and configuration of the CMSIS-Driver interfaces in a user system.<br>
27
28 The diagram below shows an overview of the CMSIS-Driver Validation configuration.
29
30 \image html cmsis_dv.png
31
32 This manual contains the following chapters:
33   - \ref setup                 - Describes the general setup of the CMSIS-Driver Validation test and how to generate test report.
34   - \ref report                - Describes the reports produced by the CMSIS-Driver Validation.
35   - \ref debugging             - Describes procedure for debugging of the interface drivers using the CMSIS-Driver Validation.
36   - \ref resource_requirements - Lists memory and CMSIS-RTOS2 requirements.
37   - \ref examples              - Contains information about several example projects including the required hardware setup.
38   - <a class="el" href="./modules.html">Reference</a> - Explains the configuration and tests for the various CMSIS-Driver interfaces.
39
40 The CMSIS-Driver Validation provides validation for the following interfaces:
41   - \ref dv_can   "CAN"        - Controller Area Network (CAN) interface driver.
42   - \ref dv_eth   "Ethernet"   - Ethernet MAC and PHY peripheral interface driver.
43   - \ref dv_i2c   "I2C"        - Inter-Integrated Circuit (I2C) multi-master serial single-ended bus interface driver.
44   - \ref dv_mci   "MCI"        - Memory Card Interface driver for SD/MMC memory.
45   - \ref dv_spi   "SPI"        - Serial Peripheral Interface (SPI) driver.
46   - \ref dv_usart "USART"      - Universal Synchronous and Asynchronous Receiver/Transmitter (USART) interface driver.
47   - \ref dv_usbd  "USB Device" - Universal Serial Bus (USB) Device interface driver.
48   - \ref dv_usbh  "USB Host"   - Universal Serial Bus (USB) Host interface driver.
49   - \ref dv_wifi  "WiFi"       - WiFi (Wireless Fidelity Interface) module/shield driver.
50
51 \note Extensive testing using dedicated Server is available for SPI and USART drivers.
52
53 This manual assumes that you are familiar with MDK. Refer to
54 <a href="http://www2.keil.com/mdk5/install" target="_blank">MDK Version 5 - Getting Started</a> for additional information.
55
56 <hr>
57
58 Revision History
59 ----------------
60
61 <table class="cmtable" summary="Revision History">
62     <tr>
63       <th>Version</th>
64       <th>Description</th>
65     </tr>
66
67     <tr>
68       <td>V3.0.0-dev14</td>
69       <td>
70         - Add SPI_Server application for STM32F429I-DISC1 board
71         - Add USART_Server application for STM32F429I-DISC1 board
72       </td>
73     </tr>
74     <tr>
75       <td>V3.0.0-dev13</td>
76       <td>
77         - Update to SPI_Server on MCBSTM32F400 board (use latest packs)
78         - Update to USART_Server on MCBSTM32F400 board (use latest packs)
79       </td>
80     </tr>
81     <tr>
82       <td>V3.0.0-dev12</td>
83       <td>
84         - Minor update to USART_Server application (enable Tx before set break command)
85       </td>
86     </tr>
87     <tr>
88       <td>V3.0.0-dev11</td>
89       <td>
90         - Minor update to SPI driver validation (data buffers aligned to 32 bytes for DMA testing)
91       </td>
92     </tr>
93     <tr>
94       <td>V3.0.0-dev10</td>
95       <td>
96         - Minor update to USART driver validation (data buffers aligned to 32 bytes for DMA testing, 
97           Tx Underflow and Rx Overflow tests not executed in synchronous master mode)
98       </td>
99     </tr>
100     <tr>
101       <td>V3.0.0-dev9</td>
102       <td>
103         - Minor update to SPI driver validation (enable Data Bits tests in loopback mode)
104         - Minor update to SPI_Server application (use software controlled Slave Select in Master mode)
105       </td>
106     </tr>
107     <tr>
108       <td>V3.0.0-dev8</td>
109       <td>
110         - Minor update to USART driver validation (corrected RTS/CTS tests, less strict Initialize/Uninitialize and PowerControl tests)
111       </td>
112     </tr>
113     <tr>
114       <td>V3.0.0-dev7</td>
115       <td>
116         - Add support for Arm Cortex-M85 processor based devices
117         - Add support for Arm China Star-MC1 processor based devices
118       </td>
119     </tr>
120     <tr>
121       <td>V3.0.0-dev6</td>
122       <td>
123         - Add pack version information in Test Report
124       </td>
125     </tr>
126     <tr>
127       <td>V3.0.0-dev5</td>
128       <td>
129         - Minor update to WiFi driver validation (less strict SocketAccept and SocektSend tests)
130       </td>
131     </tr>
132     <tr>
133       <td>V3.0.0-dev4</td>
134       <td>
135         - Minor update to USART driver validation (USART_TxBreak test documentation)
136       </td>
137     </tr>
138     <tr>
139       <td>V3.0.0-dev3</td>
140       <td>
141         - Update validation examples for Espressif ESP32, ESP8266 and WizNet WizFi360
142         - Add SockServer application for IMXRT1050-EVKB
143       </td>
144     </tr>
145     <tr>
146       <td>V3.0.0-dev2</td>
147       <td>
148         - Minor update of WiFi Driver non-blocking mode tests
149         - Update examples
150       </td>
151     </tr>
152     <tr>
153       <td>V3.0.0-dev1</td>
154       <td>
155         - Add WiFi Driver tests (socket functions in non-blocking mode)
156         - Update examples (WiFi Driver related)
157       </td>
158     </tr>
159     <tr>
160       <td>V3.0.0-dev0</td>
161       <td>
162         - Rework USART driver validation (introduced USART_Server)
163         - Add USART_Server application for Keil MCBSTM32F400 evaluation board
164         - Update examples
165         - Update documentation
166       </td>
167     </tr>
168     <tr>
169       <td>V2.0.1-dev2</td>
170       <td>
171         - Minor update to SPI driver validation documentation
172         - Minor update to SPI_Server
173       </td>
174     </tr>
175     <tr>
176       <td>V2.0.1-dev1</td>
177       <td>
178         - Improved robustness of SPI Driver testing
179         - Improved robustness of SPI Server
180       </td>
181     </tr>
182     <tr>
183       <td>V2.0.1-dev0</td>
184       <td>
185         - Minor update to SPI Driver testing
186       </td>
187     </tr>
188     <tr>
189       <td>V2.0.0</td>
190       <td>
191         - Remove bundle from components
192         - Change configuration from single file to a file per component
193         - Rework SPI Driver testing (introduced SPI_Server)
194         - Add SPI_Server application for Keil MCBSTM32F400 evaluation board
195         - Update WiFi Driver tests (support for WiFi Driver API V1.1.0)
196         - Update all examples
197         - Deprecate CMSIS-RTOS1
198       </td>
199     </tr>
200     <tr>
201       <td>V1.4.0</td>
202       <td>
203         - Updated conditions to support all Cortex-M devices
204         - Introduced test groups (each driver is organized in a group)
205         - Improved XSL for XML display
206         - Updated all examples
207         - Removed example for Atmel board
208         - WiFi Driver Testing: Added SockServer application for PC running Microsoft Windows
209         - WiFi Driver Testing: Added upstream and downstream bandwidth testing
210         - WiFi Driver Testing: Added example for Inventek ISM43362 WiFi Driver testing on STMicroelectronics B-L475E-IOT01A1 board
211         - WiFi Driver Testing: Added example for Inventek ISM43362 WiFi Driver testing using ISMART43362-E WiFi shield mounted on NXP LPCXpresso55S69 board
212         - WiFi Driver Testing: Added examples for Espressif ESP8266 and ESP32 WiFi Driver testing with NXP MIMXRT1064-EVK board
213         - WiFi Driver Testing: Added example for WIZnet WizFi360 WiFi Driver testing with NXP MIMXRT1064-EVK board
214       </td>
215     </tr>
216     <tr>
217       <td>V1.3.0</td>
218       <td>
219         - Added WiFi tests
220       </td>
221     </tr>
222     <tr>
223       <td>V1.2.0</td>
224       <td>
225         - Added CMSIS-RTOS2 and Arm Compiler 6 compatibility
226       </td>
227     </tr>
228     <tr>
229       <td>V1.1.0</td>
230       <td>
231         - Added USB Host, CAN and Ethernet Precision Time Protocol tests
232       </td>
233     </tr>
234     <tr>
235       <td>V1.0.0</td>
236       <td>
237         - Initial release for CMSIS-Driver API V2.0
238       </td>
239     </tr>
240  </table>
241
242
243 */
244 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
245 /**
246 \page setup Setup
247
248 \section step1 Step 1: Create an MDK project for your target microcontroller device
249
250
251 \section step2 Step 2: Add the required software components
252
253 For proper operation, add the following software components in the <b>Manage Run-Time Environment</b> window:
254 - <b>CMSIS Driver Validation: Framework</b>
255 - <b>CMSIS Driver Validation: driver</b>, driver interfaces to be tested
256 - <b>CMSIS Driver: driver</b>, driver implementations to be tested
257 - <b>CMSIS: RTOS2 (API): Keil RTX5</b>
258 - <b>Compiler: I/O: STDOUT</b>, variant \b ITM (if your hardware does not support ITM select \b EVR to use Event Recorder instead of ITM)
259 - Resolve any unresolved component dependencies
260
261
262 \section step3 Step 3: Add the application's main file (main.c)
263
264 Right-click <b>Source Group 1...</b> and select <b>Add New Item to Group</b>, select <b>User Code Template</b> and choose the
265 <b>CMSIS-RTOS2 'main' function</b> file from <b>CMSIS: RTOS2:Keil RTX5</b>.
266
267 Add this include:
268 \code
269 #include "cmsis_dv.h"
270 \endcode
271
272 In the <c>app_main</c> function, create the \c cmsis_dv thread, before endless <c>for</c> loop:
273 \code
274 osThreadNew(cmsis_dv, NULL, NULL);
275 \endcode
276 to run all the tests that you have chosen in the next step.
277
278
279 \section step4 Step 4: Configure the CMSIS-Driver Validation framework in DV_Config.h file
280
281 Open <b>DV_Config.h</b> under the <b>CMSIS Driver Validation</b> group in the Project window.
282
283 In the configuration file <b>DV_Config.h</b> select <b>Plain Text</b> as the <b>Report Format</b>.
284
285 \section step5 Step 5: Configure the interface settings and tests in related DV_interface_Config.h files
286
287 Each interface has a related <b>DV_<i>interface</i>_Config.h</b> file, where <i>interface</i> represents interface's acronym or abbreviation.<br>
288 For example for Serial Peripheral Interface (SPI) related config file name is DV_SPI_Config.h.
289
290 For details on interface specific configuration and test selection please check the Configuration section in the 
291 <a class="el" href="./modules.html">Reference</a> of the related interface.
292
293
294 \section step6 Step 6: Configure the Heap memory
295
296 Depending on the buffer sizes used for data transfer tests the heap size has to be adjusted to provide enough memory for these 
297 buffers to be allocated.<br>
298 Depending on how heap is configured in your system, open your <b>startup_<i>device</i>.s</b> file from the \b Device group in the \b Project window 
299 or use a <b>linker script</b> to adjust the heap size.<br>
300 Set the <b>heap size</b> to minimum of <b>16384</b> bytes.
301
302 For details on heap requirements please refer to the \ref heap_req "Heap Memory requirements" documentation.
303
304
305 \section step7 Step 7: Configure the CMSIS-RTOS2 (Keil RTX5)
306
307 Open <b>RTX_Config.h</b> and set:
308 - <b>System Configuration: Global Dynamic Memory size [bytes]</b> to \a 16384
309 - <b>Thread configuration: Default Thread stack size [bytes]</b> to \a 3072
310
311 For details on CMSIS-RTOS2 requirements please refer to the \ref rtos2_req "CMSIS-RTOS2 requirements" documentation.
312
313 \section step8 Step 8: Configure the Device
314
315 Depending on your device, you might have different pin/hardware configuration options. Usually, you can configure the device
316 using the \c RTE_Device.h file from the \b Device group or with a vendor provided pin configuration tool. 
317 Enable all interfaces you wish to test and make all necessary pin-out changes required by your actual board layout (consult the board schematics).<br> 
318 You can check the provided \ref examples "examples" as a reference point.
319
320 For a robust test with good coverage, implement various targets with different settings:
321 - Use <b>non-DMA (IRQ)</b> and <b>DMA</b> configurations if they are available on the driver
322 - Use different compiler <b>optimization levels</b> in the
323   <a href="http://www.keil.com/support/man/docs/uv4/uv4_dg_adscc.htm" target="_blank">C/C++ tab</a> of the
324   <b>Options for Target</b> dialog
325
326
327 \section step9 Step 9: Setup the required hardware
328
329 For the interfaces that support loopback testing: \ref dv_eth "Ethernet", \ref dv_usart "USART" and \ref dv_spi "SPI", 
330 connect the following pins on your target hardware together (refer to the hardware schematics):
331
332 - Ethernet: RX+ and TX+, RX- and TX-
333 - USART:    RX and TX
334 - SPI:      MOSI and MISO
335
336 For the interfaces that support testing with dedicated server: \ref dv_wifi "WiFi" and \ref dv_spi "SPI", 
337 connect the related hardware as required by the related server:
338
339 - WiFi: WiFi module has to be in close proximity to the Access Point which is in the same network as the required \ref wifi_sock_setup
340 - SPI:  MOSI, MISO, SCLK, SS, GND to the same lines on the \ref spi_server
341
342
343 \section step10 Step 10: Download and Run the Project
344
345 In the <b>Options for Target</b> dialog, under debug settings, if you use ITM as standard output channel ensure that 
346 \b Trace and <b>ITM port 0</b> are enabled and that the correct <b>Core Clock</b> frequency is set:
347
348 \image html target_dialog.png "ITM Channel setting"
349
350 Build, load and run the project. The output is displayed in the <b>Debug (printf) Viewer</b> window.<br>
351 Example below shows output result of an SPI driver testing:
352 \verbatim
353 CMSIS-Driver_Validation v3.0.0 CMSIS-Driver SPI Test Report   March  30 2022   13:44:11 
354
355 TEST 01: SPI_GetVersion                   
356   DV_SPI.c (1023): [INFO] Driver API version 2.3, Driver version 2.15
357                                           PASSED
358 TEST 02: SPI_GetCapabilities              PASSED
359 TEST 03: SPI_Initialize_Uninitialize      PASSED
360 TEST 04: SPI_PowerControl                 
361   DV_SPI.c (1314): [WARNING] PowerControl (ARM_POWER_LOW) is not supported
362                                           PASSED
363 TEST 05: SPI_Mode_Master_SS_Unused        PASSED
364 TEST 06: SPI_Mode_Master_SS_Sw_Ctrl       PASSED
365 TEST 07: SPI_Mode_Master_SS_Hw_Ctrl_Out   PASSED
366 TEST 08: SPI_Mode_Master_SS_Hw_Mon_In     PASSED
367 TEST 09: SPI_Mode_Slave_SS_Hw_Mon         PASSED
368 TEST 10: SPI_Mode_Slave_SS_Sw_Ctrl        PASSED
369 TEST 11: SPI_Format_Clock_Pol0_Pha0       PASSED
370 TEST 12: SPI_Format_Clock_Pol0_Pha1       PASSED
371 TEST 13: SPI_Format_Clock_Pol1_Pha0       PASSED
372 TEST 14: SPI_Format_Clock_Pol1_Pha1       PASSED
373 TEST 15: SPI_Format_Frame_TI              PASSED
374 TEST 16: SPI_Format_Clock_Microwire       NOT EXECUTED
375 TEST 17: SPI_Data_Bits_1                  NOT EXECUTED
376 TEST 18: SPI_Data_Bits_2                  NOT EXECUTED
377 TEST 19: SPI_Data_Bits_3                  NOT EXECUTED
378 TEST 20: SPI_Data_Bits_4                  NOT EXECUTED
379 TEST 21: SPI_Data_Bits_5                  NOT EXECUTED
380 TEST 22: SPI_Data_Bits_6                  NOT EXECUTED
381 TEST 23: SPI_Data_Bits_7                  NOT EXECUTED
382 TEST 24: SPI_Data_Bits_8                  PASSED
383 TEST 25: SPI_Data_Bits_9                  NOT EXECUTED
384 TEST 26: SPI_Data_Bits_10                 NOT EXECUTED
385 TEST 27: SPI_Data_Bits_11                 NOT EXECUTED
386 TEST 28: SPI_Data_Bits_12                 NOT EXECUTED
387 TEST 29: SPI_Data_Bits_13                 NOT EXECUTED
388 TEST 30: SPI_Data_Bits_14                 NOT EXECUTED
389 TEST 31: SPI_Data_Bits_15                 NOT EXECUTED
390 TEST 32: SPI_Data_Bits_16                 PASSED
391 TEST 33: SPI_Data_Bits_17                 NOT EXECUTED
392 TEST 34: SPI_Data_Bits_18                 NOT EXECUTED
393 TEST 35: SPI_Data_Bits_19                 NOT EXECUTED
394 TEST 36: SPI_Data_Bits_20                 NOT EXECUTED
395 TEST 37: SPI_Data_Bits_21                 NOT EXECUTED
396 TEST 38: SPI_Data_Bits_22                 NOT EXECUTED
397 TEST 39: SPI_Data_Bits_23                 NOT EXECUTED
398 TEST 40: SPI_Data_Bits_24                 NOT EXECUTED
399 TEST 41: SPI_Data_Bits_25                 NOT EXECUTED
400 TEST 42: SPI_Data_Bits_26                 NOT EXECUTED
401 TEST 43: SPI_Data_Bits_27                 NOT EXECUTED
402 TEST 44: SPI_Data_Bits_28                 NOT EXECUTED
403 TEST 45: SPI_Data_Bits_29                 NOT EXECUTED
404 TEST 46: SPI_Data_Bits_30                 NOT EXECUTED
405 TEST 47: SPI_Data_Bits_31                 NOT EXECUTED
406 TEST 48: SPI_Data_Bits_32                 NOT EXECUTED
407 TEST 49: SPI_Bit_Order_MSB_LSB            PASSED
408 TEST 50: SPI_Bit_Order_LSB_MSB            PASSED
409 TEST 51: SPI_Bus_Speed_Min                PASSED
410 TEST 52: SPI_Bus_Speed_Max                
411   DV_SPI.c (3524): [WARNING] At requested bus speed of 10000000 bps, effective bus speed is 6477809 bps
412                                           PASSED
413 TEST 53: SPI_Number_Of_Items              PASSED
414 TEST 54: SPI_Abort                        PASSED
415 TEST 55: SPI_DataLost                     PASSED
416 TEST 56: SPI_ModeFault                    PASSED
417
418 Test Summary: 56 Tests, 25 Passed, 0 Failed.
419 Test Result: PASSED
420 \endverbatim
421
422 */
423 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
424 /**
425 \page report Report
426
427 The CMSIS-Driver Validation can output the test report in a <b>Plain Text</b> format or as an <b>XML</b> formatted file.<br>
428 Selection of the output report type is done in the <b>DV_Config.h</b> configuration file.
429
430 \image html dv_config_h.png "Configuration file DV_Config.h in Configuration Wizard view mode"
431
432 The <b>Plain Text</b> selection instructs the CMSIS-Driver Validation framework to generate a plain text report 
433 which can be seen in the <b>Debug (printf) Viewer</b> window and is mostly used for driver debugging purposes 
434 but can also be used as a final report.
435
436 The <b>XML</b> selection instructs the CMSIS-Driver Validation framework to generate an XML formatted report 
437 which is meant to be used as a final report and can be viewed nicely in any Web browser.<br>
438
439 The report file can be written into a <b>TestReport.xml</b> file directly by the uVision with an additional debugger script 
440 called <b>SaveXML.ini</b> which needs to be specified as <b>Initialization File:</b> for the <b>Debugger</b> in the 
441 <b>Options for target</b> dialog, or it can be copy-pasted manually from the <b>Debug (printf) Viewer</b> window to 
442 the TestReport.xml file.<br>
443 The SaveXML.ini script can be found in <c>\<pack root directory\></c><b>\\Scripts</b> directory.
444
445 To view <b>TestReport.xml</b> file in a Web browser an additional style sheet <b>TR_Style.xsl</b> file needs to be 
446 in the same directory as the TestReport.xml file.<br>
447 The TR_Style.xsl file contains the description of formatting for the Web browser to display the TestReport.xml report and 
448 can be found in <c>\<pack root directory\></c><b>\\Scripts</b> directory.
449
450
451 The XML file uses coloring to differentiate the results in the following way:
452  - <span style="font-weight:bold; color:Green">Passed</span> status means that test function has passed successfully.
453  - <span style="font-weight:bold; color:DarkOrange">Passed</span> status means that test function has passed but there were some warnings 
454      (<c>More details</c> can be used to see the details about warnings).
455  - <span style="font-weight:bold; color:Blue">Not executed</span> status means that test function did not check any assertions.
456  - <span style="font-weight:bold; color:Red">Failed</span> status means that test function has failed 
457      (<c>More details</c> can be used to see the details on reasons of failure).
458
459 */
460 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
461 /**
462 \page debugging Debugging
463
464 After running the CMSIS-Driver Validation output report is used to see if the driver is compliant to the CMSIS-Driver specification.
465
466 If the result of the driver testing under <c>Test Summary</c> contains any <c>Failed</c> tests then the driver needs to be corrected.
467
468 Example of report in the Plain Text format of a non-compliant SPI driver:
469 \verbatim
470 CMSIS-Driver SPI Test Report   May  6 2020   10:47:11 
471
472 TEST 01: SPI_GetVersion                   
473   DV_SPI.c (1023): [INFO] Driver API version 2.3, Driver version 2.15
474                                           PASSED
475 TEST 02: SPI_GetCapabilities              PASSED
476 TEST 03: SPI_Initialize_Uninitialize      
477   DV_SPI.c (1106): [FAILED]
478   DV_SPI.c (1109): [FAILED]
479   DV_SPI.c (1112): [FAILED]
480                                           FAILED
481 TEST 04: SPI_PowerControl                 
482   DV_SPI.c (1314): [WARNING] PowerControl (ARM_POWER_LOW) is not supported
483                                           PASSED
484 ...
485
486 Test Summary: 56 Tests, 24 Passed, 1 Failed.
487 Test Result: FAILED
488 \endverbatim
489
490 From previous report it is clear that one test function has failed.<br>
491 By Inspecting the details in previous report it is clear that <c>TEST 03: SPI_Initialize_Uninitialize</c> has failed 
492 on multiple assertions.<br>
493 Each failed assertion is recorded as a single  line in the test report.<br>
494 The failed assert information in the output report contains additional information about the <b>source module</b> and <b>line</b> 
495 in that module where the assertion is located with additional debugging info if available.
496
497 The documentation can be consulted regarding the failed function, for example in previous case 
498 documentation on the \ref SPI_Initialize_Uninitialize can be consulted.
499
500 Main way of fixing the driver consists of opening reported file mentioned as failed and inspecting the 
501 line in which failure was reported.
502
503 If there are many failures, it is recommended to deselect all tests except first failing one 
504 so it is easier to focus on just that failure.
505 Also, selecting only first failing test removes potential clutter from following failing tests that 
506 are all failing due to same cause.
507
508 In the previous report, opening <b>DV_SPI.c</b> module (available in the project) and inspecting the <b>1106</b> line 
509 which states:
510 \verbatim
511   // Driver is uninitialized and peripheral is powered-off:
512   // Call PowerControl(ARM_POWER_FULL) function and assert that it returned ARM_DRIVER_ERROR status
513   TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_ERROR);
514 \endverbatim
515
516 informs us that call to <c>PowerControl (ARM_POWER_FULL)</c>, when driver is not initialized, is expected to 
517 return <c>ARM_DRIVER_ERROR</c> status code but it has returned a different status code instead.
518
519 We should put a breakpoint to this line and start the debug session.<br>
520 When the breakpoint is hit we can see that a call to <c>PowerControl (ARM_POWER_FULL)</c> has returned <c>ARM_DRIVER_OK</c> 
521 instead of expected <c>ARM_DRIVER_ERROR</c> status code.
522
523 We can now go into source code of the driver and fix this.
524
525 After we have fixed the driver, the report now looks like below:
526
527 \verbatim
528 CMSIS-Driver SPI Test Report   May  6 2020   11:15:30 
529
530 TEST 01: SPI_GetVersion                   
531   DV_SPI.c (1023): [INFO] Driver API version 2.3, Driver version 2.15
532                                           PASSED
533 TEST 02: SPI_GetCapabilities              PASSED
534 TEST 03: SPI_Initialize_Uninitialize      PASSED
535 TEST 04: SPI_PowerControl                 
536   DV_SPI.c (1314): [WARNING] PowerControl (ARM_POWER_LOW) is not supported
537                                           PASSED
538 ...
539
540 Test Summary: 56 Tests, 25 Passed, 0 Failed.
541 Test Result: PASSED
542 \endverbatim
543
544 The fix for the assertion failing in line 1106 has also fixed subsequent assertions 
545 in lines 1109 and 1112 thus the driver now reports no failed tests and reports that all 
546 of the 25 executed tests have passed.
547
548 This report could be used as an insurance that the SPI Driver on this device is compliant to the CMSIS-Driver specification.
549
550 The TestReport.xml report created instead of Plain Text opened in a Web browser looks similar to the the picture below:
551
552 \image html xml_report.png "XML test report"
553
554 */
555 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
556 /**
557 \page resource_requirements Resource Requirements
558
559 \section heap_req Heap Memory
560 Heap memory is used by the memory allocation functions.<br>
561 It is usually configured in the <a class="el" href="http://www.keil.com/support/man/docs/gsac/gsac_startupcodecortex.htm" target="_blank">startup_device.s</a>
562 file located under the \b Device component class but it can also, in some cases,  be configured by a <b>linker script</b> instead.
563
564 Some interface test functions allocate additional buffers from the heap memory.
565
566 The CMSIS-Driver Validation framework does not impose heap requirements because it does not use heap memory.
567
568 Each interface test module has specific requirements for the heap memory, default requirements are listed below:
569
570 | Interface test module   | Heap memory requirement (in bytes) |
571 | :---------------------: | :--------------------------------: |
572 | CAN                     | 128                                |
573 | Ethernet                | 1024                               |
574 | SPI                     | 12288                              |
575 | USART                   | 8192                               |
576
577 Interface test modules that are not listed in the previous table do not use heap memory.
578
579 The system heap memory size must support the largest heap requirement of any used interface test module.<br>
580 For example, if SPI driver testing is selected heap memory size should be set to at least 12 kB.
581
582 Suggested value for heap memory size is <b>16384</b> bytes.
583
584 \note Each module contains additional settings in related configuration file which are not exposed through 
585       Configuration Wizard and impact the heap memory requirement.<br>
586       If these values are changed please adjust heap memory size accordingly.
587
588 \section rtos2_req CMSIS-RTOS2
589
590 The thread requirements need to be reflected in the CMSIS-RTOS2 configuration. Refer to the
591 <a class="el" href="http://www.keil.com/pack/doc/cmsis/RTOS2/html/index.html" target="_blank">CMSIS-RTOS2 Reference</a> for further details.
592
593 For <a class="el" href="http://www.keil.com/pack/doc/cmsis/RTOS2/html/rtx5_impl.html" target="_blank">CMSIS-RTOS2 RTX5</a>, thread
594 requirements are configured in the
595 <a class=el href="http://www.keil.com/pack/doc/cmsis/RTOS2/html/config_rtx5.html" target="_blank">RTX_Config.h</a> file located
596 under the \b CMSIS component class:
597
598 | Option                                                            | Value                              |
599 | :---------------------------------------------------------------- | :--------------------------------: |
600 | System Configuration: Global Dynamic Memory size [bytes] (Note 1) | 16384                              |
601 | Thread Configuration: Default Thread Stack size [bytes]           | 3072                               |
602
603 \note Note 1: This setting is only necessary for WiFi driver testing, for other driver testing value of 4096 bytes is sufficient.
604
605 */
606 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
607 /**
608 \page examples Examples
609
610 The CMSIS-Driver Validation Software Pack contains a set of examples that show how to use the CMSIS-Driver Validation on 
611 a real hardware.<br>
612 Use <a href="http://www2.keil.com/mdk5/packinstaller" target="_blank">Pack Installer</a> to copy them to your machine.
613
614 The following example projects are available:
615
616 - \subpage examples_xmc4500_relax
617 - \subpage examples_mcbstm32f200
618 - \subpage examples_mcbstm32f400
619 - \subpage examples_b_l475e_iot01a1
620 - \subpage examples_stm32f746g
621 - \subpage examples_ismart43362_e
622 - \subpage examples_esp8266
623 - \subpage examples_esp32
624 - \subpage examples_wizfi360
625
626 \anchor example_targets
627 Targets
628 -------
629
630 Example projects contain some of the following targets:
631 - <b>Create Report</b>: Test results and statistics are printed to the <b>TestReport\TestReport.xml</b> file. Open the file in a Web browser of your choice.
632 - \b Debug: Results and statistics are printed to the <b>Debug (printf) Viewer</b> window or to the <b>Virtual COM Port</b> through the on-board debugger.
633 - \b Release: Same as the Debug target but with higher level of code optimization selected.
634 */
635
636
637 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
638 /**
639 \page examples_xmc4500_relax Infineon XMC4500 Relax Kit
640
641 Software Setup
642 --------------
643
644 Using the <a href="http://www2.keil.com/mdk5/packinstaller" target="_blank">Pack Installer</a> install the latest 
645 <b>Infineon::XMC4000_DFP</b> pack and copy the example project
646 <b>CMSIS-Driver Validation (XMC4500 Relax Lite Kit)</b> to your machine.
647
648 -# Choose one of the available \ref example_targets "Targets" and build the project.
649 -# If you wish to test the loopback mode for some of the interfaces, refer to the next section for proper board
650    configuration.
651 -# Run the validation on the target hardware using the on-board JLink-Lite debugger.
652
653 Hardware Setup
654 --------------
655
656 The following picture shows the necessary external loopback connections for the Infineon XMC4500 Relax Kit evaluation board:
657  - <b>UART2</b>: \b P0.4 (UART2_RX)  and \b P0.5 (UART2_TX)  (Header X2)
658  - <b>SPI0</b>:  \b P5.0 (SPI0_MOSI) and \b P5.1 (SPI0_MISO) (Header X2)
659  - For <b>Ethernet</b> use a loopback plug as described in \ref eth_loopback "Loopback Communication Setup". 
660
661 \image html xmc4500.png  "Connections for Loopback Communication Tests on the Infineon XMC4500 Relax Kit"
662
663 */
664 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
665 /**
666 \page examples_mcbstm32f200 Keil MCBSTM32F200
667
668 Software Setup
669 --------------
670
671 Using the <a href="http://www2.keil.com/mdk5/packinstaller" target="_blank">Pack Installer</a> install the latest 
672 <b>Keil::STM32F2xx_DFP</b> pack and copy the example project
673 <b>CMSIS-Driver Validation (MCBSTM32F200)</b> to your machine.
674
675 -# Choose one of the available \ref example_targets "Targets" and build the project.
676 -# If you wish to test the loopback mode for some of the interfaces, refer to the next section for proper board
677    configuration.
678 -# Run the validation on the target hardware.
679
680 \note The example is preconfigured to use an 
681 <a href="http://www2.keil.com/mdk5/ulink/ulinkplus/" target="_blank">ULINKplus</a> debug adapter.
682
683
684 Hardware Setup
685 --------------
686
687 The following picture shows the necessary external loopback connections for the Keil MCBSTM32F200 evaluation board:
688  - <b>SPI2</b>: \b PB14 (SPI2_MISO) and \b PB15 (SPI2_MOSI) (for Loopback Test Mode)
689  - <b>USART1</b>: \b PB6 (USART1_TX) and \b PB7 (USART1_RX)
690  - For <b>Ethernet</b> use a loopback plug as described in \ref eth_loopback "Loopback Communication Setup". 
691
692 \image html mcbstm32f400.png  "Connections for Loopback Communication Tests on the Keil MCBSTM32F200"
693
694 */
695 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
696 /**
697 \page examples_mcbstm32f400 Keil MCBSTM32F400
698
699 Software Setup
700 --------------
701
702 Using the <a href="http://www2.keil.com/mdk5/packinstaller" target="_blank">Pack Installer</a> install the latest 
703 <b>Keil::STM32F4xx_DFP</b> pack and copy the example project
704 <b>CMSIS-Driver Validation (MCBSTM32F400)</b> to your machine.
705
706 -# Choose one of the available \ref example_targets "Targets" and build the project.
707 -# If you wish to test the loopback mode for some of the interfaces, refer to the next section for proper board
708    configuration.
709 -# Run the validation on the target hardware.
710
711 \note The example is preconfigured to use an 
712 <a href="http://www2.keil.com/mdk5/ulink/ulinkplus/" target="_blank">ULINKplus</a> debug adapter.
713
714
715 Hardware Setup
716 --------------
717
718 The following picture shows the necessary external loopback connections for the Keil MCBSTM32F400 evaluation board:
719  - <b>SPI2</b>: \b PB14 (SPI2_MISO) and \b PB15 (SPI2_MOSI) (for Loopback Test Mode)
720  - <b>USART1</b>: \b PB6 (USART1_TX) and \b PB7 (USART1_RX)
721  - For <b>Ethernet</b> use a loopback plug as described in \ref eth_loopback "Loopback Communication Setup". 
722
723 \image html mcbstm32f400.png  "Connections for Loopback Communication Tests on the Keil MCBSTM32F400"
724
725 */
726 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
727 /**
728 \page examples_b_l475e_iot01a1 STMicroelectronics B-L475E-IOT01A1
729
730 Software Setup
731 --------------
732
733 Using the <a href="http://www2.keil.com/mdk5/packinstaller" target="_blank">Pack Installer</a> install the latest 
734 <b>Keil::STM32L4xx_DFP</b> pack and copy the example project
735 <b>CMSIS-Driver WiFi Inventek ISM43362 Validation (B-L475E-IOT01A1)</b> to your machine.
736
737 -# Choose one of the available \ref example_targets "Targets" and build the project.
738 -# Run the validation on the target hardware using the on-board ST-Link/V2 debugger.
739
740 This example is prepared for verification of the WiFi driver and it requires \ref wifi_requirements "WiFi requirements", 
741 as well as, proper configuration described in \ref wifi_config "WiFi Configuration".
742
743 For details on WiFi driver validation please refer to \ref dv_wifi.
744
745 \image html b-l475e-iot01a.png  "STMicroelectronics B-L475E-IOT01A1 board"
746
747 */
748 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
749 /**
750 \page examples_ismart43362_e Inventek ISMART43362-E WiFi Shield with NXP LPCXpresso55S69
751
752 Software Setup
753 --------------
754
755 Using the <a href="http://www2.keil.com/mdk5/packinstaller" target="_blank">Pack Installer</a> install the latest 
756 <b>NXP::LPC55S69_DFP</b> and <b>NXP::LPCXpresso55S69_EVK</b> packs and copy the example project
757 <b>CMSIS-Driver WiFi Inventek ISM43362 Validation (LPCXpresso55S69)</b> to your machine.
758
759 -# Choose one of the available \ref example_targets "Targets" and build the project.
760 -# Run the validation on the target hardware.
761
762 \note The example is preconfigured to use an 
763 <a href="http://www2.keil.com/mdk5/ulink/ulinkplus/" target="_blank">ULINKplus</a> debug adapter.
764
765 This example is prepared for verification of the WiFi driver and it requires \ref wifi_requirements "WiFi requirements", 
766 as well as, proper configuration described in \ref wifi_config "WiFi Configuration".
767
768 For details on WiFi driver tests please refer to \ref dv_wifi.
769
770 Hardware Setup
771 --------------
772
773 This example uses the ISMART module with SPI communication.<br>
774 By default, the shield is loaded with a UART firmware.<br>
775 Instructions on how to flash the SPI firmware can be found in the
776 [CMSIS-Driver documentation](https://arm-software.github.io/CMSIS-Driver/General/html/driver_WiFi.html#driver_ISM43362).
777
778 For proper operation of the Inventek ISMART43362-E WiFi Shield please connect the jumper between 5V_BOARD and 5V_MOD pins 
779 on the WiFi Shield.
780
781 \note Before running the validation on this hardware the WiFi Shield has to be reset by pressing SW2 push-button 
782 on the WiFi Shield and the debug session has to be started in less than 5 seconds after the reset push-button was released.
783
784 \image html lpcxpresso55s69.png  "NXP LPCXpresso55S69 with Inventek ISMART43362-E WiFi Shield attached"
785
786 */
787 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
788 /**
789 \page examples_esp8266 Espressif ESP8266 SparkFun WiFi Shield with NXP MIMXRT1064-EVK
790
791 Software Setup
792 --------------
793
794 Using the <a href="http://www2.keil.com/mdk5/packinstaller" target="_blank">Pack Installer</a> install the latest 
795 <b>NXP::MIMXRT1064_DFP</b> and <b>NXP::EVK-MIMXRT1064_BSP</b> packs and copy the example project
796 <b>CMSIS-Driver WiFi Espressif ESP8266 Validation (EVK-MIMXRT1064)</b> to your machine.
797
798 -# Choose one of the available \ref example_targets "Targets" and build the project.
799 -# Run the validation on the target hardware using the on-board CMSIS-DAP Debugger.
800
801 This example is prepared for verification of the WiFi driver and it requires \ref wifi_requirements "WiFi equirements", 
802 as well as, proper configuration described in \ref wifi_config "WiFi Configuration".
803
804 For details on WiFi driver tests please refer to \ref dv_wifi.
805
806 \image html mimxrt1064evk.png    "NXP MIMXRT1064-EVK with"
807 \image html esp8266_sparkfun.png "Espressif ESP8266 SparkFun WiFi Shield"
808
809 */
810 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
811 /**
812 \page examples_esp32 Espressif ESP32 WROOM SparkFun Thing Plus WiFi Shield with NXP MIMXRT1064-EVK
813
814 Software Setup
815 --------------
816
817 Using the <a href="http://www2.keil.com/mdk5/packinstaller" target="_blank">Pack Installer</a> install the latest 
818 <b>NXP::MIMXRT1064_DFP</b> and <b>NXP::EVK-MIMXRT1064_BSP</b> packs and copy the example project
819 <b>CMSIS-Driver WiFi Espressif ESP32 Validation (EVK-MIMXRT1064)</b> to your machine.
820
821 -# Choose one of the available \ref example_targets "Targets" and build the project.
822 -# Run the validation on the target hardware using the on-board CMSIS-DAP Debugger.
823
824 This example is prepared for verification of the WiFi driver and it requires \ref wifi_requirements "WiFi equirements", 
825 as well as, proper configuration described in \ref wifi_config "WiFi Configuration".
826
827 For details on WiFi driver tests please refer to \ref dv_wifi.
828
829 \image html mimxrt1064evk.png        "NXP MIMXRT1064-EVK with"
830 \image html esp32_wroom_sparkfun.png "Espressif ESP32 WROOM SparkFun Thing Plus WiFi Shield"
831
832 */
833 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
834 /**
835 \page examples_wizfi360 WIZnet WizFi360-EVB WiFi Shield with NXP MIMXRT1064-EVK
836
837 Software Setup
838 --------------
839
840 Using the <a href="http://www2.keil.com/mdk5/packinstaller" target="_blank">Pack Installer</a> install the latest 
841 <b>NXP::MIMXRT1064_DFP</b> and <b>NXP::EVK-MIMXRT1064_BSP</b> packs and copy the example project
842 <b>CMSIS-Driver WiFi WIZnet WizFi360 Validation (EVK-MIMXRT1064)</b> to your machine.
843
844 -# Choose one of the available \ref example_targets "Targets" and build the project.
845 -# Run the validation on the target hardware using the on-board CMSIS-DAP Debugger.
846
847 This example is prepared for verification of the WiFi driver and it requires \ref wifi_requirements "WiFi equirements", 
848 as well as, proper configuration described in \ref wifi_config "WiFi Configuration".
849
850 For details on WiFi driver tests please refer to \ref dv_wifi.
851
852 \image html mimxrt1064evk.png "NXP MIMXRT1064-EVK with"
853 \image html wizfi360-evb.png  "WIZnet WizFi360-EVB WiFi Shield"
854
855 */
856 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
857 /**
858 \page examples_stm32f746g STMicroelectronics STM32F746G-Discovery
859
860 Software Setup
861 --------------
862
863 Using the <a href="http://www2.keil.com/mdk5/packinstaller" target="_blank">Pack Installer</a> install the latest 
864 <b>Keil::STM32F7xx_DFP</b> pack and copy the example project
865 <b>CMSIS-Driver Validation (STM32F746G-Discovery)</b> to your machine.
866
867 -# Choose one of the available \ref example_targets "Targets" and build the project.
868 -# If you wish to test the loopback mode for some of the interfaces, refer to the next section for proper board
869    configuration.
870 -# Run the validation on the target hardware using the on-board ST-Link/V2 debugger.
871
872
873 Hardware Setup
874 --------------
875
876 The following picture shows the necessary external loopback connections for the STMicroelectronics STM32F746G-Discovery evaluation board:
877  - <b>SPI2</b>: \b D12 (SPI2_MISO) and \b D11 (SPI2_MOSI)
878  - <b>USART6</b>: \b D1 (USART6_TX) and \b D0 (USART6_RX)
879  - For <b>Ethernet</b> use a loopback plug as described in \ref eth_loopback "Loopback Communication Setup". 
880
881 \image html stm32f746g-disco.png  "Connections for Loopback Communication Tests on STM32F746G-Discovery"
882
883 */