Serial Peripheral Interface
来源:互联网 发布:石家庄关键词排名优化 编辑:程序博客网 时间:2024/04/27 19:51
- 全双工
- 8/16/32位收发移位寄存器
- 支持3/16/32位总线接口
- 2独立32位宽收发FIFO
- 主从模式
- 独立接收
- 最大支持50MHz
CPU(或DMA)能把数据写入SPI_TX_DATA寄存器来写FIFO.寄存器上的数据会自动移动到TX FIFOs,当在FX FIFOs上读取数据时,CPU(或DMA)要进入SPI_RX_DATA寄存器,数据会自动发送到SPI_RX_DATA寄存器中.
CMU寄存器可以控制SPI的操作频率.
SPI有两种模式,分别为主从.SPICLK是主设备端发送到从设备端的,而当片选是低电平的时候,意味着选中冲设备且当在收发打包前设为低电平,数据才有效.
SPI可以CPU或DMA进入FIFOs,数据大小可选8/16/32位.
用户可以定义SPI向CPU中发生中断的触发值.如果用DMA,SPI_MODE_CFG寄存器中的TxDMAOn和RxDMAOn位要设置为使用DMA.DMA访问只支持单发送和4-bust 发送.
对于发送FIFO,在TX FIFO在满的之前DMA的请求信号是高的,也就是说FIFO只要未用到触发值,就能继续装入.
而在接收FIFO,在RX FIFO未空之前,DMA请求信号是高的.也就是说FIFO只要没全部被接收完毕,就能继续读取.
在中断模式或者DMA的4-burst模式中,当Rx FIFO中的采样数据少于触发值时并在此后没有接收到任何其他的数据,那么剩下在FIFO中的字节就叫trailing bytes[随尾字节],要清楚这些Tx FIFO,要用到内部定时器和中断信号,内部定时器的值被定在基于APB总线时钟的1024.当定时器值为0时,中断信号会产生,CPU就会清楚FIFO中的trailing bytes.
SPI在主设备模式下会控制接收的包的数量,设置SFR(PACKET_CNT_REG)来接收任意数量的包,SPI会在包的数量接近PACKET_CNT_REG中的值得时候停止发送SPICLK时钟,而一个包的大小取决于通道的宽度.(当设置宽度为byte,那一个包就是一byte,当设置宽度为word,那一个包就是4个bytes),在功能重载前,是强制软或硬重置的(软重置会清除除特别功能的寄存器,而硬重置会把所有寄存器清除)
片选是低电平使能信号,换言之,一个芯片的片选输入为0的时候,它就被选用了.
可以选择自动设置或者或者人为设置片选,但当认为设置时,应该清除AUTO_N_MANUAL,而NSSOUT位控制片选的电平.
当选用自动控制模式,AUTO_N_MANUAL一定要设置为0,NCS_TIME_COUNT会控制未使能时期的片选,在这个时期,NSSOUT是不能用的.
SPI作为主设备的时候支持最高50MHz的频率,但是由于频率过高(是4412周期的一半),很难让MISO捕捉到,所以SPI提供了3个内部SPICLK的相位延时用的反馈时钟.
反馈时钟的选择取决于spi从设备的MISO输出延时,为了正确地捕捉MISO数据,反馈时钟要满足一下的限制
SPI控制器的MISO输入设置的时间(也就是反馈时钟) < (SPICLK周期/2 - SPI从设备的输出延时时间) (单位为秒)
如果多个反馈时钟都符合限制,那就选择最小相位延迟的,因为如果大了,可能捕捉到的数据会是下一个周期的.
四中发送数据的格式由CPOL CPHA确定 分别为 00 01 10 11(分别对应内核中的SPI_MODE_0~3的宏.)
SPI的时钟源非常多,也有1~16的分频器和1~256的预分频器,组成SCLK_SPI(最大100MHz),在经过SPI二分频之后,为SPI_CLK(最大50MHz)
调试SPI设备注意事项:
- 要先确定SPI设备的连接原理图是对的,GPIO引脚配置对不对得上,GPIO有没有被复用(因为能复用SPI的引脚,通常都能复用其他功能,例如I2C),不确定的话,就打印一下SFN的值.
- 然后搭上spi_master控制器,内核的假spidev设备,设置时钟,注册板上信息中的SPI是否成功.
- 使用spidev_test,短接MISO和MOSI,看能不能实现自发自收.
0 0
- SPI(Serial Peripheral interface)
- Serial Peripheral Interface Bus
- Serial Peripheral Interface驱动
- spi(serial peripheral interface)
- Serial Peripheral Interface
- SPI - Serial Peripheral Interface
- SPI (Serial Peripheral Interface)
- Serial Peripheral Interface (SPI)
- STM32----------SPI(Serial Peripheral Interface)
- 杂记:Atmel sama5d3 Serial Peripheral Interface (SPI)
- SPI(Serial Peripheral Interface)串行外设接口
- SPI—— Serial Peripheral interface
- Microsoft Micro Framework 3.0对Serial Peripheral Interface 的支持
- Serial Peripheral Interface Bus · Motorola SPI ARM PL022 控制器驱动移植 SPI接口的SD卡调试
- serial interface - 串行接口
- DSI (Display Serial Interface)
- HOW TO - Make a Roomba Serial Interface
- Serial Notes for Linux Programming Interface
- Unity-Android: Can't create handler inside thread that has not called Looper.prepare()
- 关于计划任务运行失败。
- WinPacp在VS2013环境下的配置
- linux 下查看文件的完整时间信息
- SVN(备忘)
- Serial Peripheral Interface
- Ehcache 整合Spring 使用页面、对象缓存
- 指定oozie java节点的hadoop属性
- EasyMock tutorial – Getting Started
- typedef 和 #define 的区别
- struts2入门教程二(接收参数)
- Oracle安全之Vault
- maven的pom.xml文件详解
- 浏览器厂商“捞过界”,其实暴露了网络广告三大“贱”