KL25的SPI连接一个nor flash。该flash型号为FM25F04,支持SPI的模式0和模式3,要求高位先发送,在上升沿采集数据。

通常,SPI有4种模式,取决于CPOL与CPHA如何配置。

CPOL决定SPI总线空闲时的时钟恒定为高还是为低。CPHA决定是第一个时钟沿采样还是第二个时钟沿采样。

KL25单片机的数据手册有如下叙述:

翻译如下:

CPOL为0,SPI空闲时时钟为低;(等价意思是第一个跳变沿为上升沿)

CPOL为1,SPI空闲时时钟为高;(等价意思是第一个跳变沿为下降沿)

CPHA为0,第一个时钟沿时数据已经准备好了。(即第一个时钟沿采样)

CPHA为1,第一个时钟沿时数据刚启动。(即第二个时钟沿采样)

所以,如果想要上升沿采样,应该配置CPOL为0,CPHA为0。

强烈鄙视网上的KL25教学视频,居然说CPHA决定上升沿采样还是下降沿采样,说:CPHA为1时为上升沿采样,为0时是下降沿采样,误人子弟啊!擦!

KL25的SPI总线用同一名称寄存器传数据和接收数据,不过两者虽然同名,地址却不相同,这一点我们不用理会(网上视频教学这么讲)。SPI操作的显著特点是本身具有环路特征,所以想要得到从机的输出,主机必须输入,把从机的数据给挤出来。主机有多少输入,从机才会有多少输出,从机本身不具备输出能力,所以主机不能仅仅只输入控制命令,接着就等从机的输出,它必须接着输入冗余内容去挤从机的数据。

因为SPI总线的特点,所以存在着一定的总线效率浪费,比如当我们发送控制命令时,此时从机也有返回值,只不过对我们没意义,所以没有读取;当我们想要索取从机的寄存器值时,必须发送冗余字节给从机,此时也是在浪费总线效率。

下面给出我写的代码:

这里没有使用SPI总线的自动片选功能,而是使用GPIO来控制从机的片选,优点在于灵活。

下面的代码是操作nor flash的控制命令。要求先输入命令0xAB,然后写入三个冗余字节0x00(等待从机),接下来从机才会返回device id。这里要注意,主机要想得到从机的数据,不能仅仅只写三个冗余字节,因为从机是没有发送数据的能力的,它想发送必须是主机用数据将其挤出来。所以主机必须多发一个冗余的字节。

KL25用SPI操作nor flash的更多相关文章

  1. spi数据KL25用SPI操作nor flash

    最近研究spi数据,稍微总结一下,以后继续补充: KL25的SPI连接一个nor flash.该flash型号为FM25F04,支撑SPI的模式0和模式3,要求高位先发送,在上升沿采集数据. 通常,S ...

  2. STM32学习笔记(八) SPI总线(操作外部flash)

    1. SPI总线简介 SPI全称串行外设接口,是一种高速,全双工,同步的外设总线:它工作在主从方式,常规需要至少4根线才能够正常工作.SPI作为基本的外设接口,在FLASH,EPPROM和一些数字通讯 ...

  3. STM32F10X SPI操作flash MX25L64读写数据(转)

    源:STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自 ...

  4. SPI操作flash MX25L64读写数据

    STM32F10X SPI操作flash MX25L64读写数据 简单的一种应用,ARM芯片作为master,flash为slaver,实现单对单通信.ARM主控芯片STM32F103,flash芯片 ...

  5. Am335x 应用层之SPI操作

    SPI接口有四种不同的数据传输时序,取决于CPOL和CPHL这两位的组合.图1中表现了这四种时序, 时序与CPOL.CPHL的关系也可以从图中看出. 图1 CPOL是用来决定SCK时钟信号空闲时的电平 ...

  6. 玩转X-CTR100 l STM32F4 l W25Q64 SPI串行FLASH存储

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 板载FLA ...

  7. SPI接口的FLASH

    SPI flash W25Qxx: W25Q系列的spiflash.每页(Page)256B,每16个page为一个sector(扇区=4KB),每16个扇区为一个block(块=64KB) W25Q ...

  8. Mini2440 通过 SPI 操作 OLED (裸板下使用 SPI 控制器)

    在裸板下使用 SPI 的话,有两种方法可选: 使用 IO 口模拟 SPI 进行操作 使用 SPI 控制器进行操作 这里我们选用控制器的方式,简单方便. 初始化 SPI static void SPIC ...

  9. 【接口时序】5、QSPI Flash的原理与QSPI时序的Verilog实现

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 4.Matlab版本:Matlab2014b/ ...

随机推荐

  1. DBA 思想天空笔记

    /*+leading(t1) use_nl(t2*/这个HINT的含义,其中use_nl表示强制用嵌套循环连接方式.Leading(t1)表示强制先访问t1表,也就是t1表作为驱动表,增加HINT的目 ...

  2. KEIL 程序定位

    用Keil做51的开发也4年多了,代码量基本上维持在5~10K左右,说大不大,说小也不小,也就是个中等货色.这段期间工作上难得有稍许的空间,潜心研究了一下keil中如何在 CODE中定位C程序的方法. ...

  3. 正确地黑C

    转载:http://tieba.baidu.com/p/3190068223?pn=1 本版暂时当作提纲,不做详细展开讨论,以后可能更新. 注意:本文主旨不是政治正确. 1.设计C的设计相对于同期来说 ...

  4. 记忆2--记忆的"记"和"忆"

    有时候也会想,我们是如何记住东西的?是如何想起来的?在写这篇文章的时候,想起初中的时候(应当是初二),语文老师检查唐诗背诵,在下面觉得已经能背起来的时候,去向老师背诵的时候,忘记了开头,干急想不起来, ...

  5. Android实现Live Photos 加源代码

    在Android手机上实现类似于iphone中的LivePhoto的功能 源代码分享 github:https://github.com/amazingyyc/DeepRed 代码说明: 1.改变视频 ...

  6. Centos中安装code blocks

    CentOS下面安装Codeblocks不像Ubuntu下面那样轻松,可以直接在软件中心安装.这里好多信赖我们要自己安装,也不是很麻烦. 1.先安装gcc和gcc++,这个可以直接安装 # yum i ...

  7. Block内的强引用

    众所周知,当某个对象持有着一个Block的时候,如果在Block内部使用强引用反过来持有这个对象,就会导致引用循环.为了避免引用循环,可以使用__weak修饰符,苹果的官方文档在用代码演示__weak ...

  8. J2EE之普通类载入web资源文件的方法

    在WEB中普通类并不能像Servlet那样通过this.getServletContext().getResourceAsStream()获取web资源,须要通过类载入器载入,这里有两种方式,这两种方 ...

  9. 批量创建prefab

    using UnityEngine; using System.Collections; using UnityEngine.UI; using System.IO; using UnityEdito ...

  10. What is NetApp's Cluster File System?

    Data ONTAP GX: A Scalable Storage Cluster www.usenix.org/event/fast07/tech/full_papers/eisler/eisler ...