ARM平台嵌入式Linux下SPI设备连接

发布者:皮球最新更新时间:2021-07-05 来源: eefocus关键字:ARM平台  嵌入式  Linux  SPI  设备连接 手机看文章 扫描二维码
随时随地手机看文章

简介:在嵌入式ARM平台设备上,经常有在一个SPI bus上面挂接一个或者多个SPI设备的需求,由于挂载一个设备的情况比较简单,本文主要就在嵌入式Linux环境下挂载多个SPI设备进行说明。


本文所采用的硬件为Toradex 公司Colibri VF61计算机模块和开发载板,核心为Cortex-A5和M4异构双核,这里A5运行Toradex官方发布的Embedded Linux BSP V2.5,M4核心这里不做使用。


本文涉及Toradex发布Embedded Linux源码下载,Device Tree 定制编译,相关操作请参考下面文章,本文不做赘述。


http://developer.toradex.com/knowledge-base/build-u-boot-and-linux-kernel-from-source-code


http://developer.toradex.com/device-tree-customization


Colibri VF61最多可以提供4路SPI bus,不过只有SPI1为系列兼容,因此这里就只使用SPI1,根据手册,其硬件管脚定义如下:


1). 在连接一个SPI 设备情况下,则只需要硬件对应连接上面管脚即可,Device Tree默认也已经设置好无需修改,然后按照下面文档说明操作即可


http://git.toradex.com/cgit/linux-toradex.git/tree/Documentation/spi/spidev_test.c?h=toradex_vf_4.1


2). 在连接多个SPI设备情况下,则主要问题是需要多个Chip Selection片选信号,这里有两种解决方案,一种是硬件CS管脚,VF61 SPI1通道除了默认的CS0,还提供额外的4个CS管脚,不过默认为其他功能;另外一种方式为直接使用GPIO作为CS管脚,下面对这两种方式分别说明:


a).采用硬件CS管脚


除了默认的SPI1_CS0,VF61还提供了额外4个CS管脚SPI1_PCS1, SPI1_PCS2, SPI1_PCS3;不过由于不是默认功能,需要在Device Tree中修改,下面以除了默认的CS0,再添加一个设备采用SPI1_PCS1作为CS信号为例说明。


./ 根据VF61手册,有连个管脚可以提供SPI1_PCS1功能,我们选择默认功能为GPIO的SODIMM Pin79来设置为SPI1_PCS1。


//修改&iomuxc -> vf610-colibri, 从’pinctrl_additionalgpio’里面删除对应GPIO管脚


pinctrl_additionalgpio: additionalgpios {


fsl,pins = <


VF610_PAD_PTC4__GPIO_49 0x22ed


……


>;


};


//在’pinctrl_dspi1‘中添加对应的管脚


pinctrl_dspi1: dspi1grp {


fsl,pins = <


VF610_PAD_PTD4__DSPI1_CS1 0x33e2


>;


};


//最后再为新的slave device添加slave node


&dspi1 {


spidev1: dspi@0 {


compatible = "spidev";


reg = <0>;


spi-max-frequency = <50000000>;


};


Spidev2: dspi@1 {


compatible = "spidev";


reg = <1>;


spi-max-frequency = <50000000>;


};


};




b).采用GPIO作为CS管脚


参考文档请见这里,下面是一个简单举例


./ 修改Device Tree SPI master node 参数


//增加cs-gpio 属性,定义GPIO CS管脚或者GPIO和硬件CS混合,如下面所示SPI1_PCS0和另外三个GPIO混合组成新定义的CS组合


&dspi1 {


cs-gpios = <0> <&gpio1 14 0> <&gpio1 15 0> <&gpio1 16 0>;


};


这样重新定义的CS片选组合为4个,顺序如下:


CS0: SPI1_PCS0


CS1: &gpio1 14


CS2: &gpio1 15


CS3: &gpio1 16


./ 修改&iomuxc -> vf610-colibri,将所需的CS GPIO从GPIOs Pinctrl删除,并加入SPI1 Pinctrl。


//从’pinctrl_additionalgpio’里面删除上面三个GPIO管脚


