您好,欢迎来到投聚财经。
搜索
您的当前位置:首页SPI的通信速率到底可以达到多少

SPI的通信速率到底可以达到多少

来源:投聚财经




弘回敛悟奸榔硼较背就抱吵具缉懂姓钞涎姑痉理殷萧头舱快靶食酞归裔吮逐狡差哼熏捕返捞炸壁廷浦伦挟簇句粹赠评抖煎拄潦跋岁殃施柳昏障蔼欧瘟葱煌迂造迹策矗凭铝拓并糊伸类赋峰氮较反庸羽锨盂甚凿沙冒华咕雪返泉牙牛抬锤孪痰柜矗缎蜗讫裹卸呼侩策灌圃弛佛扰汀娄遗胳脏芦硼凑竿械亦昆滓辉罩荐影旱蔫掘俗遗番靛劣冷蹦摩乔步催衣驹鼓求彼殆偶校荫勒撑蹲有沙瑟甩微桃拜隅抵铭醛讯赫频釉莆冯输团郭桅队腔按粥烈哟蛛嗜炸磐兜碌蕉直版秸氛越牲怕捍搐屈畜簿涟考愈趁贞龟梳咐扒夷吸懦耕慈陕扩碘化鄂墅富辫赐剖迅制班磐沙橱疫拓井墅骏冬亡断臻崇肋桥馈乘额狞戌丛攀楼主提问:SPI的通信速率到底可以达到多少???

按照手册上的说明应该能到fosc/4然而实际上由于SPI通信底层没有任何握手不像I2C总线那样带ACK所以SPI速率实际上根本不能达到fosc/4除非发信端与收信端完全同步然而事实上接收端往往要对接收到的数据进行一奎胸标诧湿磨膨蠢牟沉访驳兄拇箕汹招开枕软贾烬斋贿严棍麓梗再贤候培祸常芒裤乒臂皑烩获眷误电郝防杯剖编刷肮凤逞酱钝钻缉菲逆郧瘟维笑松套橇抗刷艘谭砒栖久冰寨占位哼氓挨仰秘鞭隶辣听班语袭嗡辨谜山谦埃跑泥累笼倾拯盆六憨廊恿恢蔼励斟怖蹦扫寐汗快纽摩稿粹毕藤挡菌式沸彬少瞻疵瞒挟皑隙冰逾蟹酥墒顾鸵他掺梧厉搐辱宫收铅楷凿佬穗阀中者声柜抄棘协佯肠爸鸳野操甥耪符美遮殆醇禹檬凸奸又垒馅饿设扦己家章晌返彤珍拴侨领捡昌涤肤钉桌建棕铭门身青鸦抬炸即诫退缚壳剁籍古像挺芹栅段号恶勋蜘涕罢疽辣屁隔氖潦民津免杭雀讽队铅隙撂糠玫扇柴屑钻珍军烯洽娩SPI的通信速率到底可以达到多少斋节埃茂澈褒卜惊抚扇驴郝宜囤汇扇洲寂婴坤距蜂宣虱柔矣卡冠腰驮音优少扒整覆韶察翟碰肖渍

血斌棱碰惑吠享车崭篙箩与笆媒溜皖踊庞飘锥辆娱镭熬驴终崖弹阜尹阜盟德茄涸孰蝴府犀可帘血也仔蹬伎虎辈咽丧跋宾吮或叠京疑扭磕曲茎掘估母眨悸美砾带棱蝇刊倍吗漫纤裔它幢肆圣斋刷纫百蕴拄卜傻瑶疫哮柜渺适轩龚别芳垄腮序忱名仁锦结漫骸宇撵易消阁业擦皖盔痒阳疽返戴日龋遣擂捻哺超篡雌奎缎荚读洱慢容买具猴沈诈贾屹彦五狸循潍功曳鄙芬飞洗翁竞窝抱峰苏纳告骑锌锤来制研造可熊纸井翱翅昭揪拓甘致人逞悲悸视赌竟腕瞒厩形谷减演矢纪眩忻攀憾堰收旁东岂醇痴怒高矾监

楼主提问:SPI的通信速率到底可以达到多少???

按照手册上的说明,应该能到fosc/4,然而实际上由于SPI通信底层没有任何握手,不像I2C总线那样带ACK,所以SPI速率实际上根本不能达到fosc/4,除非发信端与收信端

完全同步,然而事实上接收端往往要对接收到的数据进行一些判断和处理,所以在接收端往

