SPI flash W25Qxx:

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

W25Q16=16Mb=2MB=2048KB=32block=512sector=8192page;

操作:SPI flash写操作必须确保为0XFF才能写入,否则需要檫除操作,檫除的最小单位为Sector即4KB,所以有的会在单片机内部开一个4K的缓存(有点奢侈),写之前先读出来,檫除数据,合并数据(在檫除数据的同时进行操作,合并完了在检查檫除是否完成,不闲着;操作系统级的 将因此进入挂起。要么设定一个合适的超时时间,要么有一个专门的轮训这些标志完成则发信号量),再写入。

驱动程序:https://blog.csdn.net/weixin_42381351/article/details/80813104

SPI SPI flash驱动规范:

1 硬件SPI/软件SPI涉及的MOSI/MISO/SCK的IO设置、SPI设置读写一个字节。

2 存储器件IC涉及的片选、调用SPI读写一个字节操作在某个指定地址读写一个字节/多个字节,檫除等操作。

3业务层次的读写记录,APP升级等。

一主多从可以通过不同片选来发送(都片选则都会收到),但对接收,如果关闭某个片选则可能得不到及时相应;如果都打开则同时来时的处理。IO模拟SPI一主多从如右图,先操作译码器(速度要快)再操作SPI的其它三根口线即可。

GPIO模拟的SPI操作灵活,但效率不高。同时这种方法不适用于SPI的DMA传输,仅适合数据量少、对传输速度要求不同的场合。

硬件SPI的片选可以软件控制也能硬件控制(DMA传输时必须)

关于IO模拟SPI驱动的另一种编程方法:SCLK用PWM输出方波(脉宽周期按手册),其它的4线配置SCLK进行操作,通过读SCLK引脚

GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)来配合时序,不满足就等,满足就进行其它IO的置高置低(配置SYSTICK或NOP进行延时)

关于如何根据时序图用IO模拟写驱动/上升沿采样下降沿发送数据的含义,哪TM7705为例:

上图表示对主机MCU而言:

写的时候:MOSI上上升沿采样,上升沿前低电平时就要发送bit数据即:SCLK=0延时一小段时间就将send_data的MSB发出,然后SCLK=1再延时一段时间,接着进行下一个bit的操作。

