您的位置:首页 > 其它

杂记:Atmel sama5d3 Serial Peripheral Interface (SPI)

2016-07-21 08:48 337 查看
Serial Peripheral Interface (SPI)

概论

spi模块是一个同步串行总线,提供与外部设备的通信,两种模式主模式和从模式

当然也可以是两个处理器之间的通信。

spi接口的核心是移位寄存器一位一位的传送数据。

spi的数据传输往往有一个主机,一个从机,主机控制数据流。

也有多主模式,需要实现多主机协议。

同一时间只有一个从机能发送数据到数据线上

从机的nss线被选通时,从机被选中。当有多从机,主机需要分别的信号线选择不同从机NPCS

spi系统有两根数据线和两个控制线

MOSI 主机发送从机接收线

MISO 主机接收从机发送线

SPCK 主机发出的同步时钟线

NSS  片选

特点 :

8bits 和 16bits 数据长度

相位和极性可设置

连续传输间隔和片选和spi通信开始延迟可设置 

错误检测

主模式 spck最高速到达外部总线速度

主模式波特率使用独立时钟

从模式 服从 SPCK 不受内部时钟影响

四个片选脚可扩展到15个片选

支持外部存储设备和总线和处理器

可以用dma通道,一个发一个收

寄存器写保护

Pin Name Pin Description

Type

Master Slave

MISO Master In Slave Out                        Input Output

MOSI Master Out Slave In                        Output Input

SPCK Serial Clock                                    Output Input

NPCS1–NPCS3 Peripheral Chip Selects                Output Unused

NPCS0/NSS Peripheral Chip Select/Slave Select   Output Input

spi的io线是复用的,在使用时需要配置

spi的时钟受PMC管理,需要手动激活

spi有中断线连接到中断控制器,需要配置

Instance ID

SPI0 24

SPI1 25

spi支持dma,需要配置

置位SPI Mode Register (SPI_MR)的MSTR使能主模式

清零则是从模式

时钟极性 由SPI chip select registers (SPI_CSRx)的CPOL

时钟相别由 NCPHA bit

有四种组合,互斥,如果不同从机不同,则需每次传输前进行配置

主模式激活,时钟由内部可编程波形生成器产生。

spi有两个保持寄存器Transmit Data Register 和Receive Data Register和一个Shift Register

spi使能过后,数据传输在写如SPI_TDR (Transmit Data Register)后马上开始。

数据会立马送往Shift Register然后发送出去,MOSI发送的同时MISO也在接收,不发送数据是不会接收到数据的。

如果不关心接收,可以不用理会接收状态寄存器。

在写入TDR前,SPI_MR的PCS要置位,用于片选

如果一个新数据写入了SPI_TDR,新数据会一直保存知道现在的传输完成。

移位寄存器中的数据被写到SPI_RDR,SPI_TDR被写到移位寄存器中,新的传输开始。

移位寄存器的值传完的判断在Status Register (SPI_SR)的 TDRE(Transmit Data Register Empty)

如果新的值被写入SPI_TDR,这个味被置0。这个位用来触发dma传送。

传送的结束判断在SPI_SR的TXEMPTY,如果传送延迟DLYBCT 大于0,TXEMPTY会被置位,MCK被停止。

从移位寄存器到SPI_RDR的完成判断在SPI_SR的RDRF(Receive Data Register Full)

如果数据被读走,RDRF自动清零。

如果SPI_RDR数据没读走,新数据又来了SPI_SR的Overrun Error(OVRES)置位,

只要这个位没清,数据保存在SPI_RDR,我们必须要读status register来清除这个位

spi的时钟源于外部时钟的分频 1到255

SPI_CSR的SCBR,不能为0

复位后这个域会清零,需要人为设置

每个外设的时钟可以不一样,且不需要重新配置

有三种延迟

片选失效后延迟 DLYBCS field in the SPI_MR  所有设备公用一个DLYBCS,按最长的设置,多从时候有用

片选使能后延迟 DLYBS 每个设备不同,分别配置

数据帧之间延迟 DLYBCT

片选信号线 默认是高电平

固定外片选 单从机 清零PS bit in the SPI_MR,只管PCS field in the SPI_MR ,不管PCS field in the SPI_TDR

多外片选  多从机 置位PS bit in the SPI_MR,需要每次设置NPCS field in the SPI_MR

PCS field in the SPI_TDR用来控制片选

固定外片选 很好利用dma 不是8bit 就是 16bit ,当然每次改片选就要重新配置SPI_MR

多外片选, 提供不用重新配置SPI_MR的缓冲传输,SPI_TDR中写入32bits数据 LSB,PCS and LASTXFER fields  MSBs

当然spi还是 传送 8或者16bits 

置位PCSDEC bit in the SPI_MR,可使用外部扩展到15片选

CSAAT bit被使用不管用不用dma,则NPCS0的错误检测要关闭

不用dma,SPI_TDR需要cpu来填充,一但SPI_TDR中的数据被复制到移位寄存器中 TDRE就被置位

SPI_TDR就可以被再次填充。

如果cpu在本次发送结束前就再次填充SPI_TDR,则片选不会被清掉,

但是如果cpu没赶上再次填充SPI_TDR,片选有可能被清掉,这对有些情况会引起通信失败

解决办法:the Chip Select Active After Transfer (CSAAT) bit 置位,这会一直保持片选

除非你在发送最后一次数据时置位Last Transfer (LASTXFER) bit in SPI_CR

相对的,dma会快速重填SPI_TDR,但也不是绝对

SPI_CSR 的 the Chip Select Not Active After Transfer (CSNAAT) bit置位

会在每次传送清掉片选时间是 DLYBCS,CSAAT清零是必要前提 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: