toybrick rk3399prod 开发板当做SPI从设备的驱动开发

# Rockchip Linux SPI

 

---

 

本文介绍 Linux SPI 驱动原理和基本调试方法。

**产品版本**

| **芯片名称** | **内核版本**    |
| ------------ | --------------- |
| 采用 linux4.4 的所有芯片 | Linux4.4 |
| 采用 linux4.19 的所有芯片 | Linux4.19 |

**读者对象**

本文档(本指南)主要适用于以下工程师:

技术支持工程师
软件开发工程师

---
[TOC]
---

## Rockchip SPI 功能特点

SPI (serial peripheral interface),以下是 linux 4.4 spi 驱动支持的一些特性︰

* 默认采用摩托罗拉 SPI 协议
* 支持 8 位和 16 位
* 软件可编程时钟频率和传输速率高达 50MHz
* 支持 SPI 4 种传输模式配置
* 每个 SPI 控制器支持一个到两个片选

除以上支持,linux 4.19 新增以下特性:

* 框架支持 slave 和 master 两种模式

## 内核软件

### 代码路径

```c
drivers/spi/spi.c             spi驱动框架
drivers/spi/spi-rockchip.c   rk spi各接口实现
drivers/spi/spidev.c            创建spi设备节点,用户态使用。
drivers/spi/spi-rockchip-test.c  spi测试驱动,需要自己手动添加到Makefile编译
Documentation/spi/spidev_test.c  用户态spi测试工具
```

### 内核配置

```c
Device Drivers  --->
    [*] SPI support  --->
        <*>   Rockchip SPI controller driver
```

### DTS 节点配置

```c
&spi1 {                             //引用spi 控制器节点
status = "okay";
max-freq = <48000000>;                 //spi内部工作时钟
dma-names = "tx","rx";               //使能DMA模式,一般通讯字节少于32字节的不建议用
    spi_test@10 {
        compatible ="rockchip,spi_test_bus1_cs0";  //与驱动对应的名字
        reg = <0>;                //片选0或者1
        spi-max-frequency = <24000000>;   //spi clk输出的时钟频率,不超过50M
        status = "okay";         //使能设备节点
    };
};
```

一般只需配置以下几个属性就能工作了。

```
        spi_test@11 {
                compatible ="rockchip,spi_test_bus1_cs1";
                reg = <1>;
                spi-max-frequency = <24000000>;
                status = "okay";
        };
```

max-freq 和 spi-max-frequency 的配置说明:

* spi-max-frequency 是 SPI 的输出时钟,是 max-freq 分频后输出的,关系是 max-freq >= 2*spi-max-frequency。
* max-freq 不要低于 24M,否则可能有问题。
* 如果需要配置 spi-cpha 的话, max-freq <= 6M,  1M <= spi-max-frequency  >= 3M。

### SPI 设备驱动

设备驱动注册:

```c
static int spi_test_probe(struct spi_device *spi)
{
        int ret;
        int id = 0;
        if(!spi)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值