1 /*-----------------------------------------------------------------------------
3 * Purpose: I2C test cases
4 *----------------------------------------------------------------------------
5 * Copyright(c) KEIL - An ARM Company
6 *----------------------------------------------------------------------------*/
10 #include "DV_Framework.h"
11 #include "Driver_I2C.h"
16 // Register Driver_I2C#
17 extern ARM_DRIVER_I2C CREATE_SYMBOL(Driver_I2C, DRV_I2C);
18 static ARM_DRIVER_I2C *drv = &CREATE_SYMBOL(Driver_I2C, DRV_I2C);
19 static ARM_I2C_CAPABILITIES capab;
22 static uint8_t volatile Event;
25 static void I2C_DrvEvent (uint32_t event) {
29 /*-----------------------------------------------------------------------------
31 *----------------------------------------------------------------------------*/
33 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
35 \defgroup i2c_funcs I2C Validation
38 The I2C 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: I2C_GetCapabilities
46 The test case \b I2C_GetCapabilities verifies the function \b GetCapabilities.
48 void I2C_GetCapabilities (void) {
49 /* Get SPI 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: I2C_Initialization
58 The test case \b I2C_Initialization verifies the I2C functions with the sequence:
59 - \b Initialize without callback
61 - \b Initialize with callback
64 void I2C_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(I2C_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: I2C_CheckInvalidInit
83 The test case \b I2C_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 Control with bus speed fast
88 - \b PowerControl with Power off
91 void I2C_CheckInvalidInit (void) {
94 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
97 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
100 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) != ARM_DRIVER_OK);
102 /* Try to set configuration */
103 TEST_ASSERT(drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST) != ARM_DRIVER_OK);
106 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
109 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
112 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
114 \brief Test case: I2C_PowerControl
116 The test case \b I2C_PowerControl verifies the \b PowerControl function with the sequence:
123 void I2C_PowerControl (void) {
126 /* Initialize with callback */
127 TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK);
130 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
133 val = drv->PowerControl (ARM_POWER_LOW);
134 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Low power is not supported"); }
135 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
138 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
141 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
144 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
146 \brief Test case: I2C_SetBusSpeed
148 The test case \b I2C_SetBusSpeed verifies the \b Control function with the sequence:
151 - Set bus speed standard
153 - Set bus speed fast plus
158 void I2C_SetBusSpeed (void) {
161 /* Initialize with callback and power on */
162 TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK);
163 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
165 /* Set bus speed standard */
166 TEST_ASSERT(drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_STANDARD) == ARM_DRIVER_OK);
168 /* Set bus speed fast */
169 val = drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST);
170 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Fast speed is not supported"); }
171 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
173 /* Set bus speed fast plus */
174 val = drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST_PLUS);
175 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Fast plus speed is not supported"); }
176 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
178 /* Set bus speed high */
179 val = drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_HIGH);
180 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] High speed is not supported"); }
181 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
183 /* Power off and uninitialize*/
184 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
185 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
188 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
190 \brief Test case: I2C_SetOwnAddress
192 The test case \b I2C_SetOwnAddress verifies the \b Control function with the sequence:
195 - Set slave own address \token{0x0000}
196 - Set slave own address \token{0x0001}
197 - Set slave own address \token{0x00FF}
198 - Set slave own address \token{0x03FF}
202 void I2C_SetOwnAddress (void) {
204 /* Initialize with callback and power on */
205 TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK);
206 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
208 /* Set slave own address */
209 TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x0000) == ARM_DRIVER_OK);
211 /* Set slave own address */
212 TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x0001) == ARM_DRIVER_OK);
214 /* Set slave own address */
215 TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x00FF) == ARM_DRIVER_OK);
217 /* Set slave own address */
218 TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x03FF) == ARM_DRIVER_OK);
220 /* Power off and uninitialize*/
221 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
222 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
225 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
227 \brief Test case: I2C_BusClear
229 The test case \b I2C_BusClear verifies the \b Control function with the sequence:
236 void I2C_BusClear (void) {
238 /* Initialize with callback and power on */
239 TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK);
240 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
243 TEST_ASSERT(drv->Control(ARM_I2C_BUS_CLEAR, 0x0000) == ARM_DRIVER_OK);
245 /* Power off and uninitialize*/
246 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
247 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
250 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
252 \brief Test case: I2C_AbortTransfer
254 The test case \b I2C_AbortTransfer verifies the \b Control function with the sequence:
261 void I2C_AbortTransfer (void) {
263 /* Initialize with callback and power on */
264 TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK);
265 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
268 TEST_ASSERT(drv->Control(ARM_I2C_ABORT_TRANSFER, 0x0000) == ARM_DRIVER_OK);
270 /* Power off and uninitialize*/
271 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
272 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
278 // end of group i2c_funcs