在Zynq 7000平台上使用Linux spidev.c驱动,调试spi设备
来源:互联网 发布:淘宝卖家版下载 编辑:程序博客网 时间:2024/05/16 05:34
具体原理参考大侠文章:http://blog.csdn.net/jackyard/article/details/41515037
如果要通过SPI控制外部器件,还需要添加SPI的设备驱动以实现SPI的对外控制逻辑。
在Linux内核的driver/spi目录下有许多外设的设备驱动可以参考,这篇博客主要介绍如何使用其中的spidev,c这个设备驱动来实现对外设的控制。
spidev是一个通用的SPI外设驱动,它提供了spi字符驱动的注册,并向上层应用程序提供了I/O控制接口,当我们仅需要利用SPI接口向外设发送和接收简单的控制序列时,可直接使用该驱动,下面介绍具体的使用方法。
一、采用xilinx针对Zynq 7000处理器提供的spi-cadence.c驱动实现了芯片上SPI总线驱动的注册,接下来需要修改设备树文件以时我们的外设挂接在SPI总线下。
在petalinux工程的../subsystems/linux/configs/device-tree目录下找到zynq相关的设备树文件,目录所包含的文件如下图所示。
打开其中的zynq-7000.dtsi文件,找到其中的spi0节点(具体使用spi0还是spi1根据硬件工程的配置情况),并在该节点下添加如下内容:
spi@e0006000 {compatible = "xlnx,zynq-spi-r1p6";reg = <0xe0006000 0x1000>;status = "okay";interrupt-parent = <0x3>;interrupts = <0x0 0x1a 0x4>;clocks = <0x1 0x19 0x1 0x22>;clock-names = "ref_clk", "pclk";#address-cells = <0x1>;#size-cells = <0x0>;is-decoded-cs = <0x0>;num-cs = <0x4>;device@0 {compatible = "rohm,dh2228fv";reg = <0x1>;spi-max-frequency = <0xf4240>;#address-cells = <0x1>;#size-cells = <0x1>;};};注意,更改设备树,要petalinux-config -c kernel 配置去掉Device tree autoconfig,因为选了后添加的内容编译时会自动清除
│ │ Auto Config Settings --->
│ │ [ ] kernel autoconfig │ │ [ ] Device tree autoconfig
其中 “spidev”名字对应spidev.c文件中的驱动名,Linux系统启动时会自动找到对应的驱动模块并加载。
#ifdef CONFIG_OFstatic const struct of_device_id spidev_dt_ids[] = {{ .compatible = "rohm,dh2228fv" },{ .compatible = "lineartechnology,ltc2488" },{},};MODULE_DEVICE_TABLE(of, spidev_dt_ids);#endif
reg<0>对应SPI下的第几个设备,由于Zynq PS端的SPI控制器每个可以外接控制3个从设备,所以reg的值可以设为0、1或2.
Vivado硬件工程中对SPI的接口spi0_csn_0_o进行了例化并引出接口,所以本工程使用的是SPI使能第0个端口。
同时,spidev.c该驱动不支持片选功能,因此若在spi0下挂接了多个从设备,切硬件工程中spi0_csn_0片选接口引出了多个,则spiddev驱动在注册时,会在/dev目录下注册多个设备,分别对应每个片选接口连接的从设备。
设备树文件修改保存后,利用petalinux-config -c kernel指令,在devices driver/spi support目录下,选中user mode SPI device driver support,然后重新编译内核并启动系统,即可在/dev目录下看到注册的一个SPI字符设备,一般命名为SPI x.x。
在应用层编写程序通过该驱动控制外设,可参考/opt/petalinux-v2015.4-final/components/linux-kernel/xlnx-4.0/Documentation/spi目录下的spi_test.c程序。
使用该程序,将SPI的MOSI和MISO引脚短接,即可自收自发数据了
- 在Zynq 7000平台上使用Linux spidev.c驱动,调试spi设备
- 在Zynq 7000平台上使用Linux spidev.c驱动
- linux 2.6.x spi驱动,spidev,使用从设备
- 关于2.6 的 spi驱动,spidev,使用从设备.
- 关于2.6 的 spi驱动,spidev,使用从设备.
- linux spi驱动开发学习-----spidev.c和spi test app
- linux spi驱动开发学习(二)-----spidev.c和spi test app
- linux spi驱动开发学习-----spidev.c和spi test app
- linux spi驱动开发学习-----spidev.c和spi test app
- S3C2440驱动篇—Linux平台设备驱动之SPI
- 二 spi 子系统(spidev.c)
- linux SPI 设备驱动
- Linux spi设备驱动
- Linux spi 设备驱动
- linux内核模型---总线,设备,驱动在展讯平台上I2C设备的实例解析
- 三、Linux spi 设备驱动
- Linux SPI设备驱动框架
- spi 驱动一:spi基本结构和spidev文件系统
- 指针和数组
- android 项目经常用到的BroadCastReceiver,通知界面刷新,传值等
- LNMP环境下安装DiscuzX3.3
- 直接映射,组相连映射以及全相连映射
- 今天开通了博客,希望督促自己养成写笔记的习惯,同时也记录自己成长之路
- 在Zynq 7000平台上使用Linux spidev.c驱动,调试spi设备
- Spring学习-----bean的装配(5)
- 安装虚拟机时想到的一些关于IP地址及网络连接方式问题
- 【计算机操作系统】先来先服务FCFS和短作业优先SJF进程调度算法
- 安卓学习记录--引导页底部跟随小圆点
- Scrapy爬虫实战(三)----------使用cookies爬取51job
- SSM框架搭建,及遇到的问题
- Hadoop新MapReduce框架Yarn详解
- 分布式企业应用系统服务部署和配置