spi片选使能问题???

rong2046   2010-4-13 10:07 楼主
操作spi通信时,在每次发送数据前都要对spi进行片选使能,为什么不能一次选中,之后进行多次的传输,和硬件特性有关吗???

回复评论 (25)

SPI有硬件的,也有软件模拟的。

可以一次片选使能,多次传输数据。
但是为了通讯安全起见,还是发送一帧数据的时候进行片选使能。发送完毕的时候,片选使不能。
点赞  2010-4-13 11:36
以前用SPIFLASH的经验,还是每次都选择的好
点赞  2010-4-13 12:38
规定的

任何一个操作开始于片选有效,终止于片选无效.

如果你发一个读指令,读完之后不另片选无效,设备会一直发数据给你,读过程无法结束.
那么,你后续的任何操作都是是非法的

和硬件无关,和SPI协议有关
点赞  2010-4-13 12:44
2楼以前如果有片选一直有效的经验,那么可以推论:#2 以前的对SPI的操作只有第一次得到正确的结果
点赞  2010-4-13 12:45
引用: 引用 1 楼 bluepei28 的回复:

SPI有硬件的,也有软件模拟的。

可以一次片选使能,多次传输数据。
但是为了通讯安全起见,还是发送一帧数据的时候进行片选使能。发送完毕的时候,片选使不能。
我这边配置的spi字长是8位,每传8位,都要从新使能,这样效率岂不是很低。
点赞  2010-4-13 14:03
引用: 引用 4 楼 gelu1040 的回复:

2楼以前如果有片选一直有效的经验,那么可以推论:#2 以前的对SPI的操作只有第一次得到正确的结果


===============================================

我以前做过 三字节为一帧,在发送一帧前 片选使能。发送结束后片选使不能。通讯正常。
点赞  2010-4-13 14:24
引用: 引用 5 楼 windriver3 的回复:

引用 1 楼 bluepei28 的回复:

SPI有硬件的,也有软件模拟的。

可以一次片选使能,多次传输数据。
但是为了通讯安全起见,还是发送一帧数据的时候进行片选使能。发送完毕的时候,片选使不能。
我这边配置的spi字长是8位,每传8位,都要从新使能,这样效率岂不是很低。


===========================================================
可以一次传N字节(一帧)。传送完毕N字节(一帧)后,片选使不能。

如果要了连续传输大量的数据,只需要片选使能,连续传输即可。传输完后片选使不能。
点赞  2010-4-13 14:26
引用: 引用 7 楼 bluepei28 的回复:

引用 5 楼 windriver3 的回复:

引用 1 楼 bluepei28 的回复:

SPI有硬件的,也有软件模拟的。

可以一次片选使能,多次传输数据。
但是为了通讯安全起见,还是发送一帧数据的时候进行片选使能。发送完毕的时候,片选使不能。
我这边配置的spi字长是8位,每传8位,都要从新使能,这样效率岂不是很低。


======================……
我这样试过,不可以的,这样只能传8位数据,剩下的传不出去。
点赞  2010-4-13 14:33
引用: 引用 8 楼 windriver3 的回复:

引用 7 楼 bluepei28 的回复:

引用 5 楼 windriver3 的回复:

引用 1 楼 bluepei28 的回复:

SPI有硬件的,也有软件模拟的。

可以一次片选使能,多次传输数据。
但是为了通讯安全起见,还是发送一帧数据的时候进行片选使能。发送完毕的时候,片选使不能。
我这边配置的spi字长是8位,每传8位,都要从新使能,这样效率岂不是很低。

……

====================================
你的接受方是硬件做的?
点赞  2010-4-13 14:37
硬件,一个dsp
点赞  2010-4-13 14:39
通讯是双方的事情,
要看接收方是怎么处理数据的。
如果它接收到一字节马上处理,需要花费一段时间,那么你连续传的第二字节可能就出问题了。

所以,你得看看接收方是怎么处理接收到得数据。

我有一次片选,传输多字节的项目经验。
点赞  2010-4-13 14:46
引用: 引用 11 楼 bluepei28 的回复:

通讯是双方的事情,
要看接收方是怎么处理数据的。
如果它接收到一字节马上处理,需要花费一段时间,那么你连续传的第二字节可能就出问题了。

所以,你得看看接收方是怎么处理接收到得数据。

我有一次片选,传输多字节的项目经验。
不是处理不过来的问题,是收不到的问题。每次发送都要伴随一次使能操作。
点赞  2010-4-13 14:54
那还是要看接收方的处理。
比如说,接收到了一字节是否转移此数据。是否清空相关寄存器,标志位好再接收。
点赞  2010-4-13 15:06
[quote]引用 13 楼 bluepei28 的回复:

那还是要看接收方的处理。
比如说,接收到了一字节是否转移此数据。是否清空相关寄存器,标志位好再接收。
[/Quote那边是中断接收,应该不会出现这种问题,接收端不是我弄的,具体不太清楚。
如果说是没准备好的话,我这边加大延时应该可以,但还是不可以的,必须重新片选使能。
点赞  2010-4-13 15:16
问题明确了:

双方的通讯协议没有明确。

你应该联系接收方的开发工程师,看是怎么处理的。

如果人家设计的是片选一次只接收一字节,你弄死也传不过去两字节。
点赞  2010-4-13 15:27
引用: 引用 15 楼 bluepei28 的回复:

问题明确了:

双方的通讯协议没有明确。

你应该联系接收方的开发工程师,看是怎么处理的。

如果人家设计的是片选一次只接收一字节,你弄死也传不过去两字节。
问题是他那边也不知道是什么原因,不片选试了一下不行,加上片选ok了,就先这么用着了,现在想查一下原因,对方也是想一次片选多次接收的,不过我是真不知道他那边是怎么设置的。不知道有什么设置和这个相关。
点赞  2010-4-13 15:44
用示波器看data线,以确定你的数据发出去没有。
另外,很多IC的SPI接口都支持self-test模式,就是自己发自己收,你可以把发送和接受的程序都写了,试试看。
点赞  2010-4-13 16:07
ps:
1. 不片选是绝对不行的
2. 片选是耗电的
3. 协议规定,数据开始要使能片选,数据结束要禁止片选。一次N个数据的问题,你可以仔细看看IC资料,加上用我上面说的方法来调试。
点赞  2010-4-13 16:10
再者,
注意master和slave模式的区别,具体请看IC资料说明。
点赞  2010-4-13 16:11
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复