pinctrl_additionalgpio: additionalgpios {


fsl,pins = <


VF610_PAD_PTC1__GPIO_46 0x22ed


VF610_PAD_PTC2__GPIO_47 0x22ed


VF610_PAD_PTC3__GPIO_48 0x22ed


……


>;


};




//然后再添加到’pinctrl_dspi1‘


pinctrl_dspi1: dspi1grp {


fsl,pins = <


VF610_PAD_PTC1__GPIO_46 0x33e2


VF610_PAD_PTC2__GPIO_47 0x33e2


VF610_PAD_PTC3__GPIO_48 0x33e2


>;


};


//最后再为每个slave device添加slave node


&dspi1 {


spidev1: dspi@0 {


compatible = "spidev";


reg = <0>;


spi-max-frequency = <50000000>;


};


Spidev2: dspi@1 {


compatible = "spidev";


reg = <1>;


spi-max-frequency = <50000000>;


};


……


};


3). 将上述修改好的Device Tree 文件重新编译后部署到VF61设备里面,就完成了多个SPI设备挂载,可以在应用中使用了。


a). 编译部署除了本文一开始提到的文章,也可以参考这里


b). Embedded Linux 下 SPI设备调用请参考这里


关键字:ARM平台  嵌入式  Linux  SPI  设备连接 引用地址:ARM平台嵌入式Linux下SPI设备连接

上一篇:用动作识别控制GUI输入的研究及其实现
下一篇:一种基于ARM11和RFID技术的智能物流管理系统设计

推荐阅读最新更新时间:2024-11-13 10:46

STM32入门开发:编写XPT2046电阻触摸屏驱动(模拟SPI)
一、环境介绍 单片机采用: STM32F103ZET6 编程软件: keil5 编程语言: C语言 编程风格: 寄存器开发. 目标芯片: XPT2046---标准SPI接口时序 二、XPT2046芯片介绍 2.1 功能 XPT2046是一颗12位的ADC芯片,可以当做普通的ADC芯片使用,但是一般都是用在电阻触摸屏上,方便定位触摸屏坐标。 图1: XPT2046内部原理图 图2:电阻触摸屏---引出的4条线就接在XPT2046的YNXNYPXP上 (XPT2046支持笔中断输出--低电平有效,这个引脚可以配置到单片机的中断脚上,或者轮询判断这个引脚状态,判断触摸屏是否已经按下) 可以单独买一个触
[单片机]
STM32入门开发:编写XPT2046电阻触摸屏驱动(模拟<font color='red'>SPI</font>)
基于CAN总线的分布式嵌入式系统升级方案
  嵌入式系统具有智能化程度高、体积小、可靠性高、实时性强等诸多优点,已经越来越多地应用于消费电子、工业控制、汽车电子等各个行业。往往一个大的系统又由许多小的嵌入式系统共同构成,它们之间通过相互通信协同完成各种检测控制任务,构成分布式嵌入式系统。汽车电子系统中的车载GPS、倒车雷达、发动机控制、仪表盘系统等,数控机床中的键盘显示系统、马达控制系统等,这些无一不是嵌入式系统的具体应用。   众多嵌入式系统的应用也为软件升级带来了诸多困难,主要有以下几点:   ① 这些系统分处于大系统的各个位置,单独对每个系统进行升级比较困难;   ② 某些系统为了满足保密和可靠性的要求,对系统进行了永久密封,只预留了通信和电源端口,这就
