嵌入式爱好者

嵌入式爱好者 门户 知识库 查看内容

spi设备树配置

2022-9-30 21:31| 发布者: 这是啥啊| 查看: 407| 评论: 0

类目:  >  知识库     文档编号: 782

一、SPI简介

SPI 是英语 Serial Peripheral inte**ce 的缩写,顾名思义就是串行外围设备接口。是 Motorola首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在 EEPROM,FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,STM32 也有 SPI 接口。

二、SPI功能描述

1. 概述

通常SPI通过4个引脚与外部器件相连:
● MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
● MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
● CLK:串口时钟,作为主设备的输出,从设备的输入
● CS:从设备选择。这是一个可选的引脚,用来选择主/从设备。

2.传输的大概过程

  • 主机先将NSS信号拉低,这样保证开始接收数据;
  • 接收端检测到时钟的边沿信号时,它将立即读取数据线上的信号,这样就得到了一位数据(1bit);
    由于时钟是随数据一起发送的,因此指定数据的传输速度并不重要,尽管设备将具有可以运行的最高速度(稍后我们将讨论选择合适的时钟边沿和速度)。
  • 主机发送到从机时:主机产生相应的时钟信号,然后数据一位一位地将从MOSI信号线上进行发送到从机;
  • 主机接收从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送;

三、设备树解析

1.ti

&main_spi0 {
  status = "okay";
  pinctrl-names = "default";
  pinctrl-0 = <&spi0_pins_default>;
  ti,spi-num-cs = <2>;
  ti,pindir-d0-out-d1-in = <1>;

  spidev@0 {
              spi-max-frequency = <24000000>;
              reg = <0>;
              spi-cs-high;
              compatible = "rohm,dh2228fv";
  };
  spidev@1 {
              spi-max-frequency = <24000000>;
              reg = <1>;
              compatible = "rohm,dh2228fv";
  };
};


spi0_pins_default: spi0-pins-default {
		pinctrl-single,pins = <
			AM62X_IOPAD(0x1B4, PIN_OUTPUT, 0) /* (A13) SPI0_CS0 */
			AM62X_IOPAD(0x1B8, PIN_OUTPUT, 0) /* (C13) SPI0_CS1 */
			AM62X_IOPAD(0x1C0, PIN_INPUT, 0) /* (B13) SPI0_D0 */
			AM62X_IOPAD(0x1BC, PIN_OUTPUT, 0) /* (A14) SPI0_CLK */
			AM62X_IOPAD(0x1C4, PIN_INPUT, 0) /* (B14) SPI0_D1 */
		>;
	};

2.8mp(NXP)

&ecspi2 {
	#address-cells = <1>;
	#size-cells = <0>;
	fsl,spi-num-chipselects = <1>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>;
	cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>;
	status = "okay";

	spidev1: spi@0 {
		reg = <0>;
		compatible = "rohm,dh2228fv";
		spi-max-frequency = <500000>;
	};
};


pinctrl_ecspi2: ecspi2grp {
		fsl,pins = <
			MX8MP_IOMUXC_ECSPI2_SCLK__ECSPI2_SCLK		0x82
			MX8MP_IOMUXC_ECSPI2_MOSI__ECSPI2_MOSI		0x82
			MX8MP_IOMUXC_ECSPI2_MISO__ECSPI2_MISO		0x82
		>;
	};

	pinctrl_ecspi2_cs: ecspi2cs {
		fsl,pins = <
			MX8MP_IOMUXC_ECSPI2_SS0__GPIO5_IO13		0x40000
		>;
	};

3.3568(瑞芯微)

&spi0 {
	pinctrl-names = "default", "high_speed";
	pinctrl-0 = <&spi0m1_cs0 &spi0m1_pins>;
	pinctrl-1 = <&spi0m1_cs0 &spi0m1_pins_hs>;
	status = "disabled";

	spi@0 {
		compatible = "rockchip,spidev";
		reg = <0>;
		spi-max-frequency = <50000000>;
	};
};

&spi2 {
	pinctrl-names = "default", "high_speed";
	pinctrl-0 = <&spi2m1_cs0 &spi2m1_cs1 &spi2m1_pins>;
	pinctrl-1 = <&spi2m1_cs0 &spi2m1_cs1 &spi2m1_pins_hs>;
	status = "okay";

	spi@0 {
		compatible = "rockchip,spidev";
		reg = <0>;
		spi-max-frequency = <50000000>;
	};

	spi@1 {
		compatible = "rockchip,spidev";
		reg = <1>;
		spi-max-frequency = <50000000>;
	};
};

spi0m1_cs0: spi0m1-cs0 {
			rockchip,pins =
				/* spi0_cs0m1 */
				<2 RK_PD2 3 &pcfg_pull_none>;
};
		
spi0m1_pins_hs: spi0m1-pins {
  rockchip,pins =
  /* spi0_clkm1 */
  <2 RK_PD3 3 &pcfg_pull_up_drv_level_1>,
  /* spi0_misom1 */
  <2 RK_PD0 3 &pcfg_pull_up_drv_level_1>,
  /* spi0_mosim1 */
  <2 RK_PD1 3 &pcfg_pull_up_drv_level_1>;
};
HTML 3168 字节 304 单词 132 行

已解决

未解决

只是看看

最新评论

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2025-4-3 00:21

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部