I2C for STM32F3
I’m working on a project that needs I2C functionality on a STM32F0 Chip. Since STM32F0 support is not yet merged into zephyr (I’m observing https://github.com/zephyrproject-rtos/zephyr/pull/4260), I started working with a stm32f3_disco board, which I had available and which uses the same I2C driver (stm32-i2c-v2), with only minor differences (F0 has a combined Event/Error Interrupt, F3 splits both up). I also took a look at the disco_l475_iot1 board for inspiration, because I2C support in Zephyr for this board is implemented and it uses the stm32-i2c-v2 driver as well, but I don’t have one of those boards to test with.
Just a little note before I explain the issues I’m running into on the stm32f3_disco: I basically did the same steps on stm32f4_disco board (which uses the stm32-i2c-v1 I2C driver) and got the I2C bus working there.
I’m confident, that the basic procedure for adding I2C support to a STM32Fx based board is OK, since I got it working on the stm32f4_disco board this way.
Back to stm32f3_disco. See attachment for the changes I did to the repo based on zephyr-v1.9.0 release.
I’ve got it compiling with samples/drivers/i2c_fujitsu_fram example with a minor change and an I2C dummy device that acts like the fujitsu-fram (test-setup worked well with stm32f4_disco).
diff --git a/samples/drivers/i2c_fujitsu_fram/src/main.c b/samples/drivers/i2c_fujitsu_fram/src/main.c
@@ -13,5 +13,1 @@
-#define I2C_DEV CONFIG_I2C_SS_0_NAME
-#define I2C_DEV CONFIG_I2C_0_NAME
+#define I2C_DEV "I2C_1"
After flashing it onto the stm32f3_disco board the I2C Pins (PB8, PB9) are high with pull-up (like intended), but nothing is happening on the bus. When I single step through the code with the debugger I loose connection in
Last step I can do is out of the LL_I2C_SetSlaveAddr(..) function. The debugger fails with the following message:
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f3x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms
To reconnect to the board afterwards I need to disconnect it first, reset doesn’t help.
So if you know of any changes I missed or did wrong, or are familiar with this type of gdb-errors, please help me out here.
21337 Lüneburg | Germany
Fon: +49 4131 8901-7906
Fax: +49 4131 83200