杂记:Atmel sama5d3 Serial Peripheral Interface (SPI)

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清零是必要前提 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值