[嵌入式]
基于IIS总线的嵌入式音频系统设计
嵌入式音频系统广泛应用于GPS自动导航、PDA、3G手机等嵌入式领域,但目前国内在这方面的研究较少。 音频系统设计包括软件设计和硬件设计两方面,在硬件上使用了基于IIS总线的音频系统体系结构。IIS(Inter-IC Sound bus)又称I2S,是菲利浦公司提出的串行数字音频总线协议。目前很多音频芯片和MCU都提供了对IIS的支持。 在软件上,作为一个功能复杂的嵌入式系统,需要有嵌入式操作系统支撑。Linux是一个源代码开放的类UNIX系统,由于其具有内核可裁剪性,且提供对包括ARM、PPC在内的多种嵌入式处理器的支持,所以广泛应用于嵌入式高端产品中。虽然Linux提供了众多API来降低驱动程序制作的复杂度,但是由于音
[单片机]
基于IIS总线的<font color='red'>嵌入式</font>音频系统设计
基于CAN总线多轴运动控制器技术的研究
  当前比较新的研究方向就是将运动控制技术与工业总线和网络技术结合起来。过去都是采用一般控制器和驱动器控制结构,这样的结构存在现场配线多、多轴同步性差、非数字化等缺点,而且很难通过外部运动控制实时调整伺服参数。由于工业网络技术的发展和应用,可以通过网络技术来解决过去运动控制结构中存在的一些问题。基于工业总线和网络技术运动控制器获得了极大的发展,已经应用于多轴同步控制中。越来越多的传统的以机械轴同步的系统开始采用网络总线运动控制的多电机直轴控制,这样可以减少系统的维护和增加系统的柔性。由于arm、dsp和fpga等处理器芯片的广泛应用,运动控制器将随着工业总线和网络技术、运动控制技术的不断进步和完善,运动控制器将进一步向网络化、数字
[单片机]
基于CAN总线多轴运动控制器技术的研究
基于嵌入式ARM9 S3C2440A 的USB设计与实现
引 言 USB(Universal Serial Bus)是通用串行总线的缩写,因其具有方便易用,动态分配带宽,容错性优越和高性价比等特点,现已成为计算机的主流接口。 随着嵌入式系统的广泛应用,各种小型终端需要开发出与外界联系的USB接口。目前,常用的技术有两种。基于单片机的USB接口,特点是需要外置芯片,电路复杂,留下的 CPU资源不多;基于ARM的USB接口,特点是资源丰富,但ARM系列产品较多,如果选型不当,还需要搭接较多的外围电路,且不能很好地发挥CPU性能。 该设计采用三星公司ARM9核的S3C2440A芯片作为CPU,因为该芯片内部集成了控制USB的所有部件,外围电路简单,易于实现。 1 S3C2440
[单片机]
基于<font color='red'>嵌入式</font><font color='red'>ARM</font>9 S3C2440A 的USB设计与实现
STM32F103做从机SPI通信SPI3中断异常
在做AM335D板子与STM32F103使用SPI通信时,需要用到STM32的从机模式,所以特别对于ST的从机模式进行了研究,由于硬件上使用的是STM32F103的SPI3,所以过程中遇到了一点麻烦,这里记录一下过程,以备查阅: 使用SPI3通信时,从机时钟产生不了中断,经过查阅资料,是因为spi3的nss口与JTAG有共用引脚,所以配置错误会导致SPI3无法使用。需要注意以下两点就可以了: 1.开启GPIO时钟的同时,开启AFIO时钟,如下: RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE ); 2.关闭JTAG功能,
[单片机]
关于STM32f103 SPI时钟速度的问题
STM32f103 中APB1的最高频率是36MHz,APB2的最高频率是72MHz,而PCLK1和PCLK2一般也默认配置为其最高工作频率36M和72M。如下图(STM32F10xx_参考手册(第7版) 第46页)时钟树所示: SPI1时钟由APB2时钟分频而来,可以选择2、4、8、16、32、64、128、256这几个分频系数。而手册规定STM32的SPI时钟最快是18MHz。对于STM32F103的SPI1接口时钟,由72M的PCLK2分频得到,所以分配系数大于等于4(72M/4 = 18M)。对于STM32F103的SPI2/SPI3接口时钟,由36M的PCLK1分频得到,所以分配系数大于等于2(36M/2 = 18M
[单片机]
关于STM32f103 <font color='red'>SPI</font>时钟速度的问题
Linux Kernel之flush_cache_all在ARM平台下是如何实现的
在驱动程序的设计中,我们可能会用到flush_cache_all将ARM cache的内容刷新到RAM,这是因为ARM Linux中cache一般会被设定为write back的。而通常象DMA是访问不了cache,所以如果我们需要启动DMA将RAM中的内容写到Flash中或LCD framebuffer,那么我们就需要调用flush_cache_all将cache中最新的内容刷新到RAM中。如果不这样做在LCD中可能会出现花屏。本文主要分析在ARM平台上到底如何实现的。 1.1 flush_cache_all在ARM Linux中的实现 在include/asm-arm/cacheflush.h中: #def
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved