1 /*-----------------------------------------------------------------------------
3 * Purpose: MCI test cases
4 *----------------------------------------------------------------------------
5 * Copyright(c) KEIL - An ARM Company
6 *----------------------------------------------------------------------------*/
10 #include "DV_Framework.h"
11 #include "Driver_MCI.h"
16 // Register Driver_USBD#
17 extern ARM_DRIVER_MCI CREATE_SYMBOL(Driver_MCI, DRV_MCI);
18 static ARM_DRIVER_MCI *drv = &CREATE_SYMBOL(Driver_MCI, DRV_MCI);
19 static ARM_MCI_CAPABILITIES capab;
22 static uint8_t volatile Event;
25 static void MCI_DrvEvent (uint32_t event) {
29 /*-----------------------------------------------------------------------------
31 *----------------------------------------------------------------------------*/
33 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
35 \defgroup mci_funcs MCI Validation
38 The MCI validation test checks the API interface compliance only.
42 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
44 \brief Test case: MCI_GetCapabilities
46 The test case \b MCI_GetCapabilities verifies the function \b GetCapabilities.
48 void MCI_GetCapabilities (void) {
49 /* Get USBD capabilities */
50 capab = drv->GetCapabilities();
51 TEST_ASSERT(&capab != NULL);
54 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
56 \brief Test case: MCI_Initialization
58 The test case \b MCI_Initialization verifies the MCI functions with the sequence:
59 - \b Initialize without callback
61 - \b Initialize with callback
64 void MCI_Initialization (void) {
66 /* Initialize without callback */
67 TEST_ASSERT(drv->Initialize(NULL) == ARM_DRIVER_OK);
70 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
72 /* Initialize with callback */
73 TEST_ASSERT(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
76 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
79 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
81 \brief Test case: MCI_CheckInvalidInit
83 The test case \b MCI_CheckInvalidInit verifies the driver behaviour when receiving an invalid initialization sequence:
85 - \b PowerControl with Power off
86 - \b PowerControl with Power on
87 - \b PowerControl with Power off
90 void MCI_CheckInvalidInit (void) {
93 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
96 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
99 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) != ARM_DRIVER_OK);
102 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
105 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
108 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
110 \brief Test case: MCI_PowerControl
112 The test case \b MCI_PowerControl verifies the \b PowerControl function with the sequence:
119 void MCI_PowerControl (void) {
122 /* Initialize with callback */
123 TEST_ASSERT(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
126 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
129 val = drv->PowerControl (ARM_POWER_LOW);
130 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Low power is not supported"); }
131 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
134 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
137 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
140 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
142 \brief Test case: MCI_SetBusSpeedMode
144 The test case \b MCI_SetBusSpeedMode verifies the \b Control function and sets the bus speed with the sequence:
157 void MCI_SetBusSpeedMode (void) {
160 /* Initialize with callback and power on*/
161 TEST_ASSERT(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
162 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
165 TEST_ASSERT(drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_DEFAULT_SPEED ) == ARM_DRIVER_OK);
168 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_DEFAULT_SPEED );
169 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] High speed is not supported"); }
170 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
173 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_UHS_SDR12 );
174 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] SDR12 is not supported"); }
175 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
178 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_UHS_SDR25 );
179 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] SDR25 is not supported"); }
180 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
183 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_UHS_SDR50 );
184 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] SDR50 is not supported"); }
185 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
188 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_UHS_SDR104 );
189 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] SDR104 is not supported"); }
190 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
193 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_UHS_DDR50 );
194 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] DDR50 is not supported"); }
195 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
197 /* Power off and uninitialize*/
198 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
199 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
202 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
204 \brief Test case: MCI_Config_DataWidth
206 The test case \b MCI_Config_DataWidth verifies the \b Control function and set the data width with the sequence:
209 - Default data width \token{1}
210 - Data width \token{4}
211 - Data width \token{8}
212 - Data width \token{4 DDR}
213 - Data width \token{8 DDR}
217 void MCI_Config_DataWidth (void) {
220 /* Initialize with callback and power on*/
221 TEST_ASSERT(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
222 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
224 /* Default data width 1 */
225 TEST_ASSERT(drv->Control (ARM_MCI_BUS_DATA_WIDTH, ARM_MCI_BUS_DATA_WIDTH_1 ) == ARM_DRIVER_OK);
228 val = drv->Control (ARM_MCI_BUS_DATA_WIDTH, ARM_MCI_BUS_DATA_WIDTH_4 );
229 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Data width 4 is not supported"); }
230 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
233 val = drv->Control (ARM_MCI_BUS_DATA_WIDTH, ARM_MCI_BUS_DATA_WIDTH_8 );
234 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Data width 8 is not supported"); }
235 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
237 /* Data width 4 DDR */
238 val = drv->Control (ARM_MCI_BUS_DATA_WIDTH, ARM_MCI_BUS_DATA_WIDTH_4_DDR );
239 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Data width 4 DDR is not supported"); }
240 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
242 /* Data width 8 DDR */
243 val = drv->Control (ARM_MCI_BUS_DATA_WIDTH, ARM_MCI_BUS_DATA_WIDTH_8_DDR );
244 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Data width 8 DDR is not supported"); }
245 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
247 /* Power off and uninitialize*/
248 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
249 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
252 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
254 \brief Test case: MCI_Config_CmdLineMode
256 The test case \b MCI_Config_CmdLineMode verifies the \b Control function with the sequence:
264 void MCI_Config_CmdLineMode (void) {
267 /* Initialize with callback and power on*/
268 TEST_ASSERT(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
269 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
271 /* Default push-pull */
272 TEST_ASSERT(drv->Control (ARM_MCI_BUS_CMD_MODE, ARM_MCI_BUS_CMD_PUSH_PULL ) == ARM_DRIVER_OK);
275 val = drv->Control (ARM_MCI_BUS_CMD_MODE, ARM_MCI_BUS_CMD_OPEN_DRAIN );
276 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Open Drain Cmd is not supported"); }
277 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
279 /* Power off and uninitialize*/
280 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
281 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
284 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
286 \brief Test case: MCI_Config_DriverStrength
288 The test case \b MCI_Config_DriverStrength verifies the \b Control function and sets the driver strength with the sequence:
298 void MCI_Config_DriverStrength (void) {
301 /* Initialize with callback and power on*/
302 TEST_ASSERT(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
303 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
306 val = drv->Control ( ARM_MCI_DRIVER_STRENGTH, ARM_MCI_DRIVER_TYPE_A );
307 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Type A is not supported"); }
308 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
311 val = drv->Control ( ARM_MCI_DRIVER_STRENGTH, ARM_MCI_DRIVER_TYPE_B );
312 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Type B is not supported"); }
313 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
316 val = drv->Control ( ARM_MCI_DRIVER_STRENGTH, ARM_MCI_DRIVER_TYPE_C );
317 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Type C is not supported"); }
318 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
321 val = drv->Control ( ARM_MCI_DRIVER_STRENGTH, ARM_MCI_DRIVER_TYPE_D );
322 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Type D is not supported"); }
323 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
325 /* Power off and uninitialize*/
326 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
327 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
333 // end of group mci_funcs