SSI接口问题

weirgu   2011-9-28 18:54 楼主

研究程序发现在通过SSI访问串行Flash的时候,比如我发送读的命令时

 

过程如下:

 

    // Send the instruction byte and receive a dummy byte to pace the transaction.
    SSIDataPut(SFLASH_SSI_BASE, ucInstruction);
    SSIDataGet(SFLASH_SSI_BASE, &ulDummy);

    // Send any optional bytes.
    for(ulLoop = 0; ulLoop < (unsigned long)usLen; ulLoop++)
    {
        SSIDataPut(SFLASH_SSI_BASE, ucData[ulLoop]);
        SSIDataGet(SFLASH_SSI_BASE, &ulDummy);
    }

 

搞不明白    SSIDataGet(SFLASH_SSI_BASE, &ulDummy);是干嘛用的,为什么我写数据的时候也要读一下?

回复评论 (11)

好吧,我自己回答。

上面的程序是LM3S附带的Demo程序中关于串行flash的spi的发送命令的代码。

我用示波器看了下,利用SSI的库函数SSIDataGet并不能产生SCLK信号,只有put才能
产生clk,所以,在读取的时候要先发一个0xff产生clk时钟。而上面的SSIDataGet实际上是
可以不用的,反而使通信的时间变长。
点赞  2011-9-28 20:00
是这样啊
点赞  2011-9-28 20:18

回复 沙发 weirgu 的帖子

非常感谢,我之前在论坛上提到过这个问题,但没有人知道。太感谢楼主了。
点赞  2011-9-28 20:40
我是一直没看懂TI的串行FLASH,觉得里面很别扭,索性自己编了。
点赞  2011-9-28 20:56
谢谢楼主分享!
点赞  2011-9-28 22:11

回复 沙发 weirgu 的帖子

只有执行SSIDataPut(SFLASH_SSI_BASE, ucData[ulLoop])写操作的时候,SPI的CLK引脚才会产生脉冲信号,进而输出数据通过SPI的TX引脚送给FLASH。但是在SPI的CLK引脚产生脉冲信号的同时,不管你的FLASH的输出引脚是否有数据,MCU的SPI模块都会采集RX引脚,默认一个数据输入。所以说,每执行一次SSIDataPut(),就会有个数据进入MCU的 SPI FIFO,应该紧接着执行一次SSIDataGet(),将该数据读出。如果该数据是废数据,就放弃。如何数据有用,就返回该数据。
点赞  2011-9-29 09:12

回复 7楼 brucege888 的帖子

这个是SSI控制器的通病,还是说是LM的独特的?
点赞  2011-9-29 15:31

回复 8楼 weirgu 的帖子

应该是SPI模块本身的特性吧
点赞  2011-9-30 11:18

引用: 原帖由 brucege888 于 2011-9-29 09:12 发表 只有执行SSIDataPut(SFLASH_SSI_BASE, ucData)写操作的时候,SPI的CLK引脚才会产生脉冲信号,进而输出数据通过SPI的TX引脚送给FLASH。但是在SPI的CLK引脚产生脉冲信号的同时,不管你的FLASH的输出引脚是否有数据,MC ...

有道理。

点赞  2011-9-30 11:23
请问规格为是怎么处置POSI_SS连接到FLASH的CS口呢?
点赞  2012-7-19 14:43
引用: brucege888 发表于 2011-9-29 09:12
只有执行SSIDataPut(SFLASH_SSI_BASE, ucData)写操作的时候,SPI的CLK引脚才会产生脉冲信号,进而输出数据 ...

楼主,如何判断该数据是废数据还是有用的数据啊?弃用又是怎么回事
点赞  2015-6-27 10:51
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复