1 /*-----------------------------------------------------------------------------
3 * Purpose: I2C test cases
4 *----------------------------------------------------------------------------
5 * Copyright(c) KEIL - An ARM Company
6 *----------------------------------------------------------------------------*/
9 #include "DV_Framework.h"
10 #include "Driver_I2C.h"
15 // Register Driver_I2C#
16 extern ARM_DRIVER_I2C CREATE_SYMBOL(Driver_I2C, DRV_I2C);
17 static ARM_DRIVER_I2C *drv = &CREATE_SYMBOL(Driver_I2C, DRV_I2C);
18 static ARM_I2C_CAPABILITIES capab;
21 static uint8_t volatile Event;
24 static void I2C_DrvEvent (uint32_t event) {
28 /*-----------------------------------------------------------------------------
30 *----------------------------------------------------------------------------*/
32 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
34 \defgroup i2c_funcs I2C Validation
37 The I2C 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: I2C_GetCapabilities
45 The test case \b I2C_GetCapabilities verifies the function \b GetCapabilities.
47 void I2C_GetCapabilities (void) {
48 /* Get SPI capabilities */
49 capab = drv->GetCapabilities();
50 TEST_ASSERT(&capab != NULL);
53 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
55 \brief Test case: I2C_Initialization
57 The test case \b I2C_Initialization verifies the I2C functions with the sequence:
58 - \b Initialize without callback
60 - \b Initialize with callback
63 void I2C_Initialization (void) {
65 /* Initialize without callback */
66 TEST_ASSERT(drv->Initialize(NULL) == ARM_DRIVER_OK);
69 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
71 /* Initialize with callback */
72 TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK);
75 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
78 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
80 \brief Test case: I2C_CheckInvalidInit
82 The test case \b I2C_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 Control with bus speed fast
87 - \b PowerControl with Power off
90 void I2C_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);
101 /* Try to set configuration */
102 TEST_ASSERT(drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST) != ARM_DRIVER_OK);
105 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
108 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
111 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
113 \brief Test case: I2C_PowerControl
115 The test case \b I2C_PowerControl verifies the \b PowerControl function with the sequence:
122 void I2C_PowerControl (void) {
125 /* Initialize with callback */
126 TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK);
129 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
132 val = drv->PowerControl (ARM_POWER_LOW);
133 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Low power is not supported"); }
134 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
137 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
140 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
143 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
145 \brief Test case: I2C_SetBusSpeed
147 The test case \b I2C_SetBusSpeed verifies the \b Control function with the sequence:
150 - Set bus speed standard
152 - Set bus speed fast plus
157 void I2C_SetBusSpeed (void) {
160 /* Initialize with callback and power on */
161 TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK);
162 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
164 /* Set bus speed standard */
165 TEST_ASSERT(drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_STANDARD) == ARM_DRIVER_OK);
167 /* Set bus speed fast */
168 val = drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST);
169 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Fast speed is not supported"); }
170 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
172 /* Set bus speed fast plus */
173 val = drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST_PLUS);
174 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Fast plus speed is not supported"); }
175 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
177 /* Set bus speed high */
178 val = drv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_HIGH);
179 if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] High speed is not supported"); }
180 else { TEST_ASSERT(val == ARM_DRIVER_OK); }
182 /* Power off and uninitialize*/
183 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
184 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
187 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
189 \brief Test case: I2C_SetOwnAddress
191 The test case \b I2C_SetOwnAddress verifies the \b Control function with the sequence:
194 - Set slave own address \token{0x0000}
195 - Set slave own address \token{0x0001}
196 - Set slave own address \token{0x00FF}
197 - Set slave own address \token{0x03FF}
201 void I2C_SetOwnAddress (void) {
203 /* Initialize with callback and power on */
204 TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK);
205 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
207 /* Set slave own address */
208 TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x0000) == ARM_DRIVER_OK);
210 /* Set slave own address */
211 TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x0001) == ARM_DRIVER_OK);
213 /* Set slave own address */
214 TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x00FF) == ARM_DRIVER_OK);
216 /* Set slave own address */
217 TEST_ASSERT(drv->Control(ARM_I2C_OWN_ADDRESS, 0x03FF) == ARM_DRIVER_OK);
219 /* Power off and uninitialize*/
220 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
221 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
224 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
226 \brief Test case: I2C_BusClear
228 The test case \b I2C_BusClear verifies the \b Control function with the sequence:
235 void I2C_BusClear (void) {
237 /* Initialize with callback and power on */
238 TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK);
239 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
242 TEST_ASSERT(drv->Control(ARM_I2C_BUS_CLEAR, 0x0000) == ARM_DRIVER_OK);
244 /* Power off and uninitialize*/
245 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
246 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
249 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
251 \brief Test case: I2C_AbortTransfer
253 The test case \b I2C_AbortTransfer verifies the \b Control function with the sequence:
260 void I2C_AbortTransfer (void) {
262 /* Initialize with callback and power on */
263 TEST_ASSERT(drv->Initialize(I2C_DrvEvent) == ARM_DRIVER_OK);
264 TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);
267 TEST_ASSERT(drv->Control(ARM_I2C_ABORT_TRANSFER, 0x0000) == ARM_DRIVER_OK);
269 /* Power off and uninitialize*/
270 TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
271 TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK);
277 // end of group i2c_funcs