diff --git a/hal/targets.json b/hal/targets.json index 639e97d4d9..8c162de2c8 100644 --- a/hal/targets.json +++ b/hal/targets.json @@ -783,7 +783,7 @@ "progen": {"target": "nucleo-f401re"}, "detect_code": ["0720"], "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], - "device_has": ["ANALOGIN", "ERROR_RED", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ERROR_RED", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "NUCLEO_F410RB": { @@ -796,7 +796,7 @@ "progen": {"target": "nucleo-f410rb"}, "macros": ["MBEDTLS_ENTROPY_HARDWARE_ALT", "TRANSACTION_QUEUE_SIZE_SPI=2"], "detect_code": ["0740"], - "device_has": ["ANALOGIN", "ANALOGOUT", "ERROR_RED", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "ERROR_RED", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "NUCLEO_F411RE": { @@ -834,7 +834,7 @@ "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "progen": {"target": "nucleo-f429zi"}, "macros": ["MBEDTLS_ENTROPY_HARDWARE_ALT", "DEVICE_RTC_LSI=1", "TRANSACTION_QUEUE_SIZE_SPI=2"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "RTC_LSI", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "detect_code": ["0796"], "features": ["IPV4"], "release_versions": ["2", "5"] @@ -849,7 +849,7 @@ "progen": {"target": "nucleo-f446re"}, "detect_code": ["0777"], "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "NUCLEO_F446ZE": { @@ -862,7 +862,8 @@ "progen": {"target": "nucleo-f446ze"}, "detect_code": ["0778"], "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"] + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], + "release_versions": ["2", "5"] }, "B96B_F446VE": { @@ -1077,7 +1078,7 @@ "macros": ["MBEDTLS_ENTROPY_HARDWARE_ALT","DEVICE_RTC_LSI=1","TRANSACTION_QUEUE_SIZE_SPI=2"], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "progen": {"target": "disco-f429zi"}, - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "DISCO_F469NI": { @@ -1090,7 +1091,7 @@ "macros": ["MBEDTLS_ENTROPY_HARDWARE_ALT","TRANSACTION_QUEUE_SIZE_SPI=2"], "progen": {"target": "disco-f469ni"}, "detect_code": ["0788"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "DISCO_L053C8": { diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_ARCH_MAX/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_ARCH_MAX/objects.h index c02fc3174f..3506c01c2e 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_ARCH_MAX/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_ARCH_MAX/objects.h @@ -65,10 +65,7 @@ struct dac_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; + #include "common_objects.h" #include "gpio_object.h" diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_B96B_F446VE/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_B96B_F446VE/objects.h index 4480dedf25..d8f1490833 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_B96B_F446VE/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_B96B_F446VE/objects.h @@ -65,10 +65,6 @@ struct dac_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; struct can_s { CANName can; diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F401VC/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F401VC/objects.h index 7500a61db5..b800780a26 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F401VC/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F401VC/objects.h @@ -60,11 +60,6 @@ struct analogin_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - #include "common_objects.h" #include "gpio_object.h" diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F407VG/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F407VG/objects.h index c02fc3174f..4607d08220 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F407VG/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F407VG/objects.h @@ -65,11 +65,6 @@ struct dac_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - #include "common_objects.h" #include "gpio_object.h" diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F429ZI/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F429ZI/objects.h index a677034216..0abbed5d6e 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F429ZI/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F429ZI/objects.h @@ -65,11 +65,6 @@ struct dac_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - struct can_s { CANName can; int index; diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F469NI/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F469NI/objects.h index 3b0932fb17..1183f54a6c 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F469NI/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F469NI/objects.h @@ -65,11 +65,6 @@ struct dac_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - struct can_s { CANName can; int index; diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_ELMO_F411RE/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_ELMO_F411RE/objects.h index 7500a61db5..b800780a26 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_ELMO_F411RE/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_ELMO_F411RE/objects.h @@ -60,11 +60,6 @@ struct analogin_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - #include "common_objects.h" #include "gpio_object.h" diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/objects.h index 7500a61db5..b800780a26 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/objects.h @@ -60,11 +60,6 @@ struct analogin_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - #include "common_objects.h" #include "gpio_object.h" diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/objects.h index da53d4c55d..ee8dbbf03f 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/objects.h @@ -65,11 +65,6 @@ struct dac_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - #include "common_objects.h" #include "gpio_object.h" diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/objects.h index 7500a61db5..b800780a26 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/objects.h @@ -60,11 +60,6 @@ struct analogin_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - #include "common_objects.h" #include "gpio_object.h" diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F401RE/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F401RE/objects.h index 7500a61db5..b800780a26 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F401RE/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F401RE/objects.h @@ -60,11 +60,6 @@ struct analogin_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - #include "common_objects.h" #include "gpio_object.h" diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F410RB/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F410RB/objects.h index da53d4c55d..ee8dbbf03f 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F410RB/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F410RB/objects.h @@ -65,11 +65,6 @@ struct dac_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - #include "common_objects.h" #include "gpio_object.h" diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/objects.h index a45edbcc1a..e1f877770e 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/objects.h @@ -65,11 +65,6 @@ struct dac_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - struct can_s { CANName can; int index; diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F446RE/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F446RE/objects.h index 3b0932fb17..1183f54a6c 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F446RE/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F446RE/objects.h @@ -65,11 +65,6 @@ struct dac_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - struct can_s { CANName can; int index; diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F446ZE/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F446ZE/objects.h index 3b0932fb17..1183f54a6c 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F446ZE/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F446ZE/objects.h @@ -65,11 +65,6 @@ struct dac_s { uint8_t channel; }; -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - struct can_s { CANName can; int index; diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_C029/objects.h b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_C029/objects.h index 1e054c9ff5..12cac5d31f 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_C029/objects.h +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_C029/objects.h @@ -62,11 +62,6 @@ struct analogin_s { -struct i2c_s { - I2CName i2c; - uint32_t slave; -}; - #include "common_objects.h" struct can_s { CANName can; diff --git a/libraries/tests/mbed/i2c_master_asynch/main.cpp b/libraries/tests/mbed/i2c_master_asynch/main.cpp new file mode 100644 index 0000000000..62a339187e --- /dev/null +++ b/libraries/tests/mbed/i2c_master_asynch/main.cpp @@ -0,0 +1,145 @@ +#include "mbed.h" +#include "test_env.h" + +#if !DEVICE_I2C || !DEVICE_I2C_ASYNCH + #error [NOT_SUPPORTED] I2C ASYNCH is not supported +#endif + +#define SIZE (10) +#define ADDR (0x90) +#define FREQ 100000 + +#if defined(TARGET_KL25Z) +I2C i2c(PTE0, PTE1); +#elif defined(TARGET_nRF51822) +I2C i2c(p22,p20); +#elif defined(TARGET_NUCLEO_F411RE) || defined (TARGET_DISCO_F469NI) +#define TEST_SDA_PIN PB_9 +#define TEST_SCL_PIN PB_8 +I2C i2c(TEST_SDA_PIN, TEST_SCL_PIN); // I2C_1 (Arduino: D14/D15) +#elif defined(TARGET_FF_ARDUINO) || defined(TARGET_MAXWSNENV) +I2C i2c(I2C_SDA, I2C_SCL); +#define TEST_SDA_PIN PB_9 +#define TEST_SCL_PIN PB_8 +#elif defined(TARGET_EFM32LG_STK3600) || defined(TARGET_EFM32GG_STK3700) || defined(TARGET_EFM32WG_STK3800) +#define TEST_SDA_PIN PD6 +#define TEST_SCL_PIN PD7 +I2C i2c(TEST_SDA_PIN, TEST_SCL_PIN); +#elif defined(TARGET_EFM32ZG_STK3200) +#define TEST_SDA_PIN PE12 +#define TEST_SCL_PIN PE13 +I2C i2c(TEST_SDA_PIN, TEST_SCL_PIN); +#elif defined(TARGET_EFM32HG_STK3400) +#define TEST_SDA_PIN PD6 +#define TEST_SCL_PIN PD7 +I2C i2c(TEST_SDA_PIN, TEST_SCL_PIN); +#elif defined(TARGET_EFM32PG_STK3401) +#define TEST_SDA_PIN PC10 +#define TEST_SCL_PIN PC11 +I2C i2c(TEST_SDA_PIN, TEST_SCL_PIN); +#elif defined(TARGET_SAMR21G18A) +#define TEST_SDA_PIN PA16 +#define TEST_SCL_PIN PA17 +I2C i2c(TEST_SDA_PIN, TEST_SCL_PIN); +#elif defined(TARGET_SAMD21J18A) || defined(TARGET_SAMD21G18A) || defined(TARGET_SAML21J18A) +#define TEST_SDA_PIN PA08 +#define TEST_SCL_PIN PA09 +I2C i2c(TEST_SDA_PIN, TEST_SCL_PIN); +#elif defined(TARGET_SAMG55J19) +#define TEST_SDA_PIN PA10 +#define TEST_SCL_PIN PA09 +I2C i2c(TEST_SDA_PIN, TEST_SCL_PIN); +#else +//I2C i2c(p28, p27); +#endif + +volatile int why; +volatile bool complete = false; +void cbdone(int event) { + complete = true; + why = event; +} + + +int main() { + + event_callback_t callback; + char buf[] = {3, 2, 1, 4, 5, 6, 7, 8, 9, 10}; + char res[SIZE]; + char buf_master_tx[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; + char buf_master_rx[SIZE]; + int rc; + + printf("\n\nTest init\n"); + + callback.attach(cbdone); + + i2c.frequency(FREQ); + + // First transfer: Tx/Rx + printf("\nFirst transfer: Master Tx\n"); + rc = i2c.transfer(ADDR, buf, SIZE, 0, 0, callback, I2C_EVENT_ALL, true); + if (rc != 0) { + notify_completion(false); + } + while (!complete) { + sleep(); + } + if (why != I2C_EVENT_TRANSFER_COMPLETE) { + notify_completion(false); + } + printf("Why: %d\n", (int)why); + why = 0; + complete = false; + + // Second transfer: Rx + printf("\nSecond transfer: Master Rx\n"); + rc = i2c.transfer(ADDR, 0, 0, res, SIZE, callback, I2C_EVENT_ALL, false); + if (rc != 0) { + notify_completion(false); + } + while (!complete) { + sleep(); + } + if (why != I2C_EVENT_TRANSFER_COMPLETE) { + notify_completion(false); + } + printf("Why: %d\n", (int)why); + + // Check buffers + for(int i = 0; i < SIZE; i++) { + if (res[i] != (buf[i] + 1)) { + printf("Buffer check KO\n"); + notify_completion(false); + break; + } + } + + // Third transfer: Tx/Rx + printf("\nThird transfer: Master Tx/Rx\n"); + rc = i2c.transfer(ADDR, buf_master_tx, SIZE, buf_master_rx, SIZE, callback, I2C_EVENT_ALL, false); + if (rc != 0) { + notify_completion(false); + } + while (!complete) { + sleep(); + } + if (why != I2C_EVENT_TRANSFER_COMPLETE) { + printf("Transfer result: 0x%x\n", why); + notify_completion(false); + } + complete = false; + why = 0; + printf("Transfer result: OK\n"); + + for(int i = 0; i < SIZE; i++) { + if (buf_master_rx[i] != (buf_master_tx[i] + 1)) { + printf("Buffer check KO\n"); + printf("buf_master_rx[%d]: %d, buf_master_tx[%d]: %d\n",i,buf_master_rx[i],i,buf_master_tx[i]); + notify_completion(false); + break; + } + } + printf("Buffer check OK\n"); + notify_completion(true); +} diff --git a/libraries/tests/mbed/i2c_master_slave/main.cpp b/libraries/tests/mbed/i2c_master_slave/main.cpp index 10b1e82117..b96da0e609 100644 --- a/libraries/tests/mbed/i2c_master_slave/main.cpp +++ b/libraries/tests/mbed/i2c_master_slave/main.cpp @@ -8,17 +8,23 @@ // ******************************************************** // This tests data transfer between two I2C interfaces on // the same chip, one configured as master, the other as -// slave. Works on the LPC1768 mbed. +// slave. Works on: // -// Wiring: +// *LPC1768 mbed // p28 <-> p9 // p27 <-> p10 // pull-up resistors on both lines +// *STM32F4 boards +// cf below for wiring +// // ******************************************************** -#if defined(TARGET_NUCLEO_F411RE) +#if defined(TARGET_NUCLEO_F411RE) || defined (TARGET_NUCLEO_F446RE) || defined (TARGET_NUCLEO_F410RB) || defined (TARGET_NUCLEO_F401RE) I2C master(PB_9, PB_8); // I2C_1 (Arduino: D14/D15) I2CSlave slave(PB_3, PB_10); // I2C_2 (Arduino: D3/D6) +#elif defined (TARGET_NUCLEO_F429ZI) || defined (TARGET_DISCO_F429ZI) || defined (TARGET_NUCLEO_F446ZE) +I2C master(PB_9, PB_8); // I2C_1 (Arduino: D14/D15) +I2CSlave slave(PB_11, PB_10); // I2C_2 #endif int main() diff --git a/libraries/tests/mbed/i2c_master_slave_asynch/main.cpp b/libraries/tests/mbed/i2c_master_slave_asynch/main.cpp index 00e1d26acb..a8707064d1 100644 --- a/libraries/tests/mbed/i2c_master_slave_asynch/main.cpp +++ b/libraries/tests/mbed/i2c_master_slave_asynch/main.cpp @@ -11,14 +11,15 @@ // the same chip, one configured as master, the other as // slave. // -// Wiring: -// D14 <-> D3 -// D15 <-> D6 +// Wiring: cf below // ******************************************************** -#if defined(TARGET_NUCLEO_F411RE) +#if defined (TARGET_NUCLEO_F411RE) || defined (TARGET_NUCLEO_F446RE) || defined (TARGET_NUCLEO_F410RB) || defined (TARGET_NUCLEO_F401RE) I2C master(PB_9, PB_8); // I2C_1 (Arduino: D14/D15) I2CSlave slave(PB_3, PB_10); // I2C_2 (Arduino: D3/D6) +#elif defined (TARGET_NUCLEO_F429ZI) || defined (TARGET_DISCO_F429ZI) || defined (TARGET_NUCLEO_F446ZE) +I2C master(PB_9, PB_8); // I2C_1 (Arduino: D14/D15) +I2CSlave slave(PB_11, PB_10); // I2C_2 #endif volatile int why; diff --git a/libraries/tests/mbed/i2c_slave/main.cpp b/libraries/tests/mbed/i2c_slave/main.cpp index cd8f390ab1..953a1482af 100644 --- a/libraries/tests/mbed/i2c_slave/main.cpp +++ b/libraries/tests/mbed/i2c_slave/main.cpp @@ -16,9 +16,11 @@ I2CSlave slave(p9, p10); I2CSlave slave(PA16, PA17); #elif defined(TARGET_SAMD21J18A) || defined(TARGET_SAMD21G18A) || defined(TARGET_SAML21J18A) I2CSlave slave(PA08, PA09); -#elif defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F429ZI) || defined(TARGET_NUCLEO_F446RE) +#elif defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F446RE) //I2C master(PB_9, PB_8); // I2C_1 (Arduino: D14/D15) I2CSlave slave(PB_3, PB_10); // I2C_2 (Arduino: D3/D6) +#elif defined(TARGET_NUCLEO_F429ZI) +I2CSlave slave(PB_11, PB_10); // I2C_2 #elif defined(TARGET_FF_ARDUINO) I2CSlave slave(I2C_SDA, I2C_SCL); #elif defined(TARGET_SAMG55J19) diff --git a/tools/tests.py b/tools/tests.py index b93661c3eb..67874f041d 100644 --- a/tools/tests.py +++ b/tools/tests.py @@ -87,7 +87,13 @@ Wiring: * i2c_loop: * LPC1768: (p28 <-> p9), (p27 <-> p10) + * NUCLEO_F401RE: (PB_9 <-> PB_3), (PB_8 <-> PB_10) + * NUCLEO_F410RB: (PB_9 <-> PB_3), (PB_8 <-> PB_10) * NUCLEO_F411RE: (PB_9 <-> PB_3), (PB_8 <-> PB_10) + * NUCLEO_F446RE: (PB_9 <-> PB_3), (PB_8 <-> PB_10) + * NUCLEO_F429ZI: (PB_9 <-> PB_11), (PB_8 <-> PB_10) + * NUCLEO_F446ZE: (PB_9 <-> PB_11), (PB_8 <-> PB_10) + * DISCO_F429ZI: (PB_9 <-> PB_11), (PB_8 <-> PB_10) * i2c_eeprom: * LPC1*: (SDA=p28 , SCL=p27) @@ -265,7 +271,7 @@ TESTS = [ "id": "MBED_A20", "description": "I2C master/slave test", "source_dir": join(TEST_DIR, "mbed", "i2c_master_slave"), "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB,], - "mcu": ["LPC1768", "RZ_A1H", "NUCLEO_F411RE"], + "mcu": ["LPC1768", "RZ_A1H", "NUCLEO_F411RE", "NUCLEO_F446RE", "NUCLEO_F429ZI", "DISCO_F429ZI", "NUCLEO_F446ZE", "NUCLEO_F410RB", "NUCLEO_F401RE"], "peripherals": ["i2c_loop"] }, { @@ -341,6 +347,14 @@ TESTS = [ "DISCO_F469NI", "DISCO_F429ZI", "NUCLEO_F103RB", "NUCLEO_F746ZG", "DISCO_F746NG", "DISCO_L476VG", "NUCLEO_L476RG", "NUCLEO_L432KC", "DISCO_F769NI"] + }, + { + "id": "MBED_A29", "description": "i2c_master_slave_asynch", + "source_dir": join(TEST_DIR, "mbed", "i2c_master_slave_asynch"), + "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB], + "mcu": ["NUCLEO_F411RE", "NUCLEO_F446RE", "NUCLEO_F429ZI", "DISCO_F429ZI", "NUCLEO_F446ZE", "NUCLEO_F410RB", "NUCLEO_F401RE"], + "automated": True, + "peripherals": ["i2c_loop"] }, { "id": "MBED_BLINKY", "description": "Blinky", @@ -1166,11 +1180,6 @@ TESTS = [ "automated": True, #"host_test" : "detect_auto", }, - { - "id": "I2C_MASTER_SLAVE_ASYNCH", "description": "i2c_master_slave_asynch", - "source_dir": join(TEST_DIR, "mbed", "i2c_master_slave_asynch"), - "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB], - }, ]