首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请问SPI包模式读取时为什么需要先虚写两次??

请问SPI包模式读取时为什么需要先虚写两次??

我看用包模式从RX_PKT_RAM里读数据时,先虚写两次,再进行数据的传输,这是为什么??

我看数据手册上有讲,包模式读取时,一开始的两个字节是无意义的,应该丢弃,所以应该先读两个字节??

可是,虽然虚写了,但是包模式SPI读取程序里却没有进行!读取。这样数据岂不是就停在SPI1D里了么?这样后后面的数据不就被丢掉了么??

不懂啊!

万望赐教!!
你说得对,如果一直不读的话,SPI1D里会保留最先接收到的数据,将后面的数据丢弃。但是,一旦主机开始读数据,就会马上开始接收新的数据。所以,从什么时候开始读数据,要根据实际情况,看从什么时候开始的数据是有效的。
海纳百川  有容乃大
本帖最后由 jiaotao1983 于 2010-4-26 13:52 编辑

哦!谢谢斑竹。

我现在有些想通了。

我看版主说,SPI的读和写是同时进行的,在SPI的主端进行数据读取的时候,发出地址后,会进行虚写,一方面提供时钟,另一方面,随着虚写的字节发了过去,要读的字节也就传了过来。

那么我想再问一下,由于读和写同时进行,那么主端向从端写数据的时候,虽然不再需要向从端提供时钟,那么是不是也会收到从端传递过来的dummy数据?也就是进行虚读??

之所以这么问,是因为我看SPI驱动程序,SPI主端写数据的时候,判断数据是不是发送完毕,是看寄存器SPRF位是否置一,而SPRF是主端的数据buffer收到数据后才置一的。而且,每次数据发送完毕,主端都要清空自己的SPI1D的。如果是仅仅发送数据,数据移出buffer后,SPI1D应该就已经空了。所以我猜测主端向从端写数据的时候,也会收到从端发送过来的数据吧?

版主,我的猜测对吗?
本帖最后由 jiaotao1983 于 2010-4-26 22:34 编辑

呵呵,我理解了,SPI整个是个大循环,主端这边数据要想出来进到从端,从端那边数据必然也要出去进到主端。

所以主端向从端写数据的话,主端的接收buffer也必然收到从端挤压出来的数据。

我理解的对吗,版主大大!
可以这么理解。SPI的发送和接收是同时进行的,即使从机此时并没有发送任何数据,主机也会接收到数据,可能是0xFF或0x00。
海纳百川  有容乃大
最近正在调SPI,此贴令我恍然大悟啊!膜拜下LZ和版主大大,顺便留爪
返回列表