标题:
请问SPI包模式读取时为什么需要先虚写两次??
[打印本页]
作者:
nofaiture2004
时间:
2010-4-24 08:05
标题:
请问SPI包模式读取时为什么需要先虚写两次??
我看用包模式从RX_PKT_RAM里读数据时,先虚写两次,再进行数据的传输,这是为什么??
我看数据手册上有讲,包模式读取时,一开始的两个字节是无意义的,应该丢弃,所以应该先读两个字节??
可是,虽然虚写了,但是包模式SPI读取程序里却没有进行!读取。这样数据岂不是就停在SPI1D里了么?这样后后面的数据不就被丢掉了么??
不懂啊!
万望赐教!!
作者:
strongchen
时间:
2010-4-26 09:46
你说得对,如果一直不读的话,SPI1D里会保留最先接收到的数据,将后面的数据丢弃。但是,一旦主机开始读数据,就会马上开始接收新的数据。所以,从什么时候开始读数据,要根据实际情况,看从什么时候开始的数据是有效的。
作者:
jiaotao1983
时间:
2010-4-26 10:33
本帖最后由 jiaotao1983 于 2010-4-26 13:52 编辑
哦!谢谢斑竹。
我现在有些想通了。
我看版主说,SPI的读和写是同时进行的,在SPI的主端进行数据读取的时候,发出地址后,会进行虚写,一方面提供时钟,另一方面,随着虚写的字节发了过去,要读的字节也就传了过来。
那么我想再问一下,由于读和写同时进行,那么主端向从端写数据的时候,虽然不再需要向从端提供时钟,那么是不是也会收到从端传递过来的dummy数据?也就是进行虚读??
之所以这么问,是因为我看SPI驱动程序,SPI主端写数据的时候,判断数据是不是发送完毕,是看寄存器SPRF位是否置一,而SPRF是主端的数据buffer收到数据后才置一的。而且,每次数据发送完毕,主端都要清空自己的SPI1D的。如果是仅仅发送数据,数据移出buffer后,SPI1D应该就已经空了。所以我猜测主端向从端写数据的时候,也会收到从端发送过来的数据吧?
版主,我的猜测对吗?
作者:
jiaotao1983
时间:
2010-4-26 22:32
本帖最后由 jiaotao1983 于 2010-4-26 22:34 编辑
呵呵,我理解了,SPI整个是个大循环,主端这边数据要想出来进到从端,从端那边数据必然也要出去进到主端。
所以主端向从端写数据的话,主端的接收buffer也必然收到从端挤压出来的数据。
我理解的对吗,版主大大!
作者:
strongchen
时间:
2010-4-27 09:12
可以这么理解。SPI的发送和接收是同时进行的,即使从机此时并没有发送任何数据,主机也会接收到数据,可能是0xFF或0x00。
作者:
Hunter.Cheung
时间:
2010-4-29 11:25
最近正在调SPI,此贴令我恍然大悟啊!膜拜下LZ和版主大大,顺便留爪
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0