引言
SPI(同步串行外围接口)是由Motorola公司最早提出的,出现在其M68系列单片机
单片机是单片微型计算机(Single-Chip Microcomputer)的简称,是一种将中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)采用超大规模集成电路技术集成到一块硅片上构成的微型计算机系统。 [全文]
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根信号线信号线
为了完成某项任务需要有一些开关和继电器等等元件,来控制主电源(由动力线或电力线送来的电源)的开和合,而控制这些开关和继电器的线路称控制线路或信号线路。
数据线就是连接移动设备和电脑达到传送铃声、图片等数字类信息文件的通路工具。现在随着电子行业日新月异的发展,数据线已经成为了我们生活中不可获缺的部分。
根据CPOL和CPHA设置的不同,S3C2440A内置SPI接口的4种工作时序如图1所示。需要注意的是,SPI通信的数据传输是以字节为单位进行的,且高位在前,低位在后,图1中的*LSB表示上一个传输字节的最低位,MSB*是指下一个传输字节的最高位。
2 射频芯片TRF796x
TRF796x是德州仪器(TI)公司生产的射频读写器
读写器在射频识别系统中起着重要的作用。首先,读写器的频率决定了射频识别系统的工作频段;其次,读写器的功率直接影响了射频识别的距离。
TRF796x芯片与处理器之间的通信既可以通过8位并行口也可以通过SPI接口。当采用SPI接口时,TRF796x芯片总是以从设备运行。如果内部的硬件编/解码器
解码器把数据编码文件转为模拟视音频信号的过程,解码器一般不能单独使用,需要与系统主机配合使用,解码器的电路是以单片机为核心,由电源电路、通讯接口电路、自检及地址输入电路、输出驱动电路、报警输入接口等电路组成。
缓冲器是种保持加、卸试验力平稳,或减缓试样断裂时冲击的装置。它可以弥补不同数据处理速率速度差距,也可以起到缓冲避震作用,及起到实现数据传送同步的作用等。它涉及的领域非常广泛,有电信设备、数控处理、生化科技、系统安全等。它在不同的领域有着不同的名称,其中常见的有寄存缓冲器、汽车弹簧缓冲器(缓冲胶)、电梯缓冲器等。它分常用缓冲器(常说缓冲器)和三态缓冲器。
MCU Microcontroller(微控制器)又可简称MCU 或μ C,也有人称为单芯片微控制器(Single Chip Microcontroller),将ROM、RAM、 CPU、I/O 集合在同一个芯片中,为不同的应用场合做不同组合控制.微控制器在经过这几年不断地研究,发展,历经4 位,8 位, 到现在的16 位及32 位,甚至64 位.经过20多年的发展,其成本越来越低,而性能越来越强大,这使其应用已经无处不在,遍及各个领域。
当选择了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器件的工作时序进行稍加修改就能融会贯通。