Enable SPI - Banana pi m2u


Recommended Posts

Armbianmonitor:

Hi all.

 

Firstly, sorry I had posted this query in the wrong forum.

 

I´m trying to add support for a raw SPI comunication through SPI0, as it´s a custom comunication with a little auxiliary board, I think best option is to have a spidev device.

 

My scenario is:

 

Banana pi m2 ultra
Armbian 5.4.35-sunxi, server (No gui).

 

I have been modifying .dts and .dtsi files, here are parts of the files that I modified:

 

sun8i-r40.dtsi

			spi0_pins: spi0-pins {
				pins = "PC0", "PC1", "PC2";
				function = "spi0";
			};

		spi0: spi@1c05000 {
			compatible = "allwinner,sun8i-spi";
			device_type = "spidev";
			reg = <0x01c05000 0x1000>;
			interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
			clock-names = "ahb", "mod";
			pinctrl-names = "default";
			pinctrl-0 = <&spi0_pins>;
			resets = <&ccu RST_BUS_SPI0>;
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
		};
sun8i-r40-bananapi-m2-ultra.dts

&spi0 {
	status = "okay";
	num-chipselects = <1>;
	cs-gpios = <&pio 2 23 GPIO_ACTIVE_LOW>;	// CS = PC23
	spidev@0 {
		reg = <0>;
		compatible = "spidev";
		status = "okay";
		spi-max-frequency = <1000000>;
	};
};

 

I created a script to compile these files

 

!/bin/bash
sudo cpp -nostdinc -I include -I arch -undef -x assembler-with-cpp arch/arm/boot/dts/sun8i-r40-bananapi-m2-ultra.dts preproc.dts
dtc -I dts -O dtb -o sun8i-bananapi-m2-ultra.dtb preproc.dtc

 

And I get my new dts. As a comment, the compilation of the device tree throws me this warning:

 

sun8i-r40-bananapi-m2-ultra.dtb: Warning (unit_address_vs_reg): Node /clocks/clk@1 has a unit name, but no reg propert

 

However, I think it is prior to my modifications, because if I delete all my changes the warning is already there.

 

So, next step, I procede to replace original dtb in Banana pi with the one that I just generated, under

 

/boot/dtb-5.4.35-sunxi/

 

And then, reboot.

 

I expected to get spix.y device under /dev but there is no change here.

 

If i decompile my new dtb, I can see spi

 

			spi0-pins {
				pins = "PC0", "PC1", "PC2";
				function = "spi0";
				phandle = <0x20>;
			};

		spi@1c05000 {
			compatible = "allwinner,sun8i-spi";
			reg = <0x1c05000 0x1000>;
			interrupts = <0x0 0xa 0x4>;
			clocks = <0x7 0x29 0x7 0x71>;
			clock-names = "ahb", "mod";
			pinctrl-names = "default";
			pinctrl-0 = <0x20>;
			resets = <0x7 0x11>;
			status = "okay";
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			num-chipselects = <0x1>;
			cs-gpios = <0xd 0x2 0x17 0x1>;

 

So, Could somebody please tell me what thing (or probably things) I am doing wrong, or if there are any steps I am forgetting?

 

Just in case, I modified the armbianEnv.txt that way

 

overlay=spi-spidev
param_spidev_spi_bus=0

 

to add the spidev overlays (although if I'm not wrong this shouldn't be necessary, since I already enabled spi from the dts, is that correct?)

 

Thanks in advance to anyone who takes the time to read my issue, and if you have any suggestions, they will be more than welcome.

 

Regards.

 

mhc

Edited by Werner
Removed "moved" prefix
Link to post
Share on other sites
Armbian is a community driven open source project. Do you like to contribute your code?

On 9/12/2020 at 9:47 AM, mhc said:

Thanks in advance to anyone who takes the time to read my issue, and if you have any suggestions, they will be more than welcome.

Overlays on R40 is a bit different than the ones on H3 ...

I've done tests on my BPiM2U using proper overlay which is "spi-spidev0" (not "spi-spidev") , without any needs for "param_spidev_spi_bus", and /dev/spidev0.0 appeared properly.

 

Link to post
Share on other sites

Hi martinayotte, many thanks for your comments.

 

I changed armbianEnv.txt file according your suggestion, but spi dev did not appear, however I modified compatible property in .dtsi (from "allwinner,sun8i-spi" to  "allwinner,sun8i-h3-spi";  and after a reboot spidev0.0 does appear (even excluding overlay property in armbianEnv.txt).

 

allwinner,sun8i-spi made sense to me, it is difficult for me to know which driver to use in each case.

 

So, here is my working environment just in case someone has the same problem and wants to use it.

 

sun8i-r40.dtsi

			spi0_pins: spi0-pins {
				pins = "PC0", "PC1", "PC2";
				function = "spi0";
			};

		spi0: spi@1c05000 {
			compatible = "allwinner,sun8i-h3-spi";
			device_type = "spidev";
			reg = <0x01c05000 0x1000>;
			interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
			clock-names = "ahb", "mod";
			pinctrl-names = "default";
			pinctrl-0 = <&spi0_pins>;
			resets = <&ccu RST_BUS_SPI0>;
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
		};

And

 

sun8i-r40-bananapi-m2-ultra.dts

&spi0 {
	status = "okay";
	num-chipselects = <1>;
	cs-gpios = <&pio 2 23 GPIO_ACTIVE_LOW>;	// CS = PC23
	spidev@0 {
		reg = <0>;
		compatible = "spidev";
		status = "okay";
		spi-max-frequency = <1000000>;
	};
};

 

Thanks again!

 

mhc

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...