SPI
芯片名称与内核版本
| 芯片名称 | 内核版本 |
|---|---|
| 采用 Linux 4.4 的所有芯片 | Linux 4.4 |
| 采用 Linux 4.19 及以上内核的所有芯片 | Linux 4.19 及以上内核 |
前言
概述
本文介绍 Linux SPI 驱动原理和基本调试 方法。
读者对象
本文档主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
1. Rockchip SPI 功能特点
SPI (serial peripheral interface),以下是 linux 4.4 SPI 驱动支持的一些特性︰
- 默认采用摩托罗拉 SPI 协议
- 支持 8 位和 16 位
- 软件可编程时钟频率
- 支持 SPI 4 种传输模式配置
- 每个 SPI 控制器支持一个到两个片选
- 支持 spi slave mode,有且仅有 SPI_CS0N 作为 CS 输入脚:
- 传输过程不允许切换为 GPIO function
- 不支持 CS1N 替代 除以上支持,linux 4.19 新增以下特性:
- 框架支持 slave 和 master 两种模式
1.1 SPI 接口速率
| 芯片名称 | Master Mode 接口最高速率 | Slave Mode 接口最高速率 |
|---|---|---|
| RK3506 | 50MHz | 50MHz |
| RV1106B/RV1103B | 50MHz | 33MHz |
| RK3576 | 50MHz | 33MHz |
| RK3562 | 50MHz | 33MHz |
| RK3528 | 50MHz | 33MHz |
| RV1106/RV1103 | 50MHz | 33MHz |
| RK3588 | 50MHz | 33MHz |
| RV1126/RV1109 | 50MHz | 16MHz |
| RK3568 | 50MHz | 33MHz |
| RK1808 | 50MHz | 16MHz |
| RK3308 | 50MHz | 16MHz |
| 其他芯片平台 | 50MHz | 16MHz |
说明:
- 接口最高速率为理论速率,受设备走线 PCB 质量影响,以实测为准。
- 部分平台由于 PLL 策略原因无法准确分频到上限值,实际以最大分频值为准。
2. 内核软件
2.1 代码路径
drivers/spi/spi.c:SPI 驱动框架drivers/spi/spi-rockchip.c:RK SPI 各接口实现drivers/spi/spi-rockchip-slave.c:RK SPI slave 各接口实现drivers/spi/spidev.c:创建 SPI 设备节点,用户态使用drivers/spi/spi-rockchip-test.c:SPI 测试驱动,需要手动添加到 Makefile 编译Documentation/spi/spidev_test.c:用户态 SPI 测试工具

