针对TRF7960 SPI 接口缺乏标准协议的特点,提出了SPI器件之间通信的一般方法。论文阐述了ARM 芯片内置SPI硬件控制器的工作原理和时序,并对射频芯片 TRF7960x的工作模式与读写要求进行了分析。在此基础上,根据TRF796x的时序特性和访问要求,采用ARM芯片的硬件 SPI方式实现对TRF796x的读写访问与控制,并在RFID门禁系统中验证了通信结果。

  引言

  SPI(同步串行外围接口)是由Motorola公司最早提出的,出现在其M68系列单片机

  单片机是单片微型计算机(Single-Chip Microcomputer)的简称,是一种将中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)采用超大规模集成电路技术集成到一块硅片上构成的微型计算机系统。 [全文]

中。它是一种全双工的同步串行接口,采用主一从模式架构,支持多Slave模式应用,但一般仅支持单 Master。由于其简单实用,又不牵涉到专利问题,因此许多厂家的设备都支持该接口,被广泛应用于外设控制领域。 SPI接口是一种事实标准,并没有标准协议,大部分厂家都是参照Motorola公司的SPI接口定义来设计的。正因为没有确切的标准协议,不同厂家的 SPI器件接口在技术上存在着一定的差异,有的甚至无法直接互连。本文对SPI器件通信时容易忽略的问题进行了分析。

  1 S3C2440A内置SPI接口与工作时序

  S3C2440A是Samsung公司生产的ARM9内核芯片,该芯片内置了2个SPI硬件控制器,大大简化了与SPI器件的通信。从 SAMSung公司提供的Datasheet中可以看出,其内置硬件SPI结构主要由4部分构成:时钟分频器、8位发送移位寄存器、8位接收移位寄存器、控制逻辑等。其与SPI接口相关的寄存器包括控制寄存器(SPCONn)、状态寄存器(SPSTAn)、引脚控制寄存器(SPPINn)、预分频寄存器 (SPPREn)、发送数据寄存器(SPTDATn)、接收数据寄存器(SPRDATn,n=0,1)。其SPI接口共有4根信号线信号线

  为了完成某项任务需要有一些开关和继电器等等元件,来控制主电源(由动力线或电力线送来的电源)的开和合,而控制这些开关和继电器的线路称控制线路或信号线路。

,分别是从设备选择线(SS)、时钟线(SCK)、串行输出 数据线

  数据线就是连接移动设备和电脑达到传送铃声、图片等数字类信息文件的通路工具。现在随着电子行业日新月异的发展,数据线已经成为了我们生活中不可获缺的部分。

(MO-SI)、串行输入数据线(MISO)。当S3C2440A作为Master时,SS信号由S3C2440A驱动输出,用于选择激活某从 SPI器件,只有当SS信号线为低电平时,对应Slave设备的SPI接口才处于工作状态。为了满足不同SPI器件的通信特性,S3C2440A内置的 SPI接口定义了4种数据传输的工作时序,这4种时序是由控制寄存器(SPCONn)的时钟极性控制位(CPOL)和时钟相位控制位(CPHA)联合进行配置的。从表1可以看出,SPI的工作时序主要是根据数据采样的时刻(上升沿或下降沿),以及在没有数据传输时SCK信号所保持的状态来划分模式的。

  根据CPOL和CPHA设置的不同,S3C2440A内置SPI接口的4种工作时序如图1所示。需要注意的是,SPI通信的数据传输是以字节为单位进行的,且高位在前,低位在后,图1中的*LSB表示上一个传输字节的最低位,MSB*是指下一个传输字节的最高位。

  2 射频芯片TRF796x

  TRF796x是德州仪器(TI)公司生产的射频读写器

  读写器在射频识别系统中起着重要的作用。首先,读写器的频率决定了射频识别系统的工作频段;其次,读写器的功率直接影响了射频识别的距离。

