查看: 8110|回复: 9

[其他] SPI总线协议

[复制链接]

该用户从未签到

3

主题

3

帖子

0

新手上路

Rank: 1

积分
0
最后登录
1970-1-1
发表于 2008-3-3 07:24:09 | 显示全部楼层 |阅读模式
SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。

假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。

那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。

例子:
假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据
脉冲主机sbuff 从机sbuff sdi sdo
0101010100101010100
1上0101010x1010101x01
1下010101001010101101
2上1010100x 0101011x10
2下101010010101011010
3上0101001x1010110x01
3下010100101010110101
4上1010010x0101101x10
4下101001010101101010
5上0100101x1011010x01
5下010010101011010101
6上1001010x0110101x10
6下100101010110101010
7上0010101x1101010x01
7下001010101101010101
8上0101010x1010101x10
8下010101011010101010


这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来

SPI 总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。图3示出SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式
 

SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。

二,SPI功能模块的设计
根据功能定义及SPI的工作原理,将整个IP Core分为8个子模块:uC接口模块、时钟分频模块、发送数据FIFO模块、接收数据FIFO模块、状态机模块、发送数据逻辑模块、接收数据逻辑模块以及中断形式模块。

深入分析SPI的四种传输协议可以发现,根据一种协议,只要对串行同步时钟进行转换,就能得到其余的三种协议。为了简化设计规定,如果要连续传输多个数据,在两个数据传输之间插入一个串行时钟的空闲等待,这样状态机只需两种状态(空闲和工作)就能正确工作。
我知道答案 目前已有8人回答
回复

使用道具 举报

该用户从未签到

10

主题

68

帖子

0

版主

Rank: 7Rank: 7Rank: 7

积分
1750
最后登录
1970-1-1
发表于 2008-5-12 12:53:35 | 显示全部楼层

RE:SPI总线协议

能否给个SPI应用的程序范例?多谢啦!

该用户从未签到

0

主题

11

帖子

0

新手上路

Rank: 1

积分
36
最后登录
1970-1-1
发表于 2008-5-12 18:13:18 | 显示全部楼层

RE:SPI总线协议

SPI 的范例可以用Codewarrior编译器直接生成代码的,网上可以搜到的

该用户从未签到

17

主题

106

帖子

0

版主

Rank: 7Rank: 7Rank: 7

积分
4805
最后登录
1970-1-1
发表于 2008-5-14 09:34:55 | 显示全部楼层

RE:SPI总线协议

收发代码很容易的。
现在打算做多个设备的SPI总线协议,不知道能不能做成

该用户从未签到

0

主题

11

帖子

0

新手上路

Rank: 1

积分
16
最后登录
1970-1-1
发表于 2008-9-30 16:11:01 | 显示全部楼层

RE:SPI总线协议

有没有sci、i2c的

该用户从未签到

2

主题

10

帖子

0

新手上路

Rank: 1

积分
16
最后登录
1970-1-1
发表于 2009-7-16 10:24:22 | 显示全部楼层

RE:SPI总线协议

好东西,谢谢楼主~
有例程就更好了

该用户从未签到

0

主题

1

帖子

0

新手上路

Rank: 1

积分
2
最后登录
1970-1-1
发表于 2009-7-30 19:12:06 | 显示全部楼层

RE:SPI总线协议

新人,学习中,谢谢!!

该用户从未签到

0

主题

1

帖子

0

新手上路

Rank: 1

积分
0
最后登录
1970-1-1
发表于 2010-7-16 14:20:47 | 显示全部楼层

RE:SPI总线协议

长见识了,又提高了

该用户从未签到

0

主题

10

帖子

0

新手上路

Rank: 1

积分
3
最后登录
1970-1-1
发表于 2011-11-28 10:07:07 | 显示全部楼层

RE:SPI总线协议

学习了,很有用,跪求例子
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

5

帖子

0

新手上路

Rank: 1

积分
8
最后登录
1970-1-1
发表于 2011-11-29 16:06:41 | 显示全部楼层

RE:SPI总线协议

多谢分享!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-22 03:04 , Processed in 0.104013 second(s), 30 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表