SPI flash debug trace

本文探讨了在Linux环境下直接通过spidev API操作SPI Flash遇到的问题及原因。作者尝试发送命令并接收数据,却发现收到的数据总是0xFF。经过排查发现,问题在于连续的数据传输过程中对SPI Flash芯片进行了意外复位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值