2024-07-30 03:19 AM - edited 2024-08-02 06:53 AM
Hi, @Erwan SZYMANSKI @KDJEM.1 @Andrew Neil @KDJEM.1 @SofLit
I am trying to establish SPI communication between my Nucleo-G431RB and STM32MP157F-DK2 boards. I am finding the documentation quite confusing. I attempted to use STM32CubeIDE, but it resulted in various issues, possibly due to using Ubuntu.
Could you help me set this up without using STM32CubeIDE or the HAL library? I have a distribution package for the STM32MP157F-DK2 and have patched the DTS file to enable SPI according to the STM32 wiki. Now, I need to add a custom application to my own created layer in the distribution package and write the driver. However, I am having trouble finding resources to accomplish this.
2024-07-30 03:27 AM
Here are my patches. I built the image and flashed it to the mp1 board.
diff --git a/stm32mp15-pinctrl.dtsi.orig b/stm32mp15-pinctrl.dtsi
index 20b4f0d..bff8e08 100644
--- a/arch/arm/boot/dts/stm32mp15-pinctrl.dtsi
+++ b/arch/arm/boot/dts/stm32mp15-pinctrl.dtsi
@@ -2028,14 +2028,15 @@
spi5_pins_a: spi5-0 {
pins1 {
pinmux = <STM32_PINMUX('F', 7, AF5)>, /* SPI5_SCK */
- <STM32_PINMUX('F', 9, AF5)>; /* SPI5_MOSI */
+ <STM32_PINMUX('F', 9, AF5)>; /* SPI5_MOSI */
bias-disable;
drive-push-pull;
slew-rate = <1>;
};
pins2 {
- pinmux = <STM32_PINMUX('F', 8, AF5)>; /* SPI5_MISO */
+ pinmux = <STM32_PINMUX('F', 8, AF5)>, /* SPI5_MISO */
+ <STM32_PINMUX('F', 6, AF5)>; /* SPI5_NSS */
bias-disable;
};
};
@@ -2043,11 +2044,13 @@
spi5_sleep_pins_a: spi5-sleep-0 {
pins {
pinmux = <STM32_PINMUX('F', 7, ANALOG)>, /* SPI5_SCK */
- <STM32_PINMUX('F', 8, ANALOG)>, /* SPI5_MISO */
- <STM32_PINMUX('F', 9, ANALOG)>; /* SPI5_MOSI */
+ <STM32_PINMUX('F', 8, ANALOG)>, /* SPI5_MISO */
+ <STM32_PINMUX('F', 9, ANALOG)>, /* SPI5_MOSI */
+ <STM32_PINMUX('F', 6, ANALOG)>; /* SPI5_NSS */
};
};
+
stusb1600_pins_a: stusb1600-0 {
pins {
pinmux = <STM32_PINMUX('I', 11, GPIO)>;
diff --git a/stm32mp157f-dk2.dts.orig b/stm32mp157f-dk2.dts.spi
index 2462656..6ba6038 100644
--- a/arch/arm/boot/dts/stm32mp157f-dk2.dts
+++ b/arch/arm/boot/dts/stm32mp157f-dk2.dts
@@ -167,3 +167,19 @@
vddio-supply = <&v3v3>;
};
};
+
+&spi5 {
+ pinctrl-names = "default", "sleep";
+ pinctrl-0 = <&spi5_pins_a>;
+ pinctrl-1 = <&spi5_sleep_pins_a>;
+ status = "okay";
+
+ #address-cells = <0>;
+ cs-gpios = <0>;
+ spi-slave;
+
+ slave {
+ compatible = "lwn,bk4";
+ spi-max-frequency = <10000000>;
+ };
+ };
2024-07-31 03:22 AM
2024-08-05 11:55 PM
Hello @nesnes ,
From my side, I am not expert on MCU part so I will not be able to help on Nucleo side.
However, for Linux side, does the STM32MP15 is the SPI master or SPI slave ? The DTS, more particularly the NSS pin, is not declared the same way depending on its role. Look at the paragraph mentioned here : https://wiki.stmicroelectronics.cn/stm32mpu/wiki/SPI_device_tree_configuration#Example_of_SPI_master-2Fslave_communication_on_STM32MP157F-DK2_board
Concerning the way to add your own application into Yocto and your own driver, this paragraph in the wiki points on both aspects : https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32MPU_Distribution_Package#Integrating_developments_made_with_the_Developer_Package
Kind regards,
Erwan.
2024-08-06 01:25 AM
Help on STM32MP15 part would be great. I did the configurations as slave according to the wiki page. But I got stuck at the wring the driver code part because all the recourses I found uses the Cubeıde but I want to do my task with adding application to my image for the spi.
2024-08-08 12:44 AM
@nesnes ,
I think I did not catch exactly the point, do you have trouble to make your SPI application on Linux side, or to integrate it in your Yocto final image ?
Kind regards,
Erwan.
2024-08-08 03:55 AM
@Erwan SZYMANSKIBoth actually. First I am trying to write the application for spi without cubeide . Just like I did with I2C but couldn't find resources(available codes) for that and since ım new ı don't now how to write the application myself. Secondly I want to add this application to my image with my own layer on distribution package. Adding the application on my local.conf and etc. configuration. I would be really thankful if u can help.
2024-08-12 03:29 AM
@Erwan SZYMANSKIHi waiting for your response , have a nice day.
2024-08-12 03:56 AM
Hello @nesnes ,
Sorry, we try to do our best to answer during this summer period, but we do not have a lot of bandwidth to do. My appologies.
Concerning your use case :
1) SPI slave Linux application
It depends if it does require a specific home made driver or not. If a generic SPI driver is enough for you, and you can use spidev.c driver, let's move to your application part. You need to understand how you interact between SPI user application and your application.
For that, you need to inform yourself about the generic method to interact between User Space and Kernel Space. Then, you can get inspired by an application such as spidev-test present in kernel sources under <kernel>/tools/spi/ folder. You will find the spidev-test.c file.
2) Concerning the deployment of your application into Yocto, I already pointed this link : https://wiki.stmicroelectronics.cn/stm32mpu/wiki/How_to_add_a_customer_application
It shows you an example with a fake hello world application, which is integrated into a Yocto image.
Kind regards,
Erwan.
2024-08-12 04:05 AM
Hi thank you for your responce I will look at the things you write . Have a nice summer :)