SPI flash debug trace

来源:互联网 发布:java不关闭流 编辑:程序博客网 时间:2024/05/22 10:29

最近想直接脱离mtd 层对SPI flash 进行相关操作。 Linux 下spidev的东东能帮我们做这个事情。
于是,我便使用spidev 的API 编写一个操作SPI 的code, 编译,测试, 读取的数据总是0xFF,我测量了了一下SPI 的数据信号和时候总,都是OK的,这个时候陷入了困境, 没有思路了。。。。。

在这里要说明一下,我使用的是spi ioctl 函数,它调到驱动了,肯定是调用Spi_transfer函数来实现的。以下是我实现的伪代码。。。

spi_transfer(cmd) ; // Send cmdspi_transfer(data); // recv data

乍一看,好像是没有问题,但问题恰恰出在这里。
我们首先陈述下面的部分:

spi_transfer 函数在kernel 层启动了一次传输,在传输的开始时,它会将CS 拉低保持有效,而当传输完成后,将CS 拉高保持无效。

我们再看一张关于CS 的图片:


OK, 当CS 为高时,该芯片处于standby level (待机状态). 处于standby状态就以为么有工作能力,而但CS 为低时,power 处于active state. 两次CS 的变化,这相当于对这宽芯片复了位。(第一次发送命令过去,芯片刚要回,结果你复位了。当你CS 再次拉低的时候,芯片认为你是重新发的命令呢,所以没办法回应) 所以,无法受到芯片的回应信息!

1 0
原创粉丝点击