【经验】基于灵动微MM32F0140系列MCU的SPI与串行闪存存储器W25Q80通信应用指南
查看MindMotion(灵动微电子)MM32F0140系列MCU的MiniBoard原理图,SPI挂载了W25Q80。
一、SPI介绍
串行外设接口,Serial Peripheral Interface。一种高速的、全双工、同步的串行通信总线。主要应用于EEPROM、FLASH、AD转换器,还有数字信号处理器和数字信号解码器之间。
SPI 支持同时发送和接收数据,采用主从工作方式。SPI 通过 4 个引脚与外部器件相连,分别是:
MOSI:主设备输出、从设备输入引脚。传输方向为主设备发送到从设备。
MISO:主设备输入、从设备输出引脚。传输方向为从设备发送到主设备。
SCK:串行时钟信号,由主设备产生并提供给从设备。
NSS:片选信号,从设备选择。
下图示意主、从设备之间一对一通信时的连接情况:
主设备负责发起通信请求,从设备负责响应,从设备通过 SCK 引脚得到主设备提供的时钟信号,从而使得主、从设备均使用同一个时钟进行同步的全双工通信。对于从设备而言,MOSI 引脚输入来自主设备的发送数据,MISO 引脚输出响应数据传给主设备。
SPI 需要根据从机特性,选配时钟极性(CPOL)和时钟相位(CPHA),比如从机时钟空闲时为低电平,且在时钟信号的第一个跳变沿采样,此时时序见下图:
二、W25Q80介绍
W25Q80是一种串行闪存存储器,主要特点包括:
容量:8 Mbit(1 MB)的存储容量,可以存储大量数据。
SPI接口:采用SPI接口进行数据通信,具备高速的数据传输能力。
快速读取:支持快速的连续读取操作,可提供高效的读取性能。
块擦除:支持块擦除功能,可以批量擦除数据,提高擦除效率。
低功耗:采用低功耗设计,适用于对功耗要求较高的应用场景。
W25Q80可以划分为 4096 个扇区,每个扇区包含 256 个页,每个页的大小为 256 字节。
下图为W25Q80的指令:
三、例程
1.介绍
本例程实现SPI与W25Q80通信,SPI查询W25Q80的设备号,并全片擦除后写入数据,再读取出来,看写入的数据与读取的数据是否一致。
2.编码详情
1)初始化配置SPI,速度为PCLK1(36MHz)的32分频,约为1.125MHz;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_DataWidth = 8;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_Init(SPI2, &SPI_InitStructure);
exSPI_DataEdgeAdjust(SPI2, SPI_DataEdgeAdjust_FAST);
SPI_BiDirectionalLineConfig(SPI2, SPI_Direction_Tx);
SPI_BiDirectionalLineConfig(SPI2, SPI_Direction_Rx);
SPI_Cmd(SPI2, ENABLE);
2)编写SPI发送和读取数据的函数
uint32_t writeAndReadData(uint8_t data)
{
SPI_SendData(SPI2, data);
while (1) {
if(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXEPT)) {
break;
}
}
while (1) {
if(SPI_GetFlagStatus(SPI2, SPI_FLAG_RXAVL)) {
return SPI_ReceiveData(SPI2);
}
}
}
3)获取W25Q80的设备ID
SPI_CSInternalSelected(SPI2, ENABLE); // 片选
writeAndReadData(0x9F); // 读ID指令
ID |= writeAndReadData(0x00) << 16;
ID |= writeAndReadData(0x00) << 8;
ID |= writeAndReadData(0x00);
SPI_CSInternalSelected(SPI2, DISABLE); // 取消片选
printf("\n\nread device id: %X", ID);
4)全片擦除W25Q80,并检查状态等待擦除完成
SPI_CSInternalSelected(SPI2, ENABLE);
writeAndReadData(0x06); // 写使能
SPI_CSInternalSelected(SPI2, DISABLE);
SPI_CSInternalSelected(SPI2, ENABLE);
writeAndReadData(0xC7); // 全片擦除指令
SPI_CSInternalSelected(SPI2, DISABLE);
SPI_CSInternalSelected(SPI2, ENABLE);
writeAndReadData(0x05); // 读状态寄存器
while(1) {
temp = writeAndReadData(0x00);
if((temp & 0x01) == 0x0) // 擦除完成
break;
}
SPI_CSInternalSelected(SPI2, DISABLE);
printf("\n\nerase complete");
5)写数据,并检查状态等待写完
for (i = 0; i < 256; i++) txData[i] = i;
SPI_CSInternalSelected(SPI2, ENABLE);
writeAndReadData(0x06);// 写使能
SPI_CSInternalSelected(SPI2, DISABLE);
SPI_CSInternalSelected(SPI2, ENABLE);
writeAndReadData(0x02); // 页编程
writeAndReadData(0x00); // 页地址
writeAndReadData(0x00);
writeAndReadData(0x00);
for (i = 0; i < 256; i++)
{
writeAndReadData(txData[i]);
}
SPI_CSInternalSelected(SPI2, DISABLE);
SPI_CSInternalSelected(SPI2, ENABLE);
writeAndReadData(0x05); // 读状态寄存器
while(1) {
temp = writeAndReadData(0x00);
if((temp & 0x01) == 0x0) // 页编程完成
break;
}
SPI_CSInternalSelected(SPI2, DISABLE);
printf("\n\npage programm complete");
6)读数据,并打印出来
SPI_CSInternalSelected(SPI2, ENABLE);
writeAndReadData(0x03); // 读数据
writeAndReadData(0x00); // 页地址
writeAndReadData(0x00);
writeAndReadData(0x00);
for (i = 0; i < 10; i++)
{
rxData[i] = writeAndReadData(0x00);
}
SPI_CSInternalSelected(SPI2, DISABLE);
printf("\n\nread data completely\n");
for (i = 0; i < 10; i++)
printf("\nrxDate[%d] = %d", i, rxData[i]);
3.串口输出结果
下图为串口输出数据,基本符合程序流程和结果。
4.逻辑分析仪
下图为逻辑分析仪截取的发送接收图片,可以清楚的看到当前SCK速度接近1.125MHz,以及发送数据也符合预期。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由ll转载自Mindmotion 微信公众号,原文标题为:灵动微课堂 (第271讲)|基于MM32F0140的SPI与W25Q80通信,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
Keil分散加载文件浅析
分散加载文件(scatter file)是一个文本文件,用于描述 ARM 链接器生成映像文件所需要的信息,在一些应用场景中嵌入式系统可能会使用分散加载。本章节简要介绍了分散加载文件的基本概念和语法,旨在对分散加载文件有初步认识。
灵动微电子MM32F0160系列MCU FlexCAN-FD通信应用指南
MM32F0160系列MCU具有一个 FlexCAN 模块,该模块遵循 ISO 11898-1 标准、 CAN FD 和 CAN 2.0B 协议规范,不仅兼容传统CAN,还支持CAN FD模式。本章节初步学习使用MM32F0160 FlexCAN-FD接口实现CAN FD通信,相关例程参考灵动官网的LibSamples或在此基础上修改。
使用灵动MM32F5270 MCU UART配置实现LIN通信
本文主要简述MM32F5270 UART是如何实现LIN通信的。从LIN驱动程序、 主机程序、从机程序和验证等方面来讲代码实现。
灵动凭借MM32SPIN0230/080G/060G电机控制MCU获“最佳电机控制器解决方案供应商”荣誉
2024年11月21日,在2024电机控制先进技术研讨会(秋季),“2024第五届电机控制技术市场表现奖”年度评选活动上,MindMotion灵动凭借多年在电机控制领域的优秀表现,荣获“最佳电机控制器解决方案供应商”奖,该奖项旨在通过业界共同推荐、评选出电机控制行业内市场表现优秀,具有技术和创新能力的企业。
MindMotion(灵动微)MM32系列32位MCU选型指南
公司介绍及产品应用领域 第二代M0产品 G系列产品 / 第二代M3产品 / 第二代M33产品 / 第二代电机专用MCU 第二代电机SOC产品 / AEC-Q100 / 第二代低功耗产品 第一代M0产品 第一代M3产品 / 第一代M33产品 / 第一代电机专用MCU / 第一代电机SOC产品 / 第一代低功耗产品
MINDMOTION - MCU,单片机,MM32G0163D4PV,MM32L0XX,MM32F0144C6PM,MM32F5230,MM32SPIN580C,MM32G0020,MM32G0140,MM32L073PF,MM32F0133C4Q,MM32SPIN080GN,MM32SPIN560CM,MM32SPIN023C,MM32F0133C4P,MM32F5287L8PV,MM32SPIN533AM,MM32F0162D7P,MM32F0121C6P,MM32SPIN0230,MM32F0163D4Q,MM32SPIN080C,MM32F0141C1T,MM32L062NT,MM32F0020B1N,MM32F0144C1TV,MM32F5330,MM32G0001,MM32G0120,MM32F0144C1TM,MM32F0163D7P,MM32SPIN030CN,MM32G0121C1TV,MM32SPIN07PF,MM32F0010A1TV,MM32SPIN05PFOP,MM32SPIN0230B1TV,MM32SPIN37PSD,MM32G0001A6T,MM32F3270,MM32F0121C4P,MM32F5277E9PV,MM32F5287L9PV,MM32F0121C4Q,MM32F5333D6PV,MM32SPIN0280DAPV,MM32F0163D6P,MM32F0121C4N,MM32SPIN080G,MM32F0144C4PM,MM32SPIN560,MM32F0144C4PV,MM32F5280,MM32SPIN06NT,MM32F0140,MM32SPIN560C,MM32F0020,MM32G5333D6QV,MM32F0162D4Q,MM32F0273D6P,MM32F0050C1TV,MM32SPIN0230B3NV,MM32SPIN06PF,MM32G0144C4QV,MM32SPIN0280,MM32L052NT,MM32F5270,MM32F0144C4P,MM32F5277E8PV,MM32F031C6T6,MM32F0130,MM32F0010,MM32F0020B1TV,MM32F5333D7PV,MM32G0144C4PV,MM32SPIN080CN,MM32F0144C4Q,MM32SPIN060G,MM32L0136C7P,MM32F0133C7P,MM32SPIN05NW,MM32F5331D3NV,MM32SPIN05NT,MM32F0040B1T,MM32G0001A6T1V,MM32SPIN06PT,MM32F0120,MM32F0162D6P,MM32F5331D3NM,MM32F003NW,MM32G0160,MM32SPIN27NF,MM32F0163D4QM,MM32SPIN05PF,MM32F031,MM32F3273G6P,MM32F0163D4QV,MM32L0136B6P,MM32G0001A1TV,MM32F0133C6P,MM32SPIN0280D7PV,MM32F5277E7PV,MM32F0144C6P,MM32SPIN222C,MM32F0144C6PV,MM32F0010A6T,MM32G0001A1T,MM32F3273G7P,MM32L0130,MM32G0001A1N,MM32SPIN05PT,MM32G0121C4PV,MM32F0010A1T,MM32F5233D7PV,MM32SPIN27PF,MM32F0010A1N,MM32G5330,MM32SPINEBK,MM32SPIN07,MM32F3273G8P,MM32SPIN160C,MM32SPIN06,MM32SPIN0230B1NV,MM32L0136C6P,MM32SPIN05,MM32F0040B1N,MM32L0020,MM32F0050,MM32SPIN0280D6PV,MM32SPIN533,MM32F031K6U6,MM32F3273G9P,MM32F0163D6PM,MM32SPIN040C,MM32G0020B1T,MM32F003,MM32SPIN37,MM32F0163D6PV,MM32G0020B1N,MM32F0273D8P,MM32F0160,MM32L0136C3T,MM32F0040,MM32G0001A1NV,MM32SPIN0280D6QV,MM32F0144C1T,MM32F103CBT6,MM32F5233D6PV,MM32F0144C4QM,MM32F3273E6P,MM32SPIN27PQ,MM32SPIN27PS,MM32SPIN27PT,MM32L0136C4N,MM32SPIN27,MM32F0020B1NV,MM32F0270,MM32G0121C4QV,MM32F031F6U6,MM32F0273D7P,MM32F003TW,MM32G0144C1TV,MM32F3273E7P,MM32G0163D6PV,MM32F0163D7PM,MM32F0141B1T,MM32SPIN030C,MM32F0163D7PV,MM32F0131C7P,MM32F103,MM32SPIN05TW,MM32F031Y6Y6,MM32F0141C4P,MM32F0141C4Q,MM32F0141C4N,MM32F031K6T6,MM32F0010A1NV,MM32F0131C6P,MM32SPIN422C,MM32SPIN0280D4PV,MM32F0020B1T,MM32L0020B1T,MM32F103RBT6,MM32L0020B1N,MM32F031F6P6,MM32F0121C1N,MM32F0050C1NV,MM32F5333D4QM,MM32G0001A6TV,MM32SPIN360C,MM32,MM32F5333D4QV,MM32F0141C6P,MM32F0141B4P,MM32F0131C4P,MM32F0131C4Q,MM32SPIN0230B3TV,MM32SPIN533A,MM32SPIN033A,MM32F5287L7PV,MM32F5233D4QV,安防,汽车,消费电子,厨电,个人护理,电动工具,车身电子,通信,智能家居,汽车电机,无线连接,手机周边,工业控制,数据通信,楼宇自动化,计量仪表,电机,泵类,小家电,工业能源,伺服电机,照明控制,汽车周边,汽车配件,低速交通工具,显示仪表,家电,电源,个人娱乐,健康,个人健康,电脑周边,大家电,计算机
MindMotion MM32H5480 Triumphs with “2024 Hardcore MCU Chip Award“
MindMotion Microelectronics, as a frontrunner in the domestic market for general-purpose 32-bit MCU products and solutions, proudly secured the “2024 Hardcore MCU Chip Award“ for its high-performance product, the MM32H5480.
【IC】灵动新推出32位MCU MM32F0120,主频高达72MHz,提供64KB Flash和8KB RAM
灵动微电子发布的MM32F0120,搭载Cortex M0内核,主频高达72MHz,提供64KB Flash和8KB RAM,最高支持48pin封装。适用于屏显控制、电动玩具、电源管理、马达控制、无线快充等多种应用场合。
【IC】“灵动·星”系列MM32高性能MCU产品搭载Star-MC1提供强劲内核动力,性能提升20%
“灵动·星”系列 MM32 高性能 MCU 产品,搭载安谋科技(Arm China)Star-MC1 内核性能,其1.5 DMIPS / MHz,提升 20% ,4.02 CoreMark / MHz,提升20% 。目前包含 4 个子系列: MM32F3,灵动·天枢 MM32F5,灵动·玉衡 MM32G5,灵动·天玑 MM32H5,为用户提供灵活、丰富的选择。
【经验】基于MM32F0163D7P的USB Audio Class(UAC)音频设备移植教程
在上一节我们在MM32F0163D7P 平台上成功的移植了TinyUSB,基于这个平台,今天我们来实现一个 uac2_headset 音频设备,这个设备支持基础的录音和放音功能,如果要支持音量调节/静音功能,还需要再添加一个 HID 变成复合设备。
【经验】灵动MindSDK搭建Keil MDK开发环境指南
本文介绍基于Windows操作系统构建嵌入式系统开发环境过程中需要使用的主要软件Keil MDK,并对一些需要特别关注的要点重点说明。Keil MDK是灵动官方的软件开发平台MindSDK支持的主要编译工具之一。
【IC】灵动微电子高性能通用32位MCU产品MM32H5480荣获“2024年度硬核MCU芯片奖”
近日,第六届硬核芯生态大会在深圳举办,同期2024年度硬核中国芯获奖榜单正式发布。作为国内领先的本土通用32位MCU产品及解决方案供应商,MindMotion灵动微电子凭借高性能产品MM32H5480斩获“2024年度硬核MCU芯片奖”。
【IC】灵动发布全新入门级32位MCU MM32G0001系列,内置时钟全温度范围内偏差不超过±2%
灵动股份推出全新超值型MM32G0001系列MCU。2023年初,灵动首次发布了其主打高性价比的MM32G系列,目前已陆续推出了G0140,G0160和G5330系列产品。为进一步丰富MM32G系列产品组合,灵动和上下游合作伙伴通力合作,打造出全新入门级超值型MM32G0001系列MCU。
灵动微电子扎根张江造“芯”,打造本土32位MCU知名品牌
灵动微电子成立于2011年,2016年进军MCU市场,2019年积极向工业、大家电、汽车等领域发力,目前已涵盖消费电子、电机与电源、家电、汽车、计算机与通信、工业控制等应用领域,客户群体包括飞利浦、小米、汇川、海尔、海信、美的等,是中国本土领先的通用32位MCU 产品及解决方案供应商。
New Milestone! Following the Success of MM32G0001, MindMotion Launches the Next-Level, High-Value MCU – MM32F0120
MindMotion Microelectronics is excited to announce the official launch of its next-level MCU, the MM32F0120. In 2023, MindMotion‘s entry-level MCU, MM32G0001, made a huge impact with its cost-performance ratio, comparable to or even surpassing 8/16-bit MCUs, earning high praise in the market.
电子商城
现货市场
服务
可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。
最小起订量: 1000 提交需求>
拥有IC烧录机20余款,100余台设备,可以烧录各种封装的IC;可烧录MCU、FLASH、EMMC、NAND FLASH、EPROM等各类型芯片,支持WIFI/BT模组PCBA烧录、测试。
最小起订量: 1 提交需求>
登录 | 立即注册
提交评论