SPI读写FLASH 原理+完整代码

引言

       实现SPI通讯,对FLASH进行读写。读取FLASH的ID信息,写入数据,并读取出来进行校验,通过串口打印写入与读取出来的数据,输出测试结果。

一、SPI总线

SPI通信的基础知识

       SPI是串行外设接口(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,最大SPI速度可达到18MHz 。

        通常SPI通过4个管脚与外部器件相连:

       MISO:主设备输入/从设备输出管脚。

       MOSI:主设备输出/从设备输入管脚。

       SCK:串口时钟,作为主设备的输出,从设备的输入。

       NSS:从设备选择。这是一个可选的管脚,用来选择主/从设备。它的功能是用来作为“片选管脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。

时钟信号的相位和极性

       SPI_CR寄存器的CPOLCPHA位,能够组合成四种可能的时序关系,其中使用的最为广泛的是SPI0和SPI3方式。

      SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。

这些时序体现了SPI_CR1寄存器的LSBFIRST被重置(置0)时的情况,即MSB模式。 

SPI模式

CPOL

CPHA

空闲时SCK时钟

采样时刻

0

0

0

低电平

奇数边沿

1

0

1

低电平

偶数边沿

2

1

  • 15
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Artemis_yuer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值