操作spi通信时,在每次发送数据前都要对spi进行片选使能,为什么不能一次选中,之后进行多次的传输,和硬件特性有关吗???
SPI有硬件的,也有软件模拟的。
可以一次片选使能,多次传输数据。
但是为了通讯安全起见,还是发送一帧数据的时候进行片选使能。发送完毕的时候,片选使不能。
规定的
任何一个操作开始于片选有效,终止于片选无效.
如果你发一个读指令,读完之后不另片选无效,设备会一直发数据给你,读过程无法结束.
那么,你后续的任何操作都是是非法的
和硬件无关,和SPI协议有关
2楼以前如果有片选一直有效的经验,那么可以推论:#2 以前的对SPI的操作只有第一次得到正确的结果
引用: 引用 1 楼 bluepei28 的回复:
SPI有硬件的,也有软件模拟的。
可以一次片选使能,多次传输数据。
但是为了通讯安全起见,还是发送一帧数据的时候进行片选使能。发送完毕的时候,片选使不能。
我这边配置的spi字长是8位,每传8位,都要从新使能,这样效率岂不是很低。
引用: 引用 4 楼 gelu1040 的回复:
2楼以前如果有片选一直有效的经验,那么可以推论:#2 以前的对SPI的操作只有第一次得到正确的结果
===============================================
我以前做过 三字节为一帧,在发送一帧前 片选使能。发送结束后片选使不能。通讯正常。
引用: 引用 5 楼 windriver3 的回复:
引用 1 楼 bluepei28 的回复:
SPI有硬件的,也有软件模拟的。
可以一次片选使能,多次传输数据。
但是为了通讯安全起见,还是发送一帧数据的时候进行片选使能。发送完毕的时候,片选使不能。
我这边配置的spi字长是8位,每传8位,都要从新使能,这样效率岂不是很低。
===========================================================
可以一次传N字节(一帧)。传送完毕N字节(一帧)后,片选使不能。
如果要了连续传输大量的数据,只需要片选使能,连续传输即可。传输完后片选使不能。
引用: 引用 7 楼 bluepei28 的回复:
引用 5 楼 windriver3 的回复:
引用 1 楼 bluepei28 的回复:
SPI有硬件的,也有软件模拟的。
可以一次片选使能,多次传输数据。
但是为了通讯安全起见,还是发送一帧数据的时候进行片选使能。发送完毕的时候,片选使不能。
我这边配置的spi字长是8位,每传8位,都要从新使能,这样效率岂不是很低。
======================……
我这样试过,不可以的,这样只能传8位数据,剩下的传不出去。
引用: 引用 8 楼 windriver3 的回复:
引用 7 楼 bluepei28 的回复:
引用 5 楼 windriver3 的回复:
引用 1 楼 bluepei28 的回复:
SPI有硬件的,也有软件模拟的。
可以一次片选使能,多次传输数据。
但是为了通讯安全起见,还是发送一帧数据的时候进行片选使能。发送完毕的时候,片选使不能。
我这边配置的spi字长是8位,每传8位,都要从新使能,这样效率岂不是很低。
……
====================================
你的接受方是硬件做的?
通讯是双方的事情,
要看接收方是怎么处理数据的。
如果它接收到一字节马上处理,需要花费一段时间,那么你连续传的第二字节可能就出问题了。
所以,你得看看接收方是怎么处理接收到得数据。
我有一次片选,传输多字节的项目经验。
引用: 引用 11 楼 bluepei28 的回复:
通讯是双方的事情,
要看接收方是怎么处理数据的。
如果它接收到一字节马上处理,需要花费一段时间,那么你连续传的第二字节可能就出问题了。
所以,你得看看接收方是怎么处理接收到得数据。
我有一次片选,传输多字节的项目经验。
不是处理不过来的问题,是收不到的问题。每次发送都要伴随一次使能操作。
那还是要看接收方的处理。
比如说,接收到了一字节是否转移此数据。是否清空相关寄存器,标志位好再接收。
[quote]引用 13 楼 bluepei28 的回复:
那还是要看接收方的处理。
比如说,接收到了一字节是否转移此数据。是否清空相关寄存器,标志位好再接收。
[/Quote那边是中断接收,应该不会出现这种问题,接收端不是我弄的,具体不太清楚。
如果说是没准备好的话,我这边加大延时应该可以,但还是不可以的,必须重新片选使能。
问题明确了:
双方的通讯协议没有明确。
你应该联系接收方的开发工程师,看是怎么处理的。
如果人家设计的是片选一次只接收一字节,你弄死也传不过去两字节。
引用: 引用 15 楼 bluepei28 的回复:
问题明确了:
双方的通讯协议没有明确。
你应该联系接收方的开发工程师,看是怎么处理的。
如果人家设计的是片选一次只接收一字节,你弄死也传不过去两字节。
问题是他那边也不知道是什么原因,不片选试了一下不行,加上片选ok了,就先这么用着了,现在想查一下原因,对方也是想一次片选多次接收的,不过我是真不知道他那边是怎么设置的。不知道有什么设置和这个相关。
用示波器看data线,以确定你的数据发出去没有。
另外,很多IC的SPI接口都支持self-test模式,就是自己发自己收,你可以把发送和接受的程序都写了,试试看。
ps:
1. 不片选是绝对不行的
2. 片选是耗电的
3. 协议规定,数据开始要使能片选,数据结束要禁止片选。一次N个数据的问题,你可以仔细看看IC资料,加上用我上面说的方法来调试。
再者,
注意master和slave模式的区别,具体请看IC资料说明。