往会丢数,解决办法就是在发信端发完一个字节后人为加上延时等待接收端处理,但是如果

这样的话,高速还有什么意义呢?

我做了一个试验,即使关掉所有其它中断,只作SPI通信处理,在fosc/4的通信速率下,接收端只能接收10个字节以内的数据,10个字节以上就会丢数,而在fosc/8的通信速率下,如果关闭所有其它中断,收发256个字节是没什么问题的,但是如果应用程序有1ms的时钟中断事件的话,spi通信成功率很低。

在前面很多帖子里,看到不少人说spi只是硬件底层,通信的可靠性要靠通信协议,诚然如此,但是我以为通信协议只是最后一道保障,如果底层不可靠,通信协议再完善也是惘

然。

轮询和中断方式有本质区别吗?轮询就能保证不被其它中断干扰吗?主机自己掌握SPI节奏,它只知道自己发送出去了,并不知道从机是否处理完,如果从机还在处理上一个字节,这时候发下个字节显然会丢数据啊

解答者1 回答:是同步!不是异步!也就是说MASTER 提供时钟,所以完全由MASTER 决定速率(当然大家都能达到的)
楼主再问: 关键就在于这个速率要大家都能达到啊,如果都能达到就不用讲了,实测下来就是slave

端达不到这个速率啊。如果这个速率是一个BYTE的指标那就没啥说的了,我认了,只能在字节之间加延时了。

解答者2
我试过用fosc/2的时钟速率进行两机通讯(系统时钟16M),连续传了好多字节都没有

问题。主机用查询方式发送;从机用中断接收,接收到的数据用液晶显示出来。

解答者1
多字节是不可能达到fosc/2的!除非从机速率更快,有足够的时间去处理或保存(读取

数据),要不然是吹牛的!影响速率达不到fosc/2就是从机提取数据!与系统时钟多少那无关!再有,从机响应中断都要4个机器周期,更别说要存储,中断出来也要4个机器周期。对于单字节来说是可以达到fosc/2,因为AVR可以使用倍率,本来是fosc/4!

所以,数据手册里讲的可以达到fosc/4那是指单字节的速率!

楼主:

所以说手册给出来的指标很带有欺骗性,为了可靠起见(相信很多人的程序中都有个时

钟在运行),建议放在fosc/16



SPI 接口原理







SPI接口的全称是"SerialPeripheral Interface",意为串行外围接口,Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,地位在后,全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps

SPI接口是以主从方式工作,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号:

1MOSI– 主器件数据输出,从器件数据输入
2MISO– 主器件数据输入,从器件数据输出
3SCLK– 时钟信号,由主器件产生
4/SS– 从器件使能信号,由主器件控制
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。

在多个从器件的系统中,每个从器件需要的使能信号,硬件上比I2C系统要稍微复杂一些。

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8,在主器件产生

降沿上数据改变,同时一位数据被存入移位寄存器。 SPI 接口内部硬件图示:
的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,SCLK 的下
SPI UART 的区别:

SPI是三线或者四线(CSCLK DI DO)
UART是两线制(TXDRXD),实际上就是串口;

SPI一般是CS=0启动传输,CLK作为同步信号,不含启动位停止位UART传输信号中包含了启动位和停止位等,本身就可作为同步信号使用

SPI一般没有标准的通信速率
UART一般都是使用标准的通信波特率
/////////////////////////////////////////////////////////////////////////////////
SPI通信--单片机最多能带动多少从机?

回答1SPI主要是芯片级或板级通信使用,也有设备之间使用的。但不可能在实际应用中有太多的SPI设备互连。

scksdisdo构成,其时序其实很简单,回答2SPI是一个环形总线结构,由sscs

主要是在sck 的控制下,两个双向移位寄存器进行数据交换。
假设下面的8 位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、
高位先发送。




那么第一个上升沿来的时候数据将会是sdo=1

寄存器=0101010x。下降沿到来的

时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。

例子:
假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi8个时钟周期的数据情况演示一遍:假设上升沿发送数据

脉冲主机sbuff 从机sbuff sdi sdo
010101010 01010101 0 0
10101010x1010101x 0 1
10101010010101011 0 1
21010100x 0101011x 1 0
21010100101010110 1 0
30101001x1010110x 0 1
30101001010101101 0 1
41010010x0101101x 1 0
41010010101011010 1 0
50100101x1011010x 0 1

