1 /*-----------------------------------------------------------------------------
3 * Purpose: MCI test cases
4 *----------------------------------------------------------------------------
5 * Copyright(c) KEIL - An ARM Company
6 *----------------------------------------------------------------------------*/
9 #include "DV_Framework.h"
10 #include "Driver_MCI.h"
15 // Register Driver_USBD#
16 extern ARM_DRIVER_MCI CREATE_SYMBOL(Driver_MCI, DRV_MCI);
17 static ARM_DRIVER_MCI *drv = &CREATE_SYMBOL(Driver_MCI, DRV_MCI);
18 static ARM_MCI_CAPABILITIES capab;
21 static uint8_t volatile Event;
24 static void MCI_DrvEvent (uint32_t event) {
28 /*-----------------------------------------------------------------------------
30 *----------------------------------------------------------------------------*/
32 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
34 \defgroup mci_funcs MCI Validation
37 The MCI validation test checks the API interface compliance only.
41 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
43 \brief Test case: MCI_GetCapabilities
45 The test case \b MCI_GetCapabilities verifies the function \b GetCapabilities.
47 void MCI_GetCapabilities (void) {
48 /* Get USBD capabilities */
49 capab = drv->GetCapabilities();
50 ASSERT_TRUE(&capab != NULL);
53 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
55 \brief Test case: MCI_Initialization
57 The test case \b MCI_Initialization verifies the MCI functions with the sequence:
58 - \b Initialize without callback
60 - \b Initialize with callback
63 void MCI_Initialization (void) {
65 /* Initialize without callback */
66 ASSERT_TRUE(drv->Initialize(NULL) == ARM_DRIVER_OK);
69 ASSERT_TRUE(drv->Uninitialize() == ARM_DRIVER_OK);
71 /* Initialize with callback */
72 ASSERT_TRUE(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
75 ASSERT_TRUE(drv->Uninitialize() == ARM_DRIVER_OK);
78 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
80 \brief Test case: MCI_CheckInvalidInit
82 The test case \b MCI_CheckInvalidInit verifies the driver behaviour when receiving an invalid initialization sequence:
84 - \b PowerControl with Power off
85 - \b PowerControl with Power on
86 - \b PowerControl with Power off
89 void MCI_CheckInvalidInit (void) {
92 ASSERT_TRUE(drv->Uninitialize() == ARM_DRIVER_OK);
95 ASSERT_TRUE(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
98 ASSERT_TRUE(drv->PowerControl (ARM_POWER_FULL) != ARM_DRIVER_OK);
101 ASSERT_TRUE(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
104 ASSERT_TRUE(drv->Uninitialize() == ARM_DRIVER_OK);
107 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
109 \brief Test case: MCI_PowerControl
111 The test case \b MCI_PowerControl verifies the \b PowerControl function with the sequence:
118 void MCI_PowerControl (void) {
121 /* Initialize with callback */
122 ASSERT_TRUE(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
125 ASSERT_TRUE(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
128 val = drv->PowerControl (ARM_POWER_LOW);
129 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "Low power is not supported"); }
130 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
133 ASSERT_TRUE(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
136 ASSERT_TRUE(drv->Uninitialize() == ARM_DRIVER_OK);
139 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
141 \brief Test case: MCI_SetBusSpeedMode
143 The test case \b MCI_SetBusSpeedMode verifies the \b Control function and sets the bus speed with the sequence:
156 void MCI_SetBusSpeedMode (void) {
159 /* Initialize with callback and power on*/
160 ASSERT_TRUE(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
161 ASSERT_TRUE(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
164 ASSERT_TRUE(drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_DEFAULT_SPEED ) == ARM_DRIVER_OK);
167 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_DEFAULT_SPEED );
168 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "High speed is not supported"); }
169 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
172 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_UHS_SDR12 );
173 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "SDR12 is not supported"); }
174 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
177 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_UHS_SDR25 );
178 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "SDR25 is not supported"); }
179 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
182 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_UHS_SDR50 );
183 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "SDR50 is not supported"); }
184 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
187 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_UHS_SDR104 );
188 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "SDR104 is not supported"); }
189 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
192 val = drv->Control (ARM_MCI_BUS_SPEED_MODE, ARM_MCI_BUS_UHS_DDR50 );
193 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "DDR50 is not supported"); }
194 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
196 /* Power off and uninitialize*/
197 ASSERT_TRUE(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
198 ASSERT_TRUE(drv->Uninitialize() == ARM_DRIVER_OK);
201 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
203 \brief Test case: MCI_Config_DataWidth
205 The test case \b MCI_Config_DataWidth verifies the \b Control function and set the data width with the sequence:
208 - Default data width \token{1}
209 - Data width \token{4}
210 - Data width \token{8}
211 - Data width \token{4 DDR}
212 - Data width \token{8 DDR}
216 void MCI_Config_DataWidth (void) {
219 /* Initialize with callback and power on*/
220 ASSERT_TRUE(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
221 ASSERT_TRUE(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
223 /* Default data width 1 */
224 ASSERT_TRUE(drv->Control (ARM_MCI_BUS_DATA_WIDTH, ARM_MCI_BUS_DATA_WIDTH_1 ) == ARM_DRIVER_OK);
227 val = drv->Control (ARM_MCI_BUS_DATA_WIDTH, ARM_MCI_BUS_DATA_WIDTH_4 );
228 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "Data width 4 is not supported"); }
229 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
232 val = drv->Control (ARM_MCI_BUS_DATA_WIDTH, ARM_MCI_BUS_DATA_WIDTH_8 );
233 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "Data width 8 is not supported"); }
234 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
236 /* Data width 4 DDR */
237 val = drv->Control (ARM_MCI_BUS_DATA_WIDTH, ARM_MCI_BUS_DATA_WIDTH_4_DDR );
238 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "Data width 4 DDR is not supported"); }
239 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
241 /* Data width 8 DDR */
242 val = drv->Control (ARM_MCI_BUS_DATA_WIDTH, ARM_MCI_BUS_DATA_WIDTH_8_DDR );
243 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "Data width 8 DDR is not supported"); }
244 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
246 /* Power off and uninitialize*/
247 ASSERT_TRUE(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
248 ASSERT_TRUE(drv->Uninitialize() == ARM_DRIVER_OK);
251 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
253 \brief Test case: MCI_Config_CmdLineMode
255 The test case \b MCI_Config_CmdLineMode verifies the \b Control function with the sequence:
263 void MCI_Config_CmdLineMode (void) {
266 /* Initialize with callback and power on*/
267 ASSERT_TRUE(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
268 ASSERT_TRUE(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
270 /* Default push-pull */
271 ASSERT_TRUE(drv->Control (ARM_MCI_BUS_CMD_MODE, ARM_MCI_BUS_CMD_PUSH_PULL ) == ARM_DRIVER_OK);
274 val = drv->Control (ARM_MCI_BUS_CMD_MODE, ARM_MCI_BUS_CMD_OPEN_DRAIN );
275 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "Open Drain Cmd is not supported"); }
276 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
278 /* Power off and uninitialize*/
279 ASSERT_TRUE(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
280 ASSERT_TRUE(drv->Uninitialize() == ARM_DRIVER_OK);
283 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
285 \brief Test case: MCI_Config_DriverStrength
287 The test case \b MCI_Config_DriverStrength verifies the \b Control function and sets the driver strength with the sequence:
297 void MCI_Config_DriverStrength (void) {
300 /* Initialize with callback and power on*/
301 ASSERT_TRUE(drv->Initialize(MCI_DrvEvent) == ARM_DRIVER_OK);
302 ASSERT_TRUE(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
305 val = drv->Control ( ARM_MCI_DRIVER_STRENGTH, ARM_MCI_DRIVER_TYPE_A );
306 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "Type A is not supported"); }
307 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
310 val = drv->Control ( ARM_MCI_DRIVER_STRENGTH, ARM_MCI_DRIVER_TYPE_B );
311 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "Type B is not supported"); }
312 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
315 val = drv->Control ( ARM_MCI_DRIVER_STRENGTH, ARM_MCI_DRIVER_TYPE_C );
316 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "Type C is not supported"); }
317 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
320 val = drv->Control ( ARM_MCI_DRIVER_STRENGTH, ARM_MCI_DRIVER_TYPE_D );
321 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { SET_RESULT(WARNING, "Type D is not supported"); }
322 else { ASSERT_TRUE(val == ARM_DRIVER_OK); }
324 /* Power off and uninitialize*/
325 ASSERT_TRUE(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
326 ASSERT_TRUE(drv->Uninitialize() == ARM_DRIVER_OK);
332 // end of group mci_funcs