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节点,子节点包含在里面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值