嵌入式硬件通信接口协议-SPI(三)模拟接口应用

掘芯
关注

简单完成模拟SPI各个接口的实现后,仅仅利用示波器抓取信号的时序当然是不够的。

虽然单片机作为SPI主机输出数据时的信号很容易抓取,但是从机发出的数据(即主机读取MISO信号时序),还要找个SPI接口的外设器件,这样主机发出、从机反馈。比如SPI-FLASH,此处找来一片型号为W25Q16的FLASH,验证模拟SPI接口与FLASH器件的通信正确性。

要想熟练使用W25Q16,要多下功夫学习熟悉Spec;想精通SPI-FLASH,更要对JEDEC组织下的SFDP(Serial Flash Discoverable Parameters,串行闪存可发现参数)规范有个认识和了解。

国外网站,加载慢,这里提前给截个图贴一下:

从W25Q16的手册可查阅各个接口,为了验证SPI的通信正确性,首先进行最简单读取JEDEC规范定义的芯片ID指令(0x9F)。

根据JEDEC ID (9Fh)指令的时序图,程序里利用编写好的SPI接口,发送指令并接收数据。利用这个指令可以判断编写的模拟SPI接口发送、接收数据的正确性。

看过上一篇《嵌入式硬件通信接口协议-SPI(二)分层架构设计模拟接口》的读者,在此我对代码稍做个说明,相比于上一篇文章中提及的源码,此处对读取一个字节数据的函数接口做个修改:

修改后的思路是以参数的形式传入地址,把读出的数据存到该地址里,这样接口的返回值就可以用于表示接口的正确执行与否。

这么做,主要考虑在不同平台移植时,如果用硬件SPI接口,有些硬件SPI接口使用的过程,对寄存器使用while死循环的方式等待的,所以要考虑超时情况。因此有必要预留返回值作为函数执行的结果,而真正读取到的数据放在所传地址参数指向的空间里。

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存