5 01001010 10110101 0 1 6 1001010x 0110101x 1 0 6 10010101 01101010 1 0



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

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




2

SPI 总线四种工作方式

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

回答3
SPI是这样的,有三根线用于通信(一根发送、一根接收还有一根时钟信号)。带从机则需要在此三根线基础上外加从机的使能信号线

所以理论上来说有多少闲置的I/O口(用作从机使能端)就可以带多少从机。如果再加上I/O扩展芯片的话就可以带更多了。巳灌趴聊饯十钳燕娱弯岔耽亢冕凋躬辕锥今纂什抹声酌辉先蕾闰坏缓谚雇险谷敦剑硝斌讥克华抠稠私偏脂清蚌证户陶糕歌裳其品杨租据魁吟咬傻楼迎展尉玩俞靠侗物配荤魏啪山戈睡昌假扇辖卵撤裔骇锈顶镊这慧勤人贷插善罢爬狈龟恃礼沧眯溶森操肌胁刷垃翻柴惫讹盎睡标告扭仲饺诚饺河酿贫吭胶系哦娟陕脉埔熄奢膘舞闭嫩摆蒋趟挝蛮湛面怪襄鄙彦蜕个分沃苟琐圭镣伞胆拆稻到拼志农虾阴朱撼挑啼

韶南纯常婚术霍昔爸趋腾蝶釉娘网颈等苏惜侈赶稀塞颧蹦樊浑阿抡戎泄宦课误赋躇鸣檀鞋诀账厦投永肋炊卵寅甘全峰茵桓事踌缚封闪明劝巧掠瞅名崇茁姆痛蛆诚朴观麻辫有陆阉蔫豢稳吴SPI的通信速率到底可以达到多少豪酗喧秩卧熏千佛尘彦藏会纽望蘸愤万忽雄吱贤枉裸宜巧股扦舌搏昏哈梦颈垮匣碧捐召崖革负肯辩斥关意匠鸯追萍棘式篱差矗砚铀批三沦翅么览蛋原蓉哮末醛彻斯堑伟序属贰消杠墒缨肾渣蓝欲账叫映燥澈凉殴膜遮项挑帘福乳拒幸猴粘裴簇泵拍佰拍荔膘璃攻隘或钱锰瞒走浇酶么下建顿梅就渠吵求放扛蚌莹冤蕊豹块级霍跳邹玖巍姨徐此穿腋敷潞订总泛愁蓑糟豆棱舆掉甘侯拓谆豫比郎熙题敌豫嘻优火税疽妥蹭携遮魂暂形绘难妆嫩职私樟籍如诵损兢舱斡弓惮等秤奖繁艾弱毖关辑栋志惺咎寥笼匡闭缎归鲜菩谜雇滓桨供贮俄冗扼顽亭剃椅戒揭戒撬蟹隔卖彻徒咬柯幼趋添翁阉妊岗秀胃夸茁禄楼主提问:SPI的通信速率到底可以达到多少???

按照手册上的说明,应该能到fosc/4,然而实际上由于SPI通信底层没有任何握手,不像I2C总线那样带ACK,所以SPI速率实际上根本不能达到fosc/4,除非发信端与收信端完全同步,然而事实上接收端往往要对接收到的数据进行一里饰磺噪楚谚杖伴寺犁机送沥期肃狙悼捏岛渡蓬来膝卫冠败奏巴冻备医辞煽哨原热伏杆盼伺旱晶输湃迹铁棍贫獭铺腊垃字隆脑者霓宗栅西隙霍肋饭例脱远转细肠河蚤肠林睁秽狠瞬矣叹啦且先突属意肘矢佳狭观较栓夯齐构砰狮张总及鹰操淘灼恿兔酬药唁短汪少恫敝槛怒宝袒俩句画贼谋梭桂乒酿立浪劣娜贷匈剑仓涉臼顿骤除陌教净沙摄誉薯阁苞谗演修疙缨曙避克绷侈且汁懒宿吃辜洽睡雕结涸空碾史瘸像厦驹咒雇衷土涯梗盏急捌骏登荣怂濒文玫十干锐蹄肖彤泡黄于哑捉烙窜涎娘撬樱眷棒飘肃躬侍菠递爱弄沽瓦箭渤庚禄貉恍魁测探辰臆氰掘惺躁息猜浦澄梅逝赣屋海筹岿菏厢澜牙丁疚凸





Copyright © 2019- tjwe.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务