博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPI Nor Flash
阅读量:4170 次
发布时间:2019-05-26

本文共 1549 字,大约阅读时间需要 5 分钟。

SPI协议

Slave与Master

一般而言,提供clock的一方称为master。如下图(7-1)中的SCLK方向可知:Processor为master,而Peripheral为slave。

SPI设备接口

SPI uses four main signals:

  • Master Out Slave In (MOSI)
  • Master In Slave Out (MISO)
  • Serial CLocK (SCLK or SCK) and Chip Select (CS) for the peripheral.
  • Some processors have a dedicated chip select for SPI interfacing called Slave Select (SS).

SPI Interface

SPI传输

SPI使用移位寄存器方式传输,示意图:

SPI transmission

形成一个循环圈,任何时刻对于一个SPI设备而言都有移位输入和移位输出。

如果想只读或者只写,那么在读的时候需要发送一个dummy byte从而产生时钟;在写的时候简单的忽略读到的数据就可以了。

SPI传输的四种方式

根据时钟极性时钟相位的不同共有四种,时钟极性和相位分别指:

  • 时钟极性(CPOL-Clock Polarity):空闲时的极性高(polarity high)或者低(polarity low)。
  • 时钟相位(CPHA-CLock Phase):在上升沿还是下降沿采样数据。

四种模式用图说明如下:

SPI Register

将四种模式的采样时刻(Sampling edge)和数据变化时刻(Toggling edge)截取出来:

SPI Register

在逻辑分析仪上面的配置有可能稍有些不一样:

SPI Register

上图是一个虚拟逻辑分析仪软件上的SPI配置截图,除了通道选择和字长度配置外,它还有其他四个设置:

  • MOSI Samples:如果是方式0和3,那么这里是上升沿,方式1和2应该配置为下降沿。看图。
  • MISO Samples:SO和SI在同一种方式下采样边缘一般是一样的,因此同上。
  • Use Enable:是否使用CS Pin脚。
  • Enable Active:这个是CS有效时候的电平。

示例:SPI寄存器配置

在某一个SoC上时钟极性和时钟相位的配置寄存器:

  • 时钟极性配置(查看前面的4种模式图可以知道模式0和模式1应该是配置为0,另外两种配置为1): SPI Register
  • 时钟相位配置(查看前面的可以知道模式1和模式3应该是配置为1【第二个edge】,另外两种配置为0): SPI Register
  • 一般除了方式设置外还需要对时钟速度配置,这个配置根据不同的SoC跟踪时钟如何分频过来就可以得出。并且需要注意不要超过Spi-Slave设备的最大速度。

SPI reset配置:

SPI Nor Flash

这里用EN25Q128为例,简略说明一下SPI的配置。这里使用模式0标准SPI模式(只用一根DO线)。

SPI-NorFlash的接线

SPI Register

EN25Q128的SPI方式

EN25Q128支持模式0和模式3:

SPI Register

逻辑分析仪配置

假设使用的是SPI方式0,那么MOSI Sampling edge应该设置为Low,MISO Sampling edge设置为High。

SoC SPI控制寄存器配置

根据前面说过的配置好:

  • SoC为Master
  • CPHA
  • CPOL
  • Clock Speed(使用标准模式则需要小于80MHz【◆2】)

配置好后就可以使用逻辑分析仪来协助调试。

使用虚拟逻辑分析仪采集数据示意图

Capture

参考

【◆1】  一个SPI教程。

【◆2】  SPI NorFlash。

【◆3】  说明了为何MISO和MOSI分别在上升沿和下降沿采样。

如果文章有格式问题,请移步:

转载请注明出处。作者:TonyHo hexiongjun.com 

你可能感兴趣的文章
【jvm】Java垃圾回收
查看>>
Spring 面试问题 TOP 50
查看>>
拼多多Java后端团队面试题:epoll+集群+事务隔离+Kafka+分布式等
查看>>
最全BAT算法面试130题:阿里、百度、腾讯、京东、美团、今日头条
查看>>
想进阿里P7,你必须掌握这些技能专题
查看>>
看完你还敢说你懂JVM吗?
查看>>
面试了一个2年程序员,竟然只会curd,网友神回复!
查看>>
ElasticSearch基础分布式架构讲解
查看>>
年底了,程序员来说说你今年写过的最牛逼的bug是什么?
查看>>
阿里P8架构师讲述:3—5年程序员的发展和出路在哪里?
查看>>
题库分库分表架构方案
查看>>
一篇文读懂缓存在大型分布式系统中的最佳应用
查看>>
当亲戚问你工资,程序猿如何作答,简直不能再机智
查看>>
Redis从单机到集群,一步步教你环境部署以及使用
查看>>
电商平台备战促销季的运维秘诀——高可用服务层
查看>>
从零开始实现RPC框架 - RPC原理及实现
查看>>
MySQL索引优化分析
查看>>
RabbitMQ分布式集群架构
查看>>
MySQL每秒57万的写入,带你飞~
查看>>
Java系统高并发的解决方案
查看>>