芯片,是一个13.56 MHz集成模拟前端和数据帧RFID阅读系统。其内部可编程配置,外部控制器可直接访问其内部寄存器来调整读写器的各种参数,该芯片被广泛应用于近距离RFID系统。

  TRF796x芯片与处理器之间的通信既可以通过8位并行口也可以通过SPI接口。当采用SPI接口时,TRF796x芯片总是以从设备运行。如果内部的硬件编/解码器

  解码器把数据编码文件转为模拟视音频信号的过程,解码器一般不能单独使用,需要与系统主机配合使用,解码器的电路是以单片机为核心,由电源电路、通讯接口电路、自检及地址输入电路、输出驱动电路、报警输入接口等电路组成。

被使用,TRF796x将启动12个字节的数据 缓冲器

  缓冲器是种保持加、卸试验力平稳,或减缓试样断裂时冲击的装置。它可以弥补不同数据处理速率速度差距,也可以起到缓冲避震作用,及起到实现数据传送同步的作用等。它涉及的领域非常广泛,有电信设备、数控处理、生化科技、系统安全等。它在不同的领域有着不同的名称,其中常见的有寄存缓冲器、汽车弹簧缓冲器(缓冲胶)、电梯缓冲器等。它分常用缓冲器(常说缓冲器)和三态缓冲器。

