Skip to content

Commit 8188f5f

Browse files
authored
Merge pull request #14776 from affrinpinhero-2356/i2c_longTime_Mem_Solve
driver/i2c: STM32: I2C memory usage and time delay in read-write solved.
2 parents 16acae3 + 8f24f09 commit 8188f5f

File tree

24 files changed

+175
-20
lines changed

24 files changed

+175
-20
lines changed

targets/TARGET_STM/TARGET_STM32F0/i2c_device.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,13 @@ uint32_t i2c_get_pclk(I2CName i2c)
4141
pclk = HSI_VALUE;
4242
break;
4343
}
44-
} else {
44+
}
45+
#if defined I2C2_BASE
46+
else if (i2c == I2C_2) {
47+
pclk = HAL_RCC_GetSysClockFreq();
48+
}
49+
#endif
50+
else {
4551
// should not happend
4652
error("I2C: unknown instance");
4753
}
@@ -78,7 +84,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
7884
}
7985

8086
else {
87+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
88+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
89+
Enabling this may impact performance*/
90+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
91+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
8192
tim = i2c_compute_timing(pclk, hz);
93+
#endif
8294
}
8395
return tim;
8496
}

targets/TARGET_STM/TARGET_STM32F0/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,13 @@ extern "C" {
4848
#define I2CAPI_I2C1_CLKSRC RCC_I2C1CLKSOURCE_SYSCLK
4949

5050
uint32_t i2c_get_pclk(I2CName i2c);
51-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5251
uint32_t i2c_get_timing(I2CName i2c, int hz);
52+
53+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
54+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5355
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
5456
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
57+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5558

5659
#endif // DEVICE_I2C
5760

targets/TARGET_STM/TARGET_STM32F3/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
122122
}
123123

124124
else {
125+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
126+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
127+
Enabling this may impact performance*/
128+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
129+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
125130
tim = i2c_compute_timing(pclk, hz);
131+
#endif
126132
}
127133
return tim;
128134
}

targets/TARGET_STM/TARGET_STM32F3/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,13 @@ extern "C" {
6262
#define I2CAPI_I2C3_CLKSRC RCC_I2C3CLKSOURCE_SYSCLK
6363

6464
uint32_t i2c_get_pclk(I2CName i2c);
65-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6665
uint32_t i2c_get_timing(I2CName i2c, int hz);
66+
67+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
68+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6769
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
6870
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
71+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
6972

7073
#endif // DEVICE_I2C
7174

targets/TARGET_STM/TARGET_STM32F7/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
133133
break;
134134
}
135135
} else {
136+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
137+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
138+
Enabling this may impact performance*/
139+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
140+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
136141
tim = i2c_compute_timing(pclk, hz);
142+
#endif
137143
}
138144
return tim;
139145
}

targets/TARGET_STM/TARGET_STM32F7/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,13 @@ extern "C" {
5757
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_PCLK1
5858

5959
uint32_t i2c_get_pclk(I2CName i2c);
60-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6160
uint32_t i2c_get_timing(I2CName i2c, int hz);
61+
62+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
63+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6264
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
6365
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
66+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
6467

6568
#endif // DEVICE_I2C
6669

targets/TARGET_STM/TARGET_STM32G0/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
7878
break;
7979
}
8080
} else {
81+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
82+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
83+
Enabling this may impact performance*/
84+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
85+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
8186
tim = i2c_compute_timing(pclk, hz);
87+
#endif
8288
}
8389
return tim;
8490
}

targets/TARGET_STM/TARGET_STM32G0/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,13 @@ extern "C" {
4747
#define I2CAPI_I2C2_CLKSRC RCC_I2C2CLKSOURCE_SYSCLK
4848

4949
uint32_t i2c_get_pclk(I2CName i2c);
50-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5150
uint32_t i2c_get_timing(I2CName i2c, int hz);
51+
52+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
53+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5254
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
5355
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
56+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5457

5558
#endif // DEVICE_I2C
5659

targets/TARGET_STM/TARGET_STM32G4/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
133133
break;
134134
}
135135
} else {
136+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
137+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
138+
Enabling this may impact performance*/
139+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
140+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
136141
tim = i2c_compute_timing(pclk, hz);
142+
#endif
137143
}
138144
return tim;
139145
}

targets/TARGET_STM/TARGET_STM32G4/i2c_device.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ extern "C" {
2929
#define TIMING_VAL_DEFAULT_CLK_100KHZ 0xC0311319 // Standard mode with Rise Time = 400ns and Fall Time = 100ns
3030
#define TIMING_VAL_DEFAULT_CLK_400KHZ 0x10B1102E // Fast mode with Rise Time = 250ns and Fall Time = 100ns
3131
#define TIMING_VAL_DEFAULT_CLK_1MHZ 0x00710B1E // Fast mode Plus with Rise Time = 60ns and Fall Time = 100ns
32-
#define I2C_PCLK_DEF 170000000 // 170 MHz
32+
#define I2C_PCLK_DEF 160000000 // 160 MHz
3333

3434
/* Define IP version */
3535
#define I2C_IP_VERSION_V2
@@ -43,11 +43,13 @@ extern "C" {
4343
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_SYSCLK
4444

4545
uint32_t i2c_get_pclk(I2CName i2c);
46-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4746
uint32_t i2c_get_timing(I2CName i2c, int hz);
47+
48+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
49+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4850
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
4951
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
50-
52+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5153
#endif // DEVICE_I2C
5254

5355
#ifdef __cplusplus

targets/TARGET_STM/TARGET_STM32H7/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
116116
break;
117117
}
118118
} else {
119+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
120+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
121+
Enabling this may impact performance*/
122+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
123+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
119124
tim = i2c_compute_timing(pclk, hz);
125+
#endif
120126
}
121127
return tim;
122128
}