读的时候:再MISO上也是上升沿采样,高电平期间读bit.SCLK=0;delay(4),SCLK=1,delay(2),读MISO引脚电平,delay(1),接着进行下一个bit的操作。

 /*
*********************************************************************************************************
* 函 数 名: TM7705_Send8Bit
* 功能说明: 向SPI总线发送8个bit数据。 不带CS控制。
* 形 参: _data : 数据
* 返 回 值: 无
*********************************************************************************************************
*/
static void TM7705_Send8Bit(uint8_t _data)
{
uint8_t i; for(i = ; i < ; i++)
{
SCK_0();
TM7705_Delay();
if (_data & 0x80)
{
DI_1();
}
else
{
DI_0();
}
SCK_1();
TM7705_Delay();
_data <<= ;
TM7705_Delay();
}
}
/*
*********************************************************************************************************
* 函 数 名: TM7705_Recive8Bit
* 功能说明: 从SPI总线接收8个bit数据。 不带CS控制。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
static uint8_t TM7705_Recive8Bit(void)
{
uint8_t i;
uint8_t read = ; SCK_0();
TM7705_Delay();
for (i = ; i < ; i++)
{
  SCK_0();
  TM7705_Delay();   SCK_1();
  TM7705_Delay();
  TM7705_Delay();
  if (DO_IS_HIGH())
  {
    read++;
  }
  read = read<<;
}
return read;
}

SPI接口的FLASH的更多相关文章

  1. flash读写学习笔记与spi接口及简单测试验证(三)

    FPGA中的视频图像资源,以及想要永久存储的程序都是要存储在flash中,flash是FPGA一个不可缺少的部分,flash的种类有很多,根据winbond公司的128Mbit Qual SPI接口的 ...

  2. SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)

    SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...

  3. NUC980 运行 RT-Thread 驱动 SPI 接口 OLED 播放 badapple

    badapple 是什么,上网随便查了下,没看出个究竟,不过有个关于这个挺火的标签或者主题 < 有屏幕的地方就有 badapple >,网上有很多人用很多方式播放 badapple 动画, ...

  4. 嵌入式物联网之SPI接口原理与配置

    本实验采用W25Q64芯片 W25Q64是华邦公司推出的大容量SPI FLASH产品,其容量为64Mb.该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件.W25Q64将8M字节的容量分为 ...

  5. 国产CPLD(AGM1280)试用记录——做个SPI接口的任意波形DDS [原创www.cnblogs.com/helesheng]

    我之前用过的CPLD有Altera公司的MAX和MAX-II系列,主要有两个优点:1.程序存储在片上Flash,上电即行,保密性高.2.CPLD器件规模小,成本和功耗低,时序不收敛情况也不容易出现.缺 ...

  6. spi接口的ds1302时钟芯片控制在lcd1602上显示

    spi接口的ds1302时钟芯片控制在lcd1602上显示                                                                        ...

  7. CC3000 SPI接口编程介绍

    CC3000 SPI 操作: CC3000的SPI 是基于五根线CLCK,CSn,IRQ,MISO,MOSI:通信模式如下图: CLCK:时钟频率0-26M从主机到从机,提供SPI接口时钟 CSn:低 ...

  8. Blackfin DSP(五):BF533的SPI接口

    533SPI的特性 最高速度可达SCLK/4: 支持主模式和从模式: 可使用8个GPIO口作为从选择线: 1 slave select input pins 7 slave select output ...

  9. 高通APQ8074 spi 接口配置

    高通APQ8074 spi 接口配置 8074 平台含有两个BLSP(BAM Low-Speed Peripheral) , 每一个BLSP含有两个QUP, 每一个QUP可以被配置为I2C, SPI, ...

随机推荐

  1. thinkphp 3.2链接Oracle数据库,查询数据

    ennnn,换工作了,开始用新的东西了,最近就是调用nc接口,数据库是Oracle,首先先把数据查出来,这个比较简单. 在网上看的其他的方法都是改数据库配置文件,然后需要修改tp核心的一个类文件,比较 ...

  2. Truffle 快速构建 DApp

    简单介绍 官网传送门  Truffle是针对基于以太坊的Solidity语言的一套开发框架.本身基于Javascript,使用以太坊虚拟机(EVM)的世界一流的开发环境,用于区块链的测试框架和资产管道 ...

  3. slot插槽

    具名插槽只能是template模板标签 插槽组件 <section class="hello"> <slot>Welcome</slot> &l ...

  4. redis介绍、单机安装以及java调用

    什么是redis Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库.和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求(非关系型的.分布式的.开源的.水平可扩展 ...

  5. Python jupuyter 的安装与使用(windows下)

    1.win+R  cmd 打开命令窗 2.pip install jupyter pip安装jupyter 3.安装好后 执行jupyter的启动命令: jupyter notebook --ip=0 ...

  6. java中4种常用线程池

    一.线程池 线程池:说白了,就是一种线程使用模式.线程过多会带来调度开销,进而影响整体性能.而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,这避免了在处理短时间任务时创建与销毁线程的代价 ...

  7. P1028

    一开始没看懂题,看了题解才明白的 = =.思路是,先找规律,会发现有重合部分,利用这些重合部分,写出递推公式. num = 0 时,只有 1 种组合: num = 1 时,只有 1 种组合: num ...

  8. sort的使用

    sort主要是用来排序的,可以用自定义的函数进行比较,也可以用系统的4中函数进行比较,即less(),greater(),less_equal(),greater_equal().但是我试了一下,发现 ...

  9. 「题解」「2014 NOI模拟赛 Day7」冒泡排序

    目录 题目 考场思考 正解 题目勾起了我对我蒟蒻时代的回忆,虽然我现在也蒟蒻 题目 点这里 可能链接会挂,在网上搜题目就有. 毕竟 \(BZOJ\) 有点老了... 考场思考 本来以为十分友善的一道题 ...

  10. Spring Boot RestApi 测试教程 Mock 的使用

    测试 Spring Boot Web 的时候,我们需要用到 MockMvc,即系统伪造一个 mvc 环境.本章主要编写一个基于 RESTful API 正删改查操作的测试用例.本章最终测试用例运行结果 ...