ARM40-A5应用——spidev

ARM40-A5应用——spidev

2019.3.2
版权声明:本文为博主原创文章,允许转载。

  SPI是"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器、传感器、存储设备等。SPI设备分为主设备和从设备两种,在大多数情况下,CPU或SOC一侧通常都是工作在主设备模式,目前的Linux内核版本中,只实现了主模式的驱动框架。
  SPI总线用于通信和控制的四根线分别是:

CS   片选信号
SCK   时钟信号
MISO  主设备数据输入、从设备数据输出
MOSI  主设备数据输出、从设备数据输入

  spidev是内核中一个通用的设备驱动,本文介绍在ARM40-A5上如何产生/dev/spidev设备节点,通过此节点可以操作挂载在该SPI总线上的设备。

一、生成 /dev/spidev

1.1、使用shell命令生成 /dev/spidev

  (1) 加载spidev.ko驱动

insmod spidev.ko

  发现生成了以下目录:

ls /sys/class/spi_master/spi0/vm0spidev/
ls /sys/class/spi_master/spi1/vm1spidev/
ls /sys/bus/spi/devices/vm0spidev/
ls /sys/bus/spi/devices/vm1spidev/

  此时/dev/目录中还没有spidev设备:

root@ARM40:/# ls /dev/*spi*            #查看/dev/下的spidev设备
ls: /dev/*spi*: No such file or directory

  生成/dev/spidev设备:

echo 0 > /sys/bus/spi/devices/vm0spidev/new_device     #生成/dev/spidev0.0
echo 1 > /sys/bus/spi/devices/vm0spidev/new_device     #生成/dev/spidev0.1
echo 2 > /sys/bus/spi/devices/vm0spidev/new_device     #生成/dev/spidev0.2
echo 3 > /sys/bus/spi/devices/vm0spidev/new_device     #生成/dev/spidev0.3

  可以看到:

root@ARM40:/# ls /dev/*spi*             #查看/dev/下的spidev设备
/dev/spidev0.0  /dev/spidev0.1  /dev/spidev0.2  /dev/spidev0.3

  生成spi1上的spidev命令如下:

echo 0 > /sys/bus/spi/devices/vm1spidev/new_device     #生成/dev/spidev1.0
echo 1 > /sys/bus/spi/devices/vm1spidev/new_device     #生成/dev/spidev1.1
echo 2 > /sys/bus/spi/devices/vm1spidev/new_device     #生成/dev/spidev1.2
echo 3 > /sys/bus/spi/devices/vm1spidev/new_device     #生成/dev/spidev1.3

① SPI0对应的引脚为PD10(MISO)、PD11(MOSI)、PD12(SCK)、PD13(CS0)、PD14(CS1)、PD15(CS2)、PD16(CS3);
② SPI1对应的引脚为PC22(MISO)、PC23(MOSI)、PC24(SCK)、PC25(CS0)、PC26(CS1)、PC27(CS2)、PC28(CS3);
③ spidev?.0使用的引脚为SCK、MISO、MOSI、CS0;
④ spidev?.1使用的引脚为SCK、MISO、MOSI、CS1;
⑤ spidev?.2使用的引脚为SCK、MISO、MOSI、CS2;
⑥ spidev?.3使用的引脚为SCK、MISO、MOSI、CS3;

  若要撤销/dev/spidev设备,重启系统即可。

1.2、上电即生成 /dev/spidev

  若希望系统上电后,自动生成 /dev/spidev,配置如下:
  (1) /etc/init.d/S02spidev 文件

touch /etc/init.d/S02spidev
chmod 755 /etc/init.d/S02spidev

  其内容为:

#!/bin/sh
set -e
echo "Starting spidev..."
modprobe spidev.ko
#echo 0 > /sys/bus/spi/devices/vm0spidev/new_device     #get /dev/spidev0.0
#echo 1 > /sys/bus/spi/devices/vm0spidev/new_device     #get /dev/spidev0.1
#echo 2 > /sys/bus/spi/devices/vm0spidev/new_device     #get /dev/spidev0.2
#echo 3 > /sys/bus/spi/devices/vm0spidev/new_device     #get /dev/spidev0.3
#echo 0 > /sys/bus/spi/devices/vm0spidev/new_device     #get /dev/spidev0.0
#echo 1 > /sys/bus/spi/devices/vm0spidev/new_device     #get /dev/spidev0.1
#echo 2 > /sys/bus/spi/devices/vm0spidev/new_device     #get /dev/spidev0.2
#echo 3 > /sys/bus/spi/devices/vm0spidev/new_device     #get /dev/spidev0.3

  (2) /lib/modules/3.18.0/spidev.ko
  将内核模块 spidev.ko 拷贝到 /lib/modules/3.18.0/ 目录。
  (3) /lib/modules/3.18.0/modules.dep

touch /lib/modules/3.18.0/modules.dep

  增加内容:
spidev.ko:

二、操作/dev/spidev

  参考《ARM40-A5应用程序——SPI应用程序(AD7689)》中的程序,运行如下:

root@ARM40:/home/test# ./test_ad7689_4ch         #跑应用程序测试
mode=0x0,speed=10000000,bits=0x16
in0 get = 0 
in1 get = 92         #相应的io有电压输入
in2 get = 0 
in3 get = 0

  

参考文章:

ARM40-A5应用程序——SPI应用程序(AD7689)
https://blog.csdn.net/vonchn/article/details/77989229
【Linux公开课】用户态SPI编程
http://www.wtoutiao.com/p/l5079K.html
Using SPI with Linux
https://armbedded.taskit.de/node/318
SPI总线测试和分析
安捷伦SPI总线测试解决方案
荟聚计划:共商 共建 共享 Grant

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值