targets/TARGET_STM/TARGET_STM32H7/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,13 @@ extern "C" {
4343
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_D3PCLK1
4444

4545
uint32_t i2c_get_pclk(I2CName i2c);
46-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4746
uint32_t i2c_get_timing(I2CName i2c, int hz);
47+
48+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
49+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4850
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
4951
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
52+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5053

5154
#endif // DEVICE_I2C
5255

targets/TARGET_STM/TARGET_STM32L0/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
103103
break;
104104
}
105105
} else {
106+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
107+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
108+
Enabling this may impact performance*/
109+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
110+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
106111
tim = i2c_compute_timing(pclk, hz);
112+
#endif
107113
}
108114
return tim;
109115
}

targets/TARGET_STM/TARGET_STM32L0/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,13 @@ extern "C" {
5454
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_SYSCLK
5555

5656
uint32_t i2c_get_pclk(I2CName i2c);
57-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5857
uint32_t i2c_get_timing(I2CName i2c, int hz);
58+
59+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
60+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5961
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
6062
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
63+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
6164

6265
#endif // DEVICE_I2C
6366

targets/TARGET_STM/TARGET_STM32L4/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
168168
break;
169169
}
170170
} else {
171+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
172+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
173+
Enabling this may impact performance*/
174+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
175+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
171176
tim = i2c_compute_timing(pclk, hz);
177+
#endif
172178
}
173179
return tim;
174180
}

targets/TARGET_STM/TARGET_STM32L4/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,13 @@ extern "C" {
5757
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_SYSCLK
5858

5959
uint32_t i2c_get_pclk(I2CName i2c);
60-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6160
uint32_t i2c_get_timing(I2CName i2c, int hz);
61+
62+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
63+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6264
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
6365
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
66+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
6467

6568
#endif // DEVICE_I2C
6669

targets/TARGET_STM/TARGET_STM32L5/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
142142
}
143143

144144
else {
145+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
146+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
147+
Enabling this may impact performance */
148+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
149+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
145150
tim = i2c_compute_timing(pclk, hz);
151+
#endif
146152
}
147153
return tim;
148154
}

targets/TARGET_STM/TARGET_STM32L5/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,13 @@ extern "C" {
4343
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_SYSCLK
4444

4545
uint32_t i2c_get_pclk(I2CName i2c);
46-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4746
uint32_t i2c_get_timing(I2CName i2c, int hz);
47+
48+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
49+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4850
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
4951
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
52+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5053

5154
#endif // DEVICE_I2C
5255

targets/TARGET_STM/TARGET_STM32WB/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
140140
}
141141

142142
else {
143+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
144+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
145+
Enabling this may impact performance */
146+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
147+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
143148
tim = i2c_compute_timing(pclk, hz);
149+
#endif
144150
}
145151
return tim;
146152
}

targets/TARGET_STM/TARGET_STM32WB/i2c_device.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
extern "C" {
2525
#endif
2626

27-
/* Define I2C Device */
27+
/* Define I2C Device */
2828
#if DEVICE_I2C
2929

3030
/* Define IP version */
@@ -50,10 +50,13 @@ extern "C" {
5050
#define I2CAPI_I2C3_CLKSRC RCC_I2C3CLKSOURCE_SYSCLK
5151

5252
uint32_t i2c_get_pclk(I2CName i2c);
53-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5453
uint32_t i2c_get_timing(I2CName i2c, int hz);
54+
55+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
56+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5557
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
5658
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
59+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5760

5861
#endif // DEVICE_I2C
5962

targets/TARGET_STM/TARGET_STM32WL/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
125125
}
126126

127127
else {
128+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
129+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
130+
Enabling this may impact performance */
131+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
132+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
128133
tim = i2c_compute_timing(pclk, hz);
134+
#endif
129135
}
130136
return tim;
131137
}

targets/TARGET_STM/TARGET_STM32WL/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,13 @@ extern "C" {
4242
#define I2CAPI_I2C3_CLKSRC RCC_I2C3CLKSOURCE_SYSCLK
4343

4444
uint32_t i2c_get_pclk(I2CName i2c);
45-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4645
uint32_t i2c_get_timing(I2CName i2c, int hz);
46+
47+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
48+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4749
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
4850
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
51+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
4952

5053
#endif // DEVICE_I2C
5154

0 commit comments

Comments
 (0)