SPI用户层操作
spidev.c是linux为用户写的spi驱动及接口,下面以ITX-3588J与XM25QU128C为例,讲一下如何使用spidev
在kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-firefly-itx-3588j.dtsi配置节点信息
同时在kernel-5.10/drivers/spi/spidev.c 中添加节点信息
系统运行起来后会在/dev/ 目录下生成名为spidev1.0 的字符设备,该设备可以用open、close、write、read、ioctl去操作。
一次读写大小测试
spidev 一次可读写4096个字节
测试程序:
测试结果
连续读写测试
read和write是单独的操作
测试程序:
测试结果
通过示波器进行测量
发现普通读写流程如下
片选线拉低->write->片选线拉高->片选线拉低->read->片选线拉高
使用复杂读写流程如下
mosi: ---- 0x9f ---- ---- ---- ----
miso: ---- 0xff 0x20 0x41 0x18 ----
cs: 高电平 低电平-------------------------- 高电平
spi模式设置 使用ioctl可以设置spi模式 SPI_IOC_RD_MODE 读取模式 SPI_IOC_WR_MODE 设置模式
测试程序:
测试结果
通过示波器进行测量
发现普通读写流程如下
片选线拉低->write->片选线拉高->片选线拉低->read->片选线拉高
使用复杂读写流程如下
mosi: ---- 0x9f ---- ---- ---- ----
miso: ---- 0xff 0x20 0x41 0x18 ----
cs: 高电平 低电平-------------------------- 高电平
spi模式设置
使用ioctl可以设置spi模式
SPI_IOC_RD_MODE读取模式 SPI_IOC_WR_MODE 设置模式
测试程序:
测试结果
可以看出xm25qu128c支持模式0、3
设置spi通信速率
使用ioctl可以设置spi速率
SPI_IOC_RD_MAX_SPEED_HZ读取速率 SPI_IOC_WR_MAX_SPEED_HZ 设置速率
测试程序:
测试结果
设置spi数据高/低位先出
使用ioctl可以设置spi数据高/低位先出
SPI_IOC_RD_LSB_FIRST读取是否低位先出,是返回1,不是返回0 SPI_IOC_WR_LSB_FIRST 设置是否低位先出,是写1,不是写0
测试程序:
测试结果
原作者:mcl1052018085
|