- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于 FPGA 的 SPI 接口设计
SPI 是一种在 FPGA 和其他芯片之间传输数据的简单有效的接口方式。 SPI 项目
第一部分:什么是 SPI
第二部分:SPI 的简单实现
第三部分:应用
第一部分:什么是 SPI
SPI 是允许一个器件同其他一个或多个器件进行通讯的简单接口。 SPI 是什么样的?
首先让我们来看看两个芯片之间的SPI接口是如何连接的。 在两个芯片时间通讯时,SPI 需要 4 条连线。
正如你所看到的,他们是 SCK、MISO、MOSI 以及 SSEL。其中一个芯片叫做主控 芯片,另一个叫从芯片。
SPI 基础
基本特点:
同步
串行
全双工
非即插即用
一主多从
更多细节:
同步时钟有主控芯片产生,每个时钟传输一位数据
数据在传输前,首先许要进行并转串,才能用一条线传输
两条数据线,一条输入、一条输出
主从双方有关于 SPI 传输的先验知识,如比特顺序、数据长度等
5.数据传输有主控芯片发起,每次只与一个从芯片通讯
SPI 是一种同步全双工的通讯接口,每个时钟在两条数据线上各传输一比特数 据。
简单的传输
假设在主从芯片之间进行的是 8 位长度的,高位数据在前的 SPI 传输,则单个 字节的传输在波形上看起来是这样的。
MOSI 是主输出线,而 MISO 则是从输出线。由于 SPI 是全双工的,所以在时钟 沿上两条线同时传输数据。MOSI 将数据从主控芯片传输至从芯片,MISO 则将从 芯片的数据传输到主控芯片。
详细的说是这样的:
,首先主控芯片使能相应的 SSEL 信号,通知相应的从芯片数据传输要开始了;
,主控芯片产生 8 个 SPI 时钟周期,并将数据在每个时钟沿发送出去,同时从 芯片在也每个时钟沿将数据发送到 MISO 线上。
,主控芯片撤销 SSEL 信号,一次 SPI 传输结束
多个从芯片的情况
通过扩展 SSEL 信号,一个主控芯片可以和多个从芯片进行 SPI 通讯。下图是有 三个从芯片的情况:
主控芯片有 3 条 SSEL 线,每次只使能条,和其中一个从芯片进行 SPI 通讯。由 于所有芯片的 MISO 都连接在一起,所以不允许同时有多个从芯片驱动 MISO 线。
SPI 有多快
SPI 可以很轻易的做到几 Mbps 的传输速率,这就意味着 SPI 可以用来进行非压 缩的音频和和压缩的视频信号传输。
相关链接: Wikipedia 的 SPI 接 口 总 线
第二部分
SPI 接口的 FPGA 简单实现
ARM 处理器
为了检验我们刚学得的关于 SPI 的知识,我们使用一个带有 SPI 接口的 ARM7 板 和 FPGA 板,板间由 SPI 总线连接。
ARM 处理器作为主控器,FPGA 作为 SPI 从机。下图为他们之间的连接方式。
SPI 主控机 - C 语言程序
使用 ARM 的 SPI 接口,只需要初始化一些寄存器,然后对 SPI 接口进行写数和 读数操作即可让 SPI 接口自动完成发送和接收数据。
void main(void)
{
// 初始化 SPI 接口,因处理器而异
SSP0CPSR = 0x02;
SSP0CR0 = 0x07;
SSP0CR1 = 0x02;
PINSEL1 = 0x2A8;
while(1)
{
// 发送两个字节
SSP0DR = 0x55;
SSP0DR = 0x54;
// 等待数据发送完毕
while(!(SSP0SR 0x01));
// 读数
int data1 = SSP0DR;
int data2 = SSP0DR;
// ...
}
}
SPI 从机 - HDL 代码
再来考虑 FPGA 端 SPI 从机的设计。
Since the SPI bus is typically much slower than the FPGA operating
clock speed, we choose to over-sample the SPI bus using the FPGA clock. That makes the slave code slightly more complicated, but has the advantage of having the SPI logic run in the FPGA clock domain, which will make things easier afterwards.
First the module declaration.
module SPI_slave(clk, SCK, MOSI, MISO, SSEL, LED);
input clk;
input SCK, SSEL, MOSI;
output MISO;
output L
文档评论(0)