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. CentOS6.5_x64安装MySQL-5.6.17,在已经启动MySQL服务的情况下,出现密码报错ERROR 2002 (HY000)

    1.修改MySQL配置文件,使MySQL登陆时跳过密码验证 skip-grant-tables 2.重启MySQL服务 service mysql restart 3.进入MySQL,修改user表中 ...

  2. [Qt 踩坑] 设置背景就卡退 报错 异常结束或者crashed 0xFFFFFFFF

    #开始 我现在是带着崩溃得心情写博客的 这个估计是我遇到的最混蛋的bug 我试图用Qt写个小程序 然后给窗口添加一个背景 就像这样 先不管我那个路径的问题 只要写了那个代码,就一定出错 删除了一点事情 ...

  3. java文件上传判断文件夹是否存在

    判断文件夹是否存在,不存在创建文件夹 File file =new File("E:/workspace/net/src/main/webapp/upload"); //如果文件夹 ...

  4. java 对图片的添加文字描述,以及两张图片合成一张

    最近公司一个需要,需要把商品的优惠卷分享链接,生成一个二维码然后和商品主图合成一张,并且在新合成的主图增加商品信息的描述,好了直接看合成后图片的样式 下面我就直接贴代码,首先是Contorller层 ...

  5. Tomcat笔试题!

    1.企业常见的中间件产品有哪些? 商业:nginx企业版,jobss开源:nginx社区版,tomcat,apache 2.Tomcat软件早期名字及其主要作用? Tomcat的前身为Catalina ...

  6. 反编译 java

    1.winrar https://www.rarlab.com/ 2.github  jd-gui http://java-decompiler.github.io/ SignNatureTest.j ...

  7. NET在64位系統使用32位oracle客户端访问数据库

    客户在win7 64位系统中安装32位的ora客户端,NET 安装后连线数据库 引发BadImageFomatException. 按客户机安装64位ora客户端也不现实,可能会影响其他应用的正常使用 ...

  8. 4_5 追踪电子表格中的单元格(UVa512)(选做)

    在电子表格中的数据都存储在单元格中,它是按行和列(R)(C).一些在电子表格上的操作可以应用于单个单元格(研发),而其他的可以应用于整个行或列.典型的单元操作包括插入和删除行或列和交换单元格内容.一些 ...

  9. 用for循环写这段代码

    之前用while循环写了一段代码,现在改为用for循环来写,代码如下: hongtao_age = 38 for i in range(5): guess_age = int(input(" ...

  10. twisted reactor 实现源码解析

    twisted reactor 实现源码解析 1.      reactor源码解析 1.1.    案例分析代码: from twisted.internet import protocol fro ...