FIFO来完成数据的传送和接收。有时候为了使处理器(如 MCU

  MCU Microcontroller(微控制器)又可简称MCU 或μ C,也有人称为单芯片微控制器(Single Chip Microcontroller),将ROM、RAM、 CPU、I/O 集合在同一个芯片中,为不同的应用场合做不同组合控制.微控制器在经过这几年不断地研究,发展,历经4 位,8 位, 到现在的16 位及32 位,甚至64 位.经过20多年的发展,其成本越来越低,而性能越来越强大,这使其应用已经无处不在,遍及各个领域。

)能实时的处理数据,TRF796x会旁路掉硬件编/解码器,采用直接传送和接收功能。TRF796x芯片的两种通信模式是相互排斥的,在应用中的某个时刻只能有一种通信方式被使用。表2中列出了TRF796x的通信方式,可以看出,要实现其SPI通信就必须先对引脚I/00~I/O2配置成不同的电平。当芯片被使能工作时就会检测这3个引脚的电平,从而进入相应的通信方式。

  当选择了SPI带SS通信方式,SS信号为高时SPI处于复位状态。只有SS信号为低时,时钟信号才开始工作,串行数据输入(MOSI)在上升沿采样,在下降沿确认生效,当SS信号变为高电平时,通信终止。TRF796x的写操作通信如图2所示。

  TRF796x的单个寄存器读操作包括一个写周期和一个读周期,在写周期过程中,MISO引脚上是无效的数据,其时序与写操作相同,也是上升沿采样,下降沿确认生效。在写周期和读周期之间,需要有半个时钟周期的极性转换时间。注意:对于任何读操作(单个读、连续读)来说,该时钟极性跳变必须被执行,否则不能够读到TRF796x寄存器的正确值。在读周期过程中,数据在下降沿采样,上升沿时确认生效,而MOSI引脚不应该有任何的跳变,就是说要始终保持高电平或低电平(即0x00或0xFF)。图3是TRF796x的读操作时序。

  3 ARM与TRF796x通信的实现

  S3C2440A的SPI接口传输方式有查询、中断、DMA三种,由于TRF796x有专门的IRQ中断引脚,所以本文选择ARM芯片 SPI接口的查询方式。S3C2440A作为Master,时钟频率通过SPPREn寄存器设置,其频率f=PCLK/[2(SPPREn的值+1)],f≤25 MHz。控制寄存器SPCONn应该根据具体的通信要求来设置。

  对TRF796x的访问需要区分是写地址还是写命令,字节的最高位(MSB)决定了该指令是用于命令还是地址。具体的地址/命令字节位描述如表3所列。

  从表3可以看出,如果是单个写寄存器操作,则发送字节最高3位为000;如果是连续写寄存器操作,则最高3位001;如果是读单个寄存器操作,则最高3位010;如果是写命令,则最高3位100;其他操作不再详述。

  本文采用S3C2440A的SPI0接口与TRF796x通信,其连接图如图4所示。从I/O_0~I/O_2的引脚电平可以看出选择的是SPI带SS通信方式。其中,EN脚是TRF796x的工作使能引脚,I/O_4是SS脚。当SS置为低且查询到状态寄存器SPSTA0的最低位为1(说明SPI发送接收准备好),待发送的数据一旦写入到发送移位寄存器SPTDAT0中,SPI通信的发送和接收就会同时开始,一般是上升沿发送,下降沿接收。如果只想发送不想接收数据,可以不读取接收寄存器的内容;值得注意的是,如果只想接收数据,应该写数据0xFF或0x00到发送移位寄存器,然后才能从接收移位寄存器中读取数据。

  下面通过非连续寄存器读操作来具体说明ARM与TRF796x是如何进行SPI通信的。图5是对TRF796x的非连续寄存器读操作的流程。

  整个读操作流程是:

  ①初始化操作,置EN脚为高电平使能TRF796x工作,将GPE11~GPE13配置成SPI功能,配置S3C2440A作为Master,且选择查询工作方式,写SPPREN0寄存器来配置通信时钟频率。

  ②写地址,从图1和图3的时序可以看出,要读TRF796x的寄存器值,必须包含一个写地址周期和一个读数据周期。在写TRF796x的地址之前,必须先设置SPCON0的CPOL和CPHA都为O,这样通信双方的时序才能保持一致,而且要将地址字节的最高3位设为010,然后将地址字节写入发送移位寄存器SPTDAT0中,一旦地址字节发送完,TRF796x就会把相应地址的内容送到MISO脚上。

  ③读数据,在地址字节写入后,读数据之前,必须转换SCK的时钟极性,从图1可以看出,需要设置CPOL为0,CPHA为1,这样就满足了TRF796x的读时序要求。写数据0x00或0xFF到SPTDAT0中,接着就可以从SPRDAT0中读取数据。

  非连续读操作的实现代码如下:

  为了验证上述的程序,在按照图4连接电路后,可以选择读取TRF7960的09h、0Ah、0Bh寄存器单元的内容,这3个寄存器在系统上电时,分别默认内容为0x11、0x40、0x87。定义一个数组 Operation[O]=0x09;Operation[1]=0x0A;Operation[2]=0x0B;调用函数 SingleRead(Operation,3);即可得到3个寄存器的内容并存放在Operation数组中。在RFID门禁系统的开发中,就是采用了这种SPI通信方式实现了ARM对RFID阅读器芯片的访问控制。

  结语

  本文通过介绍ARM芯片与TRF796x之间的硬件SPI通信方式,说明了在进行SPI器件之间通信时应该注意的问题,强调工作时序在通信时的重要性,最后给出的程序在RFID门禁系统中得到了运用。论文研究对ARM与其他SPI器件之间的通信有一定的参考意义,只要根据SPI器件的工作时序进行稍加修改就能融会贯通。

ARM与射频芯片TRF796x的SPI通信研究相关推荐

  1. Spi通信,写操作时,发送缓冲区非空停留在while里面。arm a5与w5500芯片udp网络通信。网络调试助手界面及sscom无法点击

    问题描述 w5500 与SAMA5D3x处理器通过硬件spi实现网络通信.采用w5500自带的函数进行udp通信,接口函数sendto,发送100Hz的数据一段时间后,程序停留在函数SPI_write ...

  2. TI基于DSP+ARM的双核架构如何相互通信

    1 通信结构简介 针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法 ...

  3. stm32f405rgt6与as5048a的SPI通信问题

    与as5048a的SPI通信问题 本人最近在学习无刷直流电机的FOC,其中用了一个带有磁编码器as5048a作为角度反馈的电机,其中pwm接口输出是正常的,但是在SPI通信的时候出现了问题.研究了几天 ...

  4. ADI官方解释在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上)和接收(采样或读入总线(MISO/SDI)上的数据)

    串行外设接口(SPI)是微控制器和外围IC(如传感器.ADC.DAC.移位寄存器.SRAM等)之间使用最广泛的接口之一.本文先简要说明SPI接口,然后介绍ADI公司支持SPI的模拟开关与多路转换器,以 ...

  5. STM32 SPI通信(读写flash)

    SPI通信 四线制 MISO:主设备数据输入,从设备数据输出 MOSI:主设备数据输出,从设备数据输入 SCLK:时钟信号 CS:片选引脚(低电平有效) 时序图 读写程序 flash读写函数: u8 ...

  6. android spi串口调试,PIC入门3,SPI通信和串口调试实验

    原标题:PIC入门3,SPI通信和串口调试实验 MSSP模块工作于SPI主控方式,这个可以直接在实验板上执行. 程序: //适合3EPIC实验板,配置PIC的MSSP模块工作于SPI主控方式下, // ...

  7. TLE5012B ESP32驱动程序、硬件电路设计、4线SPI通信,驱动完美兼容4线SPI不用改MOSI开漏推挽输出

    一.TLE5012B 简介 TLE5012B 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行角度测量. 它通过使用单片集成 巨磁阻 (iGMR) 元件,来测量正弦和余弦角分量,这些原 ...

  8. AS5047P磁编码器ESP32驱动程序、硬件电路设计、SPI通信时序、逻辑波形分析、注意事项

    1.AS5047P硬件设计 1.1 简介.性能参数 AS5047P 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行高速(高达 28krpm)角度测量.这种新型位置传感器配备了革命性的 ...

  9. SPI通信实验---verilog(FPGA作为从机,使用可读可写)

    文章原地址: http://www.cnblogs.com/fhyfhy/p/4429302.html SPI通信实验---verilog(FPGA作为从机,使用可读可写) 本实验讲究实用性,故设计思 ...

最新文章

  1. matlab水印剪切攻击程序,可以运行的水印matlab程序(嵌入,提取,攻击测试等).doc
  2. Redhat Linux 7.2 打开或关闭防火墙
  3. cisco路由器设置telnet口令的问题
  4. css不换行属性_前端 | css display:flex 的六个属性你知道吗
  5. POJ - 2778 DNA Sequence(AC自动机+矩阵快速幂)
  6. mysql与jframe_java-如何在JFrame上显示从mysql检索到的图像
  7. Apollo自动驾驶入门课程第③讲 — 定位
  8. 深入理解 操作系统 SJF算法(以洛谷P1223题为例)
  9. js:语言精髓笔记12--动态语言特性(2)
  10. netbeans php 安装教程,php_xdebug安装+NetBeans的配置和使用
  11. 使用 Laravel sharedLock 与 lockForUpdate 进行数据表行锁
  12. 将任何变量的值进行二进制输出的方法
  13. 偶然发现SQL2005中文版里有vs2005中文安装包
  14. win32收不到F10按键消息解决的方法
  15. 14款CSS3图片层叠切换动画
  16. 猿如意|初识CSDN的开发者工具合集
  17. 云计算机技术的运用,三分钟为你详细解析云计算技术与应用
  18. mysql两版本共存
  19. 前后端分离跨域上传图片代码
  20. 建立“顾客购买图书”的活动图(使用泳道)

热门文章

  1. 学习算法的七重境界,我在撸串境界,你在哪一重?
  2. [Day2]计量经济学之ARDL模型
  3. jasperreports在linux环境和Windows环境下字体的设置
  4. 2016年android程序员和初学者不可错过的60本好图书
  5. excel填充序列_EXCEL里如何快速输入多位序号并快速定位到成千上万的行或列?...
  6. tmall.item.hscode.audit.results.query( 商品hscode信息审核状态查询接口 )
  7. js追加html 有点击事件,js点击事件的多种写法
  8. Cocoapods制作pod时,依赖百度地图SDK的一些问题
  9. (一)Python查询12306余票:实现始发站、终点站和出发日期的合法性检验
  10. Java 垃圾回收器与内存分配策略 JVM