Uploaded by 姑洗十九

03 spi通信调试记录

advertisement
RISC-V 开发板 SPI 通信模块调试 1
我们这块开发板使用的是 W25Q128FVSG 这个 Flash 进行外部存储的,这个 Flash 和单片
机之间的通信方式是 SPI 通信。Flash 模块焊接完成之后,一直通信不成功,我们在这个地
方的调试花费了非常长的时间。有不少经验值得总结分享。
还是先上实物图和原理图,给大家一个感性的认识。
图 1 W25Q128FVSG 连接电路
上图是 SPI Flash 实物接口电路,红框中的就是 W25Q128FVSG 芯片。黄框里面的是 1.8V
转 3.3V 双向电平转换芯片。为什么需要这个电平转换芯片呢,主要是因为我们单片机的 IO
接口输入输出是 1.8V 的电平,然而这个存储 Flash 的工作电压是 3.3V。这个 1.8V 的芯片 IO
输出电压,在实际使用的单片机中是比较少见的,我们这款单片机某种程度上应该算是一种
原型机,1.8V 的电压是芯片内部的电压。
图 2 SPI 接口电路原理图
关于 SPI 接口电路图的原理部分,我们在这里就先不做详细介绍了,整体也比较简单,
具体的接线方式,
我们可以查看一下 datasheet 引脚的对接口的描述方式。
然后按照 datasheet
的接线要求来接就可以了。
比如 datasheet 中,对 WP 引脚的描述,是这样的。
它说这个 WP(Write Protect)是低有效的,也就是说这个引脚被拉低的时候,Flash 存
储芯片是没有办法写入数据的。我们自己的程序是需要往存储芯片写数据,那么这个引脚肯
定是要被拉高的。
再比如这个 Hold 引脚,datasheet 中的描述如下,显然这个也是低有效,也就是说 Hold
引脚被拉低的时候,DO 这个引脚是高阻抗状态,也就是说无法进行数据传输了。我们自己
的程序肯定是需要数据传输的,所以这个引脚是要被拉高的。
上面两个部分的举例,主要是为了说明我们画原理图的时候,如何根据 datasheet 引脚
进行端口确认。不少时候,我们可以直接拿到别人的原理图,进行参考。不过我个人的看法
还是自己详细读一下 datasheet,再进行一下确认,一是防止被别人带进坑里去,另外一个
也能够让自己在调试的时候更有信心。
我们的 Flash 读取程序是基于一个 Linux 内核 SPI NOR 框架,比如在 linux5.2.0 内核中,
关于这个框架的说明在 “Documentation/mtd/spi-nor.txt”这个文档中。大家先对这个框架
有所理解就行,等系列文章分享完成后,我这边会把所有的代码给大家共享。
在对 FLASH 存储模块存入、读取、擦除数据的操作实施之前,我们第一步是不是要
先验证这个芯片是不是我们需要的芯片呀。那怎么验证呢?在程序中使用的办法,就是
读取这个 Flash 的 ID,看看芯片反馈回来的 ID 和 datasheet 说明的是不是一致。
在程序中,就是通过这一段代码来实现的。但是实际收取到的信息却是如下的,那
说明读取不成功。
正确读取的时候,JEDEC id 的结果应该是这样的。
那该怎么解决这个问题呢,SPI 调试系列的第二篇文章,我会给大家详细的剖析一
下调试过程。
Download