SPI总线以及驱动详解

SPI总线以及驱动详解

SPI总线有四根线,一根是MISO主机输入从机输出,一根是MOSI主机输出从机输入,一根是CLK时钟线,一根是CS片选线

片选线用来选择和哪个从机进行通信

SPI总线在进行数据传输的时候,先传送数据高位,再传送数据低位,数据线高电平表示1,低电平表示0,传送一个字节完成后无需应答,就可以传送下一个字节

数据传送有四种工作方式:

取决于时钟极性和时钟相位,时钟极性CPOL 0时钟起始位低电平 1时钟起始位高点平

​ 时钟相位CPHA 0第一个时钟周期采样 1第二个时钟周期采样

00 起始电平为低电平—>数据采样(读数据)在第一个边沿,时钟线从低到高跳变的时候,数据线保持不变,这时候读数据,时钟线从高到底跳变的时候,数据线可以变化,发送数据,所以上升沿读,下降沿写

01 起始电平为低电平—>数据采样(读数据)在第二个边沿,时钟线从低到高跳变的时候,数据线可以变化,发送数据,时钟线从高到底跳变的时候,数据线保持不变,这时候读数据,所以上升沿写,下降沿读

10 起始电平是高点平—>数据采样(读数据)在第一个边沿,时钟线从高到低跳变的时候,数据线保持不变,这时候读数据,时钟线从低到高跳变的时候,数据线可以变化,发送数据,所以,下降沿读,上升沿写

11 起始电平是高点平—>数据采样(读数据)在第二个边沿,时钟线从高到低跳变的时候,数据线可以变化,发送数据,时钟线从低到高跳变的时候,数据线保持不变,这时候读数据,所以,下降沿写,上升沿读

一共四种传输方式

特点:

一个主机,多个从机,从机依据片选线选择

串行,数据只能一位一位的发

全双工:同一时刻可以双向通信,因为有两根数据线

同步:因为有时钟线

非差分

高速:没有应答机制

API:

分配对象
struct spi_drivers{
	probe
	remove
	struct device_drivers
}
struct device_drivers{
	name = "不用来匹配,但是必须填"
	struct of_device_id *if_match_table
}
struct of_device_id{
	{.compatible = "hqyj,m74hc595",},
	{}
}

一键注册注销
module_spi_drivers(变量名)

设备树:

&spi4 {
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&spi4_pins_b>;
    pinctrl-1 = <&spi4_sleep_pins_b>;两种状态
    cs-gpios = <&gpioe 11 0>;   片选线加上
    status = "okay";使能
    
    m74hc595@0 {
        compatible = "hqyj,m74hc595";
        reg = <0>; //片选编号
        spi-max-frequency = <10000000>; //10MHZ                                                                     
      };
};
在根节点的外面引用spi节点,子节点包含在里面

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...