1、Rockchip SPI 功能特点
SPI (serial peripheral interface),以下是
linux 4.4 spi 驱动支持的一些特性︰
●默认采用摩托罗拉 SPI 协议
●支持 8 位和 16 位
●软件可编程时钟频率和传输速率高达 50MHz
●支持 SPI 4 种传输模式配置
●每个 SPI
控制器支持一个到两个片选
除以上支持,linux 4.19 新增以下特性:
●框架支持 slave 和 master 两种模式
2、
内核软件
2.1 代码路径
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测试工具
2.2 内核配置
device Drivers --->
SPI support --->
<*> Rockchip SPI controller driver
2.3 DTS 节点配置
&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 spi-cpha;
如果有配,cpha为1 spi-cpol;
如果有配,cpol为1,clk脚保持高电平 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-maxfrequency。
●max-freq 不要低于 24M,否则可能有问题。
●如果需要配置 spi-cpha 的话, max-freq <= 6M, 1M <= spi-max-frequency >= 3M。
2.3 SPI 设备驱动
设备驱动注册:
static int spi_test_probe(struct spi_device *spi)
{ int ret;
int id = 0;
if(!spi) return -ENOMEM;
spi->bits_per_word= 8;
ret= spi_setup(spi);
if(ret < 0) {
dev_err(&spi->dev,"ERR: fail to setup spi\n");
return-1;
......
更多详细内容请下载附件查看