zhliangxi
发表于 2007-10-25 15:40:56
spi总线原理附图解
SPI是一个环形总线结构,由ss(cs)、SCK、MISO、MOSI构成,其时序其实很简单,主要是在SCK的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候 数据将会是MOSI=1;寄存器=0101010x。下降沿到来的时候,MISO上的电平将所存到寄存器中去,那么这时寄存器=0101010MISO,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个SPI时序。
例子:
假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据
脉冲 主机sbuff 从机sbuff sdi sdo
0 10101010 01010101 0 0
1上 0101010x 1010101x 0 1
1下 01010100 10101011 0 1
2上 1010100x 0101011x 1 0
2下 10101001 01010110 1 0
3上 0101001x 1010110x 0 1
3下 01010010 10101101 0 1
4上 1010010x 0101101x 1 0
4下 10100101 01011010 1 0
5上 0100101x 1011010x 0 1
5下 01001010 10110101 0 1
6上 1001010x 0110101x 1 0
6下 10010101 01101010 1 0
7上 0010101x 1101010x 0 1
7下 00101010 11010101 0 1
8上 0101010x 1010101x 1 0
8下 01010101 10101010 1 0
这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,MISO、MOSI相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来!!
zhliangxi
发表于 2007-10-25 15:42:29
http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_178252.jpg
原理图
zhliangxi
发表于 2007-10-25 16:31:03
http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_178252.jpg
原理图2
zkf0100007
发表于 2007-10-25 18:39:03
不错,很形像!
wodeliguotao
发表于 2008-2-2 09:19:49
很好,继续努力
wodeliguotao
发表于 2008-2-2 09:30:51
我是在研究SPI中,.多谢,,,,,,,,,
ivension
发表于 2008-4-1 14:57:18
mark
有点不懂
spy2008
发表于 2008-4-1 15:18:35
mark
ninjia
发表于 2008-4-1 15:55:40
ding
34480016
发表于 2008-4-1 18:48:06
收藏
sciencehero
发表于 2008-4-1 19:27:30
记录!
nutos
发表于 2008-4-1 21:37:47
简单,易懂,形象,嘿嘿
lljyes
发表于 2008-4-1 22:59:45
看懂了,理解了,就不用再记!
yzlyear
发表于 2008-4-2 11:19:02
顶
HZZCL
发表于 2008-4-2 13:00:27
记号
68336016
发表于 2008-4-3 10:13:37
慢慢理解
likedev
发表于 2008-4-3 10:28:54
多谢了!!
bjj9217
发表于 2008-4-3 11:57:55
学习!
zhao_123456
发表于 2008-4-3 22:54:43
记号!
litteworm
发表于 2008-4-22 00:45:52
很好 2个移位寄存器操作 嗯。。。谢谢楼主
duqinglin
发表于 2008-4-22 11:26:20
不错
lionliu
发表于 2008-4-24 11:36:44
谢谢
Chenxg
发表于 2008-5-6 15:21:08
先顶再说.
Chenxg
发表于 2008-5-6 15:21:14
先顶再说.
heying
发表于 2009-3-12 14:08:35
精辟简洁,看书上的说明看了很久都不是很明白,书上说了十几页,都是该详的不详,该略的不略,太感谢楼主了。
zhangxiaojun
发表于 2009-3-12 14:38:21
笔记
a_zhi
发表于 2009-3-13 10:07:20
做个记号,慢慢学。
phone
发表于 2009-3-19 11:42:18
这只是其中的一种模式,还有别的模式的
hali
发表于 2009-3-19 21:45:23
简单一点,就是循环左移和循环右移.
jchqxl
发表于 2009-3-19 22:13:47
通俗易懂
broadwood
发表于 2009-3-19 23:16:24
建议慎用STC单片机的SPI功能
qzzz
发表于 2009-3-19 23:41:20
漫漫看,谢楼主
waoiofo
发表于 2009-3-19 23:44:41
我是新手应该怎么学呀 ?
sinbord
发表于 2009-3-20 00:00:43
mark
znxiyou
发表于 2009-3-20 16:27:55
呵呵……太谢谢楼主了,好东西~!
vi51
发表于 2009-5-1 00:51:26
to31楼朋友
请教STC的SPI有什么不好的,能说明好吗?我正想用STC的SPI功能,不好的我就考虑用模拟的办法来用。
vi51
发表于 2009-5-1 00:59:20
我现在试汇编一程序用STC的SPI和SM16312通信驱动VFD屏,不知那位兄弟能提供一汇编的硬件SPI通信范例来学习。C语言的我不懂啊。
mondayblue
发表于 2009-5-1 01:03:49
to36楼
我最近刚用过STC的SPI接口做双机通信,我想31楼说的慎用也不是说它不好吧
我用的是STC12C5A16AD,STC的SPI寄存器与普通的SPI寄存器不一样,至少我看过的Philip的和Atmel都是和它不一样的
不过STC官网上的STC12C5620AD系列的说明书中有对SPI的详细说明,并且有汇编的例程
我就是参照那个说明书中的程序实现双机通信的
void_c
发表于 2009-5-1 09:14:20
SPI的相位如何设置?
主机相位如何设置?
从机相位如何设置?
mondayblue
发表于 2009-5-1 11:15:34
相位和电平设置保持一致就没问题
tota2004
发表于 2009-5-1 20:57:01
好东西
jingufo11
发表于 2009-6-21 14:01:36
mark
goofy
发表于 2009-7-19 13:18:14
清晰明了,谢谢lz!!
lilolog
发表于 2009-7-19 13:56:36
前送后补,轮圈转
dhyana
发表于 2009-7-19 14:32:55
标记,正好要做
dengxiaofeng
发表于 2009-7-19 14:33:48
不错!!!学习!!!
wanghengzhi
发表于 2009-8-17 00:34:45
收藏
BlueFoox
发表于 2009-9-9 14:52:05
mark
hnrain
发表于 2009-9-16 09:07:38
嗯。。学习了。!
chengtina
发表于 2009-9-16 09:13:59
MARK
51hubao
发表于 2009-9-20 14:21:43
m
river_ucan
发表于 2009-11-19 21:45:48
mark
ndust
发表于 2009-11-19 21:50:41
jh
hukai
发表于 2009-11-20 00:01:14
mark!
wc8841484
发表于 2009-11-20 08:13:30
看帖是一种享受顶贴是一种美德
xjtyOnly51
发表于 2009-11-20 08:29:34
hao de hen a
xjtyOnly51
发表于 2009-11-20 09:20:01
hao de hen a
aaron96031
发表于 2009-11-26 10:52:49
收藏
kong
发表于 2009-12-2 20:40:54
不错,最近在搞SPI时序,
809314596
发表于 2009-12-3 08:14:02
记号!!!!!!!!!!
ggyyll8683
发表于 2009-12-3 09:16:37
清晰的解释!!!
zengxy
发表于 2009-12-3 10:29:07
mark
dugutianma
发表于 2009-12-9 22:43:57
mark
songlianjie5
发表于 2010-1-26 00:24:51
good!
bookmark
发表于 2010-1-26 07:48:21
mark
avrmk
发表于 2010-1-26 08:20:04
mark
bluefeel
发表于 2010-1-26 08:31:15
mark
sunnyAVR
发表于 2010-1-26 09:25:11
mark
zldiy
发表于 2010-1-26 13:33:50
学习了。
joni
发表于 2010-1-26 21:52:59
MARK
coolzc
发表于 2010-1-27 00:59:07
好教程,我慢慢研究下~
gxy508
发表于 2010-1-27 14:11:00
mark
please99
发表于 2010-1-27 15:30:55
好资料啊
littone
发表于 2010-1-27 17:52:07
mark
zengyi703
发表于 2010-1-28 17:26:34
mark
swustlx86
发表于 2010-1-31 14:58:49
MARK
silvanesw
发表于 2010-1-31 23:10:43
学习中。
MCU678
发表于 2010-1-31 23:59:47
MARK
moon0213
发表于 2010-2-1 01:42:43
mark
wchunyang
发表于 2010-3-11 16:45:18
不学对不起楼主
thinki
发表于 2010-3-11 16:58:36
虽然网上这东西不少,但还是谢谢LZ
1181zjf
发表于 2010-3-11 17:25:49
jh
xuejianhua1986
发表于 2010-3-11 20:14:43
mark.怎么最近spi这么多呢
lantian0099
发表于 2010-4-30 22:07:33
学习了
sodohe
发表于 2010-5-1 22:48:42
好,收藏了,谢谢LZ
jj.deng
发表于 2010-5-2 11:26:17
习惯用模拟的~~呵呵~~
wtliu
发表于 2010-5-2 11:31:21
很好,很清晰。
rosebowl
发表于 2010-5-2 14:50:39
呵呵,上一个我diy的逻辑分析仪抓的spi的截图,看起来更直观了。
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_551075.jpg
(原文件名:saleae_spi.jpg)
KevinLee
发表于 2010-5-2 15:47:01
mark.
ab1212144
发表于 2012-7-5 16:39:19
正在研究SD卡呢,想用51读SD卡,先学习SPI嘛
paorigz
发表于 2012-7-5 19:16:46
mark下,好。。。。。
枫叶随秋
发表于 2012-7-10 10:18:16
mark
浮云残雪
发表于 2012-7-18 15:42:23
多谢楼主啦。这个非常有用。楼主把自己对SPI的理解表达的很到位。让人很容易理解。
烂泥桑
发表于 2012-7-20 14:17:43
mark{:biggrin:}
gwy0075
发表于 2012-7-28 16:27:34
不错,学习下
czh_ustb
发表于 2012-8-1 14:37:24
讲解很赞 谢谢楼主分享
07031529
发表于 2012-8-1 20:45:05
感谢,让我理解的更透彻
hqjin
发表于 2012-8-3 14:52:07
理解,很形象
木v风
发表于 2012-11-2 09:26:25
不错,谢啦
司马朝阳007
发表于 2012-11-3 13:18:23
简单,易懂,形象,嘿嘿