微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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节点,子节点包含在里面

原文地址:https://www.jb51.cc/wenti